Commit 671d1009 by xiaoqing.gu

1、增加客显代码 2、支付新增查询接口

parents 652c6240 924b3007
cmake_minimum_required(VERSION 3.1.0)
project(fmp_epay)
SET(TARGET_NAME fmp_epay)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set( CMAKE_BUILD_TYPE Debug )
find_package(Qt5 COMPONENTS Widgets Gui Core Sql Network Concurrent REQUIRED)
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
message("debug mode ")
set(CTKCORE CTKCored.lib)
set(CTKPLUG CTKPluginFrameworkd.lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${fmPOS_SOURCE_DIR}/debug/plugins)
ELSEIF(CMAKE_BUILD_TYPE MATCHES "Release")
set(CTKCORE CTKCore.lib)
set(CTKPLUG CTKPluginFramework.lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${fmPOS_SOURCE_DIR}/Release/plugins)
ENDIF()
set(ORIGIN_TARGET ${TARGET_NAME})
#通过批处理文件获取版本和资源文件需要的一些信息
message(STATUS "The bat : ${ORIGIN_TARGET}")
set(ABSPATH ${fmPOS_SOURCE_DIR}/fmprc_cmake.bat)
message(STATUS "The bat : ${ABSPATH}")
execute_process(COMMAND ${ABSPATH} ${TARGET_NAME} WORKING_DIRECTORY ${fmPOS_SOURCE_DIR} OUTPUT_VARIABLE VER )
string(REGEX REPLACE "\r|\n" " " VERTEMP ${VER})
string(STRIP ${VERTEMP} SEXY_STRING)
string(REPLACE " " ";" SEXY_LIST ${SEXY_STRING})
message(STATUS "list = ${SEXY_LIST}")
list(GET SEXY_LIST 0 VER_TARGET)
message(STATUS "VER_TARGET = ${VER_TARGET}")
list(GET SEXY_LIST 1 VER_TIME)
message(STATUS "VER_TIME = ${VER_TIME}")
list(GET SEXY_LIST 2 VER_MAJOR)
message(STATUS "VER_MAJOR = ${VER_MAJOR}")
list(GET SEXY_LIST 3 VER_MINOR)
message(STATUS "VER_MINOR = ${VER_MINOR}")
list(GET SEXY_LIST 4 VER_REVISION)
message(STATUS "VER_REVISION = ${VER_REVISION}")
list(GET SEXY_LIST 5 VERSION)
message(STATUS "VERSION = ${VERSION}")
list(GET SEXY_LIST 6 VER_BUILD)
message(STATUS "VER_BUILD = ${VER_BUILD}")
set(TARGET_NAME ${TARGET_NAME}_${VERSION})
find_path(versionpath version.h.in PATHS ${CMAKE_CURRENT_SOURCE_DIR}/..)
message(${versionpath})
#资源文件替换及拷贝
configure_file(
"${PROJECT_SOURCE_DIR}/../version.h.in"
"${PROJECT_SOURCE_DIR}/version.h"
)
configure_file(
"${PROJECT_SOURCE_DIR}/../MANIFEST.MF.in"
"${PROJECT_SOURCE_DIR}/res/MANIFEST.MF"
)
configure_file(
"${PROJECT_SOURCE_DIR}/../template.qrc.in"
"${PROJECT_SOURCE_DIR}/res/${ORIGIN_TARGET}.qrc"
)
configure_file("${PROJECT_SOURCE_DIR}/../pluginrc.h" "${PROJECT_SOURCE_DIR}/res/resource.h" COPYONLY)
configure_file("${PROJECT_SOURCE_DIR}/../pluginrc.rc" "${PROJECT_SOURCE_DIR}/res/${ORIGIN_TARGET}.rc" COPYONLY)
file(GLOB DIR_SRCS
"*.h"
"*.cpp"
)
INCLUDE_DIRECTORIES(${fmPOS_SOURCE_DIR}/include/ctk)
INCLUDE_DIRECTORIES(${fmPOS_SOURCE_DIR}/include/interface)
link_directories(${fmPOS_SOURCE_DIR}/lib)
ADD_LIBRARY (${TARGET_NAME} SHARED ${DIR_SRCS} res/fmp_epay.qrc res/img.qrc res/fmp_epay.rc )
target_link_libraries(${TARGET_NAME}
Qt5::Widgets
Qt5::Core
Qt5::Gui
Qt5::Network
Qt5::Sql
Qt5::Concurrent
${CTKCORE}
${CTKPLUG})
......@@ -38,18 +38,31 @@ FMPePay::~FMPePay()
void FMPePay::InitService()
{
if (_inited) return;
Q_D(FMPePay);
d->Init();
}
#ifdef GuestDisplay
void FMPePay::OnAmountChange(int amount)
{
Q_D(FMPePay);
d->SetAmoumt(amount);
}
#endif
void FMPePay::UninitService()
{
if (_inited) {
Q_D(FMPePay);
d->Uninit();
}
#ifdef GuestDisplay
emit FMPePayInterface::gxqCWindow();
#endif
}
void FMPePay::SetBasicInfo(QVariantHash hash)
......
......@@ -31,6 +31,11 @@ public:
void DockQueryRequest(const QByteArray &json);
QByteArray DockQueryRespond();
#ifdef GuestDisplay
public slots:
void OnAmountChange(int amount);
#endif
protected slots:
void InitService();
......
......@@ -15,6 +15,8 @@ QMAKE_LFLAGS_RELEASE += /debug /opt:ref
CONFIG += c++11
DEFINES += #GuestDisplay
SOURCES += \
fmp_epay.cpp \
fmp_epay_p.cpp \
......
......@@ -20,6 +20,7 @@
#define FMP_EPAY_TIMEOUT "timeout"
//
#define FMP_JKEY_FM_ORDER_ID "fm_order_id"
#define FMP_JKEY_POS_TRANSID "trans_id"
#define FMP_JKEY_FM_ORDERID "fm_id"
#define FMP_JKEY_PAY_TRANSID "fm_transId"
......@@ -42,6 +43,7 @@
#define FMP_EPAY_REFUND_TRANSTRACTION_AMOUNT "refund_count"
#define FMP_EPAY_REFUND_TRANSTRACTION_TRANSID "paied_trans_id"
#define FMP_EPAY_REFUND_TRANSTRACTION_EBCODE "paied_ebcode"
#define FMP_EPAY_REFUND_ID "refund_id"
//sql字段
......
......@@ -35,9 +35,17 @@ signals:
void TriggerInit();
void TriggerUninit();
public slots:
#ifdef GuestDisplay
virtual void OnAmountChange(int amount) = 0;
signals:
void gxqCWindow();
#endif
protected slots:
void OnTriggerInit() { FMPluginInterface::OnTriggerInit(); }
void OnTriggerUninit() { FMPluginInterface::OnTriggerUninit(); }
// /**
// * @brief ShowPayDialog
// * 呈现支付主界面
......
......@@ -39,6 +39,9 @@ FMPePayPrivate::FMPePayPrivate(FMPePay *parent)
_reverse_flag(false),
_is_api(false),
_api_abort(false),
#ifdef GuestDisplay
_amount(0),
#endif
auto_close_seconds(0)
{
_watcher = new QFutureWatcher<QByteArray>();
......@@ -185,6 +188,15 @@ void FMPePayPrivate::Init()
// return;
// }
}
else if(_origin_request["fm_cmd"].toInt() == 10030)
{
//组装支付查询接口的json
QJsonObject obj;
obj.insert(FMP_EPAY_STOREID, q->_store_id);
obj.insert(FMP_EPAY_STATIONID, q->_station_id);
obj.insert(FMP_EPAY_OPERATORID, q->_operator_id);
ControlQueryJson(obj);
}
QJsonArray pos_products = _origin_request["products"].toArray();
QJsonArray products;
int i = 1;
......@@ -196,17 +208,29 @@ void FMPePayPrivate::Init()
hash["products"] = products;
}
if(_payDialog == nullptr) {
_payDialog = new FMPPayDialog(this, hash);
}
else {
_payDialog->setBasicInfo(hash);
}
if(!(_origin_request["fm_cmd"].toInt() == 10030)) {
if(_payDialog == nullptr) {
_payDialog = new FMPPayDialog(this, hash);
}
else {
_payDialog->setBasicInfo(hash);
}
#ifdef GuestDisplay
if(_amount > 0)
{
_payDialog->setAmount(_amount);
_amount = 0;
}
#endif
_payDialog->show();
_payDialog->show();
if(_origin_request["fm_cmd"].toInt() == 10041 && !hash[FMP_JKEY_FM_ORDERID].toString().isEmpty()) {
_payDialog->confirmRefund();
if(_origin_request["fm_cmd"].toInt() == 10041 && !hash[FMP_JKEY_FM_ORDERID].toString().isEmpty()) {
_payDialog->confirmRefund();
}
}
}
......@@ -229,6 +253,14 @@ void FMPePayPrivate::clearorder()
});
}
#ifdef GuestDisplay
void FMPePayPrivate::SetAmount(int amount)
{
if(_payDialog != NULL)
_payDialog->setAmount(amount);
}
#endif
QSqlTableModel *FMPePayPrivate::model() const
{
return _model;
......@@ -325,12 +357,54 @@ QByteArray FMPePayPrivate::DockRefundRespond()
void FMPePayPrivate::DockQueryRequest(const QByteArray &json)
{
//!TODO DockQueryRequest()
_is_api = true;
_api_abort = false;
_origin_request = QJsonDocument::fromJson(json).object();
}
QByteArray FMPePayPrivate::DockQueryRespond()
{
//!TODO DockQueryRespond()
return "";
QByteArray json = "{\"statusCode\":106, \"msg\":\"\347\252\227\345\217\243\345\267\262\345\205\263\351\227\255\357\274\214\344\272\244\346\230\223\345\217\226\346\266\210\", \"prompt\":0}";
_api_evt.exec();
if (!_api_abort) {
_docked_response = QJsonObject();
_docked_response[FMP_EPAY_STATUSCODE] = _origin_response[FMP_EPAY_STATUSCODE];
_docked_response[FMP_EPAY_ERRORMSG] = _origin_response.contains("msg") ? _origin_response[FMP_EPAY_ERRORMSG] : QJsonValue("");
_docked_response["prompt"] = 0;
if (_origin_response["statusCode"].toInt() == 100) {
_docked_response["fm_transId"] = _origin_response["pay_transId"];
_docked_response[FMP_EPAY_FMID] = _origin_response["fmId"];
_docked_response[FMP_EPAY_PAYED_AMOUNT] = _origin_response["total_amount"];
_docked_response[FMP_EPAY_INVOICE_AMOUNT] = _origin_response[FMP_EPAY_INVOICE_AMOUNT];
_docked_response[FMP_EPAY_DISCOUNT_AMOUNT] = _origin_response["mcoupon_amount"].toInt() + _origin_response["pcoupon_amount"].toInt();
QJsonArray pay_channels;
QJsonObject pay_ch;
pay_ch[FMP_EPAY_PAY_ID] = _origin_response["pay_ebcode"];
pay_ch[FMP_EPAY_PAY_DESC] = _origin_response["pay_id"];
pay_ch["code"] = _origin_response["code"];
pay_ch["pay_amount"] = _origin_response["total_amount"];
pay_ch["pay_account"] = _origin_response["pay_acount"];
pay_ch["platform_discount"] = _origin_response["mcoupon_amount"];
pay_ch["merchant_discount"] = _origin_response["pcoupon_amount"];
if (_origin_response.contains("ext")) {
pay_ch["ext"] = _origin_response["ext"];
}
pay_channels.append(pay_ch);
_docked_response[FMP_EPAY_PAY_IDS] = pay_channels;
}
else
{
_docked_response = QJsonDocument::fromJson(json).object();
}
_origin_response = QJsonObject();
json = QJsonDocument(_docked_response).toJson();
}
return json;
}
......@@ -450,6 +524,7 @@ void FMPePayPrivate::HttpPost(const QString &url, const QByteArray &data, QFutur
bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &error, int timeout)
{
qDebug() << "------------------1-----------------------";
Q_Q(FMPePay);
QEventLoop loop;
QTimer timer;
......@@ -465,6 +540,7 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
request.setSslConfiguration(config);
request.setRawHeader("Content-Type","text/json");
qDebug() << "------------------2-----------------------";
QNetworkReply* reply = manger.post(request, QJsonDocument(json).toJson());
......@@ -476,12 +552,15 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
loop.exec();
reply->deleteLater();
qDebug() << "------------------3-----------------------";
if(reply->error() != QNetworkReply::NoError)
{
qDebug() << "------------------41-----------------------";
error = QString::fromLocal8Bit("网络异常");
return false;
}
qDebug() << "------------------4-----------------------";
if(!CheckReturnJson(reply->readAll(), outjson))
{
......@@ -489,6 +568,7 @@ bool FMPePayPrivate::HttpPost(QJsonObject& outjson, QJsonObject json, QString &e
return false;
}
qDebug() << "------------------7-----------------------";
FMP_INFO() << outjson;
int statusCode = outjson[FMP_RPAY_PAY_RETURN_STATUSCODE].toInt();
......@@ -548,10 +628,12 @@ bool FMPePayPrivate::CheckReturnJson(QByteArray data, QJsonObject &returnjson)
QJsonParseError json_error;
QJsonDocument doc = QJsonDocument::fromJson( data, &json_error);
qDebug() << "------------------5-----------------------";
if(json_error.error != QJsonParseError::NoError || !doc.isObject())
{
return false;
}
qDebug() << "------------------6-----------------------";
returnjson = doc.object();
FMP_INFO() << "get return json : " << returnjson;
......@@ -565,6 +647,17 @@ void FMPePayPrivate::SetBasicInfo(QVariantHash hash)
_payDialog->setBasicInfo(hash);
}
#ifdef GuestDisplay
void FMPePayPrivate::SetAmoumt(int amount)
{
FMP_INFO() << "###------------------SetAmoumt amount : " << amount;
if(_payDialog != NULL)
_payDialog->setAmount(amount);
else
_amount = amount;
}
#endif
void FMPePayPrivate::GetCheckMode(QString sum)
{
QString sql = QString("fmId like '%%%1%%' or pay_transId like '%%%1%%'").arg(sum);
......@@ -690,6 +783,58 @@ void FMPePayPrivate::ControlRefundJson(const QJsonObject &trans)
});
}
void FMPePayPrivate::ControlQueryJson(const QJsonObject &trans)
{
QtConcurrent::run( [&, trans, this]()
{
Q_Q(FMPePay);
_origin_response = QJsonObject();
if(_reverse_flag) {
emit error(QString::fromLocal8Bit("网络连接异常(冲正...)"));
_origin_response["statusCode"] = 104;
_origin_response["msg"] = QString::fromLocal8Bit("网络连接异常");
_origin_response["prompt"] = 0;
emit apiError();
return ;
}
_docked_request = trans;
_docked_request[FMP_EPAY_VER] = 3;
_docked_request[FMP_EPAY_REQUESTTYPE] = 52;
_docked_request[FMP_EPAY_TRANSID] = _origin_request[FMP_EPAY_TRANSID].toString();
_docked_request[FMP_EPAY_FMID] = _origin_request[FMP_JKEY_FM_ORDER_ID].toString();
_docked_request[FMP_EPAY_REFUND_ID] = _origin_request[FMP_EPAY_REFUND_ID].toInt();
FMP_INFO() << "query json : " << _docked_request;
QString errors;
QJsonObject outjson;
if(!HttpPost(outjson, _docked_request ,errors, q->_time_out))
{
qDebug() << "------------------42-----------------------";
_origin_response = outjson;
emit error(errors);
emit apiError();
qDebug() << "------------------43-----------------------";
}
else
{
if (_is_api) {
_origin_response = outjson;
qDebug() << "_origin_response" << _origin_response;
}
// emit finished(outjson);
}
_api_evt.quit();
qDebug() << "------------------44-----------------------";
});
}
void FMPePayPrivate::ControlReverseJson()
{
_reverse_flag = true;
......@@ -800,6 +945,8 @@ bool FMPePayPrivate::GetRefundJson(const QJsonObject &trans)
_docked_request.insert( FMP_EPAY_REQUESTTYPE, 62);
_docked_request.insert( FMP_EPAY_PARTNERID, q->_partner_id.toInt());
_docked_request.insert( FMP_EPAY_CLIENTREQCOUNT, (int)((++s_ClientReqCount)%=10000000));
//添加refund_id字段
_docked_request.insert( FMP_EPAY_REFUND_ID, (int)QDateTime::currentDateTime().toTime_t());
if (_is_api) {
_docked_request[FMP_EPAY_STOREID] = _origin_request[FMP_EPAY_STOREID];
......
......@@ -31,6 +31,8 @@ public:
void ControlRefundJson(const QJsonObject &trans);
void ControlQueryJson(const QJsonObject &trans);
void GetCheckMode(QString sum);
void GetMode();
......@@ -46,6 +48,9 @@ public:
void DockQueryRequest(const QByteArray &json);
QByteArray DockQueryRespond();
#ifdef GuestDisplay
void SetAmoumt(int amount);
#endif
private:
void ControlReverseJson();
......@@ -85,6 +90,10 @@ public:
FMPSettingsInterface *_setting;
int auto_close_seconds; //支付成功后自动关闭窗口秒数
#ifdef GuestDisplay
void SetAmount(int amount);
#endif
private:
QJsonObject _origin_request;
QJsonObject _docked_request;
......@@ -95,6 +104,9 @@ private:
bool _api_abort;
bool _reverse_flag;
#ifdef GuestDisplay
int _amount;
#endif
static unsigned int s_ClientReqCount;
FMPDataBase *_db;
......
......@@ -41,6 +41,7 @@ FMPPayDialog::FMPPayDialog(FMPePayPrivate *control, QVariantHash basicinfo, QWid
_wait = NULL;
_success_flag = false;
_is_amt = false;
_amout_init = false;
this->setWindowFlags( windowFlags() | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
this->setWindowFlags(Qt::FramelessWindowHint);
......@@ -193,6 +194,11 @@ void FMPPayDialog::confirmRefund()
onBtnConfirmClicked();
}
void FMPPayDialog::setAmount(int amount)
{
ui->lineedit_num->setText(QString::number((amount)/100.0, 'f' , 2));
}
void FMPPayDialog::show()
{
......
......@@ -44,6 +44,8 @@ public:
void confirmRefund();
void setAmount(int amount);
public slots:
void showErrorMsg(QString errormsg);
......@@ -131,6 +133,7 @@ private:
QTimer *_wnd_close_timer;
int _seconds;
bool _isConfirmRefund;
bool _amout_init;
};
#endif // DIALOG_H
Plugin-SymbolicName: fmp.epay
Plugin-Version: 0.1.0
Plugin-Name: fmp.epay
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2018
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2019
Plugin-Vendor: Freemud
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 28
#define VER_BUILD 33
//! Convert version numbers to string
#define _STR(S) #S
......@@ -20,7 +20,7 @@
#define RES_STR_FILE_VER MAK_VER(VER_MAJOR, VER_MINOR, VER_REVISION, VER_BUILD)
#define RES_STR_PRODUCT_VER MAK_VER(VER_MAJOR, VER_MINOR, VER_REVISION, VER_BUILD)
#define RES_COMPANY_NAME "上海非码网络科技有限公司\0"
#define RES_COPYRIGHT "Freemud Ltd. Copyright (C) 2014-2018\0"
#define RES_COPYRIGHT "Freemud Ltd. Copyright (C) 2014-2019\0"
#define RES_FILE_DESC "fmp.epay\0"
#define RES_INTER_NAME "fmp.epay\0"
#define RES_FILE_NAME "fmp.epay\0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment