Commit 6c341fa9 by Carwyn

1. 会员服务端改用新接口;2. 解决出错后,提示窗点击确认后程序退出问题;3. 支持整单退款、单笔支付退款;4.窗口弹出后,不关闭,再选退出崩溃问题

parent f5e69428
...@@ -54,6 +54,7 @@ int FMNetwork::send(const QString &url, const QByteArray &reqData, QByteArray &r ...@@ -54,6 +54,7 @@ int FMNetwork::send(const QString &url, const QByteArray &reqData, QByteArray &r
rspData = reply->readAll(); rspData = reply->readAll();
} else { } else {
int err = reply->error(); int err = reply->error();
rspData = reply->readAll();
error = FM_API_NETWORERROR; error = FM_API_NETWORERROR;
errorMsg = netErrInfo(err); errorMsg = netErrInfo(err);
} }
......
...@@ -17,6 +17,8 @@ FMPVip::~FMPVip() ...@@ -17,6 +17,8 @@ FMPVip::~FMPVip()
{ {
StopService(); StopService();
FMPLoggerInterface::InitContext(nullptr, false);
if (d_ptr) { if (d_ptr) {
delete d_ptr; delete d_ptr;
d_ptr = nullptr; d_ptr = nullptr;
......
...@@ -62,8 +62,8 @@ void FMPVipServer::onReadyRead() ...@@ -62,8 +62,8 @@ void FMPVipServer::onReadyRead()
rspData; rspData;
Write(rspData); Write(rspData);
socket->waitForDisconnected(); socket->waitForBytesWritten();
socket->close();
socket->deleteLater(); socket->deleteLater();
socket = nullptr; socket = nullptr;
} }
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "fmp_vip_server.h" #include "fmp_vip_server.h"
#include "tasklogin.h" #include "tasklogin.h"
#include "taskpay.h" #include "taskpay.h"
#include "taskothers.h"
#include "taskfinal.h" #include "taskfinal.h"
#include <ctkPluginContext.h> #include <ctkPluginContext.h>
#undef StartService #undef StartService
...@@ -49,6 +50,7 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData) ...@@ -49,6 +50,7 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
rspData = taskPay.doTask(); rspData = taskPay.doTask();
break; break;
} }
case FM_QR_Pay: { case FM_QR_Pay: {
if (_ctx) { if (_ctx) {
ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>(); ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>();
...@@ -56,13 +58,22 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData) ...@@ -56,13 +58,22 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
epay->DockPayRequest(reqData); epay->DockPayRequest(reqData);
epay->StartService(); epay->StartService();
rspData = epay->DockPayRespond(); rspData = epay->DockPayRespond();
epay->StopService();
} }
else { else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8(); rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8();
} }
break; break;
} }
case FM_Order_Refund: {
TaskRefundOrder taskRefundOrder(jsonObj);
rspData = taskRefundOrder.doTask();
break;
}
case FM_Order_Revoke: {
TaskRefundPay taskRefundPay(jsonObj);
rspData = taskRefundPay.doTask();
break;
}
case FM_QR_Refund: { case FM_QR_Refund: {
if (_ctx) { if (_ctx) {
ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>(); ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>();
...@@ -70,7 +81,6 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData) ...@@ -70,7 +81,6 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
epay->DockRefundRequest(reqData); epay->DockRefundRequest(reqData);
epay->StartService(); epay->StartService();
rspData = epay->DockRefundRespond(); rspData = epay->DockRefundRespond();
epay->StopService();
} }
else { else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"退款服务不可用\"}").toUtf8(); rspData = QString::fromLocal8Bit("{\"msg:\":\"退款服务不可用\"}").toUtf8();
......
...@@ -5,9 +5,17 @@ ...@@ -5,9 +5,17 @@
#include <string> #include <string>
/**/ /**/
// 商家信息 // 商家信息
#define APP_ID "T012"
#define KEY_CODE "fbb36c88-999d-4836-a5ed-8e8855061ba6" //! 绿篮子
#define PARTNER_ID "6ac642f1-59f8-4e6f-a07a-bc8d581025d9" #define APP_ID "T013"
#define KEY_CODE "a35e33c8-e6f2-4107-8670-a69a85adf85b"
#define PARTNER_ID "f92b8997-40c7-4622-af3b-512fd49d6113"
////! 一茶一座
//#define APP_ID "T014"
//#define KEY_CODE "a440d553-87d3-4fcd-b59a-5ec9ce7c4157"
//#define PARTNER_ID "df2f90b0-eece-402c-820d-ba8ac56c4687"
// 请求类型的枚举值 // 请求类型的枚举值
enum FM_TYPE { enum FM_TYPE {
......
#include "fmtasknownd.h" #include "fmtasknownd.h"
#include "fmp_vip_settings.h" #include "fmp_vip_settings.h"
#include "fmnetwork.h"
#include <QJsonDocument> #include <QJsonDocument>
#include <QCryptographicHash>
//FMTaskNoWnd::FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session *session, QObject *parent) : FMTaskNoWnd::FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session *session, QObject *parent) :
// FMTask(jsonObj, fmType, session, parent) FMTask(jsonObj, fmType, session, parent)
//{ {
//} }
//QByteArray FMTaskNoWnd::doTask() QByteArray FMTaskNoWnd::doTask()
//{ {
// copyPros(); copyPros();
// bool isOk = sendToServer(); bool isOk = sendToServer();
// if(!isOk) { if(!isOk) {
// FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString());
// return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1(); return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1();
// } }
// packagePOSRsp(); packagePOSRsp();
// QJsonDocument json(posRspJsonObj); QJsonDocument json(posRspJsonObj);
// return json.toJson(QJsonDocument::Compact); return json.toJson(QJsonDocument::Compact);
//} }
QString FMTaskNoWnd::sign() const
{
FMP_DEBUG() << __FUNCTION__;
// 解析JSON插入MAP中按字典排序
QMap<QString, QString> mapData;
for(int i=0; i<sizeof(SignProps)/sizeof(SignProps[0]); ++i) {
QString word = SignProps[i];
if(serverReqJsonObj[word].isDouble()) {
mapData[word] = QString::number(serverReqJsonObj[word].toDouble());
} else {
mapData[word] = serverReqJsonObj[word].toString();
}
}
if (serverRspJsonObj[ServerProps(PosProps.Fm_cmd)].toInt() == FM_Fund) {
mapData[ServerProps(PosProps.TransId)] = serverReqJsonObj[ServerProps(PosProps.TransId)].toString();
}
// 使用URL键值对的格式拼接
QString sb = "";
foreach(QString key , mapData.keys())
{
sb += (key + "=" + mapData.value(key) + "&");
}
sb.remove(sb.length() - 1, 1); // 去掉最后一个&
sb.append(KEY_CODE);
QByteArray bt;
bt.append(sb);
FMP_INFO() << "Sign String: " << bt;
QByteArray md5Bt = QCryptographicHash::hash(bt, QCryptographicHash::Md5);
return md5Bt.toHex();
}
#ifndef FMTASKNOWND_H #ifndef FMTASKNOWND_H
#define FMTASKNOWND_H #define FMTASKNOWND_H
//#include "fmtask.h" #include "fmtask.h"
//class FMTaskNoWnd : public FMTask class FMTaskNoWnd : public FMTask
//{ {
// Q_OBJECT Q_OBJECT
//public: public:
// explicit FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session* session = 0, QObject *parent = 0); explicit FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session* session = 0, QObject *parent = 0);
// virtual QByteArray doTask(); virtual QByteArray doTask();
//protected: protected:
// virtual void packageServerReq() = 0; virtual void packageServerReq() = 0;
// virtual void packagePOSRsp() = 0; virtual void packagePOSRsp() = 0;
//};
QString sign() const;
};
#endif // FMTASKNOWND_H #endif // FMTASKNOWND_H
...@@ -60,15 +60,15 @@ void TaskCoupon::packageServerReq() ...@@ -60,15 +60,15 @@ void TaskCoupon::packageServerReq()
serverReqJsonObj["stationId"] = getPosJsonValue("pos_id"); serverReqJsonObj["stationId"] = getPosJsonValue("pos_id");
serverReqJsonObj["storeId"] = getPosJsonValue("store_id"); serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id"); serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id");
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
QJsonObject transaction; QJsonObject transData;
transaction["memberTransId"] = ""; transData["transId"] = getPosJsonValue("trans_id");
transaction["account"] = getPosJsonValue("fm_open_id"); transData["businessDate"] = getPosJsonValue("business_date");
transaction["isUseScore"] = 1; transData["memberTransId"] = getPosJsonValue("fm_id");
transaction["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt(); transData["account"] = getPosJsonValue("fm_open_id");
transData["isUseScore"] = 1;
transData["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt();
QJsonArray products; QJsonArray products;
QJsonArray clientArr = getPosJsonValue("products").toArray(); QJsonArray clientArr = getPosJsonValue("products").toArray();
for(int i = 0; i < clientArr.size(); i++) for(int i = 0; i < clientArr.size(); i++)
...@@ -79,8 +79,11 @@ void TaskCoupon::packageServerReq() ...@@ -79,8 +79,11 @@ void TaskCoupon::packageServerReq()
product["productId"] = clientArr[i].toObject()["pid"]; product["productId"] = clientArr[i].toObject()["pid"];
products.append(product); products.append(product);
} }
transaction["products"] = products; transData["productList"] = products;
serverReqJsonObj["transaction"] = transaction; serverReqJsonObj["data"] = transData;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
} }
bool TaskCoupon::sendToServer(bool isShowMsg) bool TaskCoupon::sendToServer(bool isShowMsg)
...@@ -91,25 +94,26 @@ bool TaskCoupon::sendToServer(bool isShowMsg) ...@@ -91,25 +94,26 @@ bool TaskCoupon::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign()); url = FMPVipSettings::instance()->getServerUrl() + "/coupon";
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
net.send(url, data, rspData); net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误 // 网络错误
if(net.error != FM_API_SUCCESS) { if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg); setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else { } else {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON); setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else { } else {
serverRspJsonObj = rspJson.object(); serverRspJsonObj = rspJson.object();
// 服务器返回的错误 // 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) { if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString()); setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
......
...@@ -25,6 +25,7 @@ protected: ...@@ -25,6 +25,7 @@ protected:
bool sendToServer(bool isShowMsg = true); bool sendToServer(bool isShowMsg = true);
void packagePOSRsp(); void packagePOSRsp();
protected: protected:
QJsonObject posReqJsonObj; QJsonObject posReqJsonObj;
QJsonObject posRspJsonObj; QJsonObject posRspJsonObj;
...@@ -63,4 +64,4 @@ private: ...@@ -63,4 +64,4 @@ private:
QString _errorMsg; QString _errorMsg;
}; };
#endif // TASKCOUPON_H #endif // TASKCOUPON_H
\ No newline at end of file
...@@ -35,13 +35,14 @@ void TaskFinal::packageServerReq() ...@@ -35,13 +35,14 @@ void TaskFinal::packageServerReq()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id"); serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id"); serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id"); QJsonObject transData;
serverReqJsonObj["memberTransId"] = ""; transData["businessDate"] = getPosJsonValue("business_date");
QJsonObject transaction; transData["transId"] = getPosJsonValue("trans_id");
transaction["account"] = getPosJsonValue("fm_open_id"); transData["memberTransId"] = getPosJsonValue("fm_id");
transaction["totalAmount"] = getPosJsonValue("order_amount"); transData["account"] = getPosJsonValue("fm_open_id");
transaction["payAmount"] = getPosJsonValue("paid_amount"); transData["totalAmount"] = getPosJsonValue("order_amount");
transData["payAmount"] = getPosJsonValue("paid_amount");
// 产品列表 // 产品列表
QJsonArray products; QJsonArray products;
...@@ -54,7 +55,7 @@ void TaskFinal::packageServerReq() ...@@ -54,7 +55,7 @@ void TaskFinal::packageServerReq()
products.append(product); products.append(product);
} }
transaction["products"] = products; transData["productList"] = products;
QJsonArray payList; QJsonArray payList;
foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray()) foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray())
...@@ -63,33 +64,33 @@ void TaskFinal::packageServerReq() ...@@ -63,33 +64,33 @@ void TaskFinal::packageServerReq()
pay["amount"] = p.toObject()["pay_amount"]; pay["amount"] = p.toObject()["pay_amount"];
pay["thirdPayTransId"] = ""; pay["thirdPayTransId"] = "";
pay["code"] = p.toObject()["code"].toString(); pay["code"] = p.toObject()["code"].toString();
pay["transId"] = getPosJsonValue("trans_id"); pay["transId"] = p.toObject()["trans_id"];
pay["payTransId"] = p.toObject()["pay_transId"].toString(); pay["payTransId"] = p.toObject()["pay_transId"].toString();
QString typeModeFlag = p.toObject()["pay_id"].toString(); QString typeModeFlag = p.toObject()["pay_id"].toString();
if(typeModeFlag == "0") if(typeModeFlag == "0")
{ {
//现金支付 //现金支付
pay["typeModeFlag"] = 20005; pay["typeModeFlag"] = "20005";
} }
else if(typeModeFlag == "7") else if(typeModeFlag == "7")
{ {
//支付宝钱包 //支付宝钱包
pay["typeModeFlag"] = 10001; //??? pay["typeModeFlag"] = "10001"; //???
} }
else if(typeModeFlag == "9") else if(typeModeFlag == "9")
{ {
//微信钱包 //微信钱包
pay["typeModeFlag"] = 10004; //??? pay["typeModeFlag"] = "10004"; //???
} }
else else
{ {
pay["typeModeFlag"] = typeModeFlag.toInt(); pay["typeModeFlag"] = typeModeFlag;
} }
payList.append(pay); payList.append(pay);
} }
transaction["payList"] = payList; transData["payList"] = payList;
serverReqJsonObj["transaction"] = transaction; serverReqJsonObj["data"] = transData;
int finalType = getPosJsonValue("settlement_type").toInt(); int finalType = getPosJsonValue("settlement_type").toInt();
if(finalType == 0) //支付结算 if(finalType == 0) //支付结算
...@@ -100,6 +101,9 @@ void TaskFinal::packageServerReq() ...@@ -100,6 +101,9 @@ void TaskFinal::packageServerReq()
{ {
serverReqJsonObj["reqType"] = 1010; serverReqJsonObj["reqType"] = 1010;
} }
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
} }
bool TaskFinal::sendToServer(bool isShowMsg) bool TaskFinal::sendToServer(bool isShowMsg)
...@@ -110,28 +114,34 @@ bool TaskFinal::sendToServer(bool isShowMsg) ...@@ -110,28 +114,34 @@ bool TaskFinal::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign()); url = FMPVipSettings::instance()->getServerUrl() + "/order";
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
net.send(url, data, rspData); net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误 // 网络错误
if(net.error != FM_API_SUCCESS) { if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg); setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else { } else {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON); setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else { } else {
serverRspJsonObj = rspJson.object(); serverRspJsonObj = rspJson.object();
// 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
}
} }
} }
FMP_INFO() << "Server rsponse: " << serverRspJsonObj; FMP_INFO() << "Server rsponse: " << serverRspJsonObj;
// 备份 // 备份
if(error() == FM_API_NETWORERROR) { if(error() == FM_API_NETWORERROR) {
......
...@@ -99,8 +99,11 @@ void TaskLogin::packageServerReq() ...@@ -99,8 +99,11 @@ void TaskLogin::packageServerReq()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id"); serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id"); serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["code"] = session()->data("code").toString(); QJsonObject code;
code["code"] = session()->data("code").toString();
serverReqJsonObj["data"] = code;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch()); serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
} }
bool TaskLogin::sendToServer(bool isShowMsg) bool TaskLogin::sendToServer(bool isShowMsg)
...@@ -111,29 +114,36 @@ bool TaskLogin::sendToServer(bool isShowMsg) ...@@ -111,29 +114,36 @@ bool TaskLogin::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign()); url = FMPVipSettings::instance()->getServerUrl() + "/auth";
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
net.send(url, data, rspData); net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误 // 网络错误
if(net.error != FM_API_SUCCESS) { if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg); setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else { } else {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON); setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else { } else {
serverRspJsonObj = rspJson.object(); serverRspJsonObj = rspJson.object();
// 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
}
} }
} }
FMP_INFO() << "Server rsponse: " << serverRspJsonObj; FMP_INFO() << "Server rsponse: " << serverRspJsonObj;
if(_window != nullptr) { if(_window != nullptr) {
_window->setIsBusy(false); _window->setIsBusy(false);
} }
...@@ -231,4 +241,4 @@ QString TaskLogin::sign() const ...@@ -231,4 +241,4 @@ QString TaskLogin::sign() const
QByteArray md5Bt = QCryptographicHash::hash(bt, QCryptographicHash::Md5); QByteArray md5Bt = QCryptographicHash::hash(bt, QCryptographicHash::Md5);
return md5Bt.toHex(); return md5Bt.toHex();
} }
\ No newline at end of file
#include "taskothers.h" #include "taskothers.h"
#include "fmp_vip_settings.h"
#include "fmnetwork.h"
#include <QJsonDocument>
#include <QDateTime>
#include <fmp_logger_i.h>
//TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent) TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent)
// :FMTaskNoWnd(jsonObj, FM_Order_Revoke, 0, parent) :FMTaskNoWnd(jsonObj, FM_Order_Revoke, 0, parent)
//{ {
//} }
//void TaskRefundPay::packageServerReq() void TaskRefundPay::packageServerReq()
//{ {
// serverReqJsonObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId); // 固定部分
//} serverReqJsonObj[PosProps.AppId] = APP_ID;
serverReqJsonObj[PosProps.PartnerId] = PARTNER_ID;
//void TaskRefundPay::packagePOSRsp() serverReqJsonObj[ServerProps(PosProps.Fm_cmd)] = FM_Type();
//{
// std::vector<QString> p; QJsonArray transIds;
// p.push_back(PosProps.StatusCode); transIds.append(getPosJsonValue(PosProps.TransId));
// p.push_back(PosProps.Msg); QJsonObject transData;
// foreach(auto prop , p) { transData["transIds"] = transIds;
// posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
// } serverReqJsonObj["data"] = transData;
// posRspJsonObj[PosProps.Prompt] = 1;
//} serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
//TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent)
// :FMTaskNoWnd(jsonObj, FM_Order_Refund, 0, parent) void TaskRefundPay::packagePOSRsp()
//{ {
std::vector<QString> p;
//} p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
//void TaskRefundOrder::packageServerReq() foreach(auto prop , p) {
//{ posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
// QJsonObject trans; }
// trans[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id); posRspJsonObj[PosProps.Prompt] = 1;
// serverReqJsonObj[ServerProps(PosProps.Transaction)] = trans; }
//}
bool TaskRefundPay::sendToServer(bool isShowMsg)
//void TaskRefundOrder::packagePOSRsp() {
//{ FMP_DEBUG() << __FUNCTION__;
// std::vector<QString> p; packageServerReq();
// p.push_back(PosProps.StatusCode);
// p.push_back(PosProps.Msg); QJsonDocument json(serverReqJsonObj);
// foreach(auto prop , p) { QByteArray data = json.toJson(QJsonDocument::Compact);
// posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
// } url = FMPVipSettings::instance()->getServerUrl() + "/refund";
// posRspJsonObj[PosProps.Prompt] = 1; QByteArray rspData;
//}
FMNetwork net;
net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误
if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else {
// Json错误
if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else {
serverRspJsonObj = rspJson.object();
// 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
}
}
}
FMP_INFO() << "Server rsponse: " << serverRspJsonObj;
if(_window != nullptr) {
_window->setIsBusy(false);
}
bool isOk = (error() == FM_API_SUCCESS);
if(!isOk && isShowMsg)
{
FMMsgWnd::FailureWnd(errorString(), _window);
}
return isOk;
}
TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent)
:FMTaskNoWnd(jsonObj, FM_Order_Refund, 0, parent)
{
}
void TaskRefundOrder::packageServerReq()
{
serverReqJsonObj[PosProps.AppId] = APP_ID;
serverReqJsonObj[PosProps.PartnerId] = PARTNER_ID;
serverReqJsonObj[ServerProps(PosProps.Fm_cmd)] = FM_Type();
QJsonObject transData;
transData["memberTransId"] = getPosJsonValue(PosProps.Fm_id);
serverReqJsonObj["data"] = transData;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
void TaskRefundOrder::packagePOSRsp()
{
std::vector<QString> p;
p.push_back(PosProps.StatusCode);
p.push_back(PosProps.Msg);
foreach(auto prop , p) {
posRspJsonObj[prop] = getServerJsonValue(ServerProps(prop));
}
posRspJsonObj[PosProps.Prompt] = 1;
}
bool TaskRefundOrder::sendToServer(bool isShowMsg)
{
FMP_DEBUG() << __FUNCTION__;
packageServerReq();
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = FMPVipSettings::instance()->getServerUrl() + "/correct";
QByteArray rspData;
FMNetwork net;
net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误
if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else {
// Json错误
if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else {
serverRspJsonObj = rspJson.object();
// 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
}
}
}
FMP_INFO() << "Server rsponse: " << serverRspJsonObj;
if(_window != nullptr) {
_window->setIsBusy(false);
}
bool isOk = (error() == FM_API_SUCCESS);
if(!isOk && isShowMsg)
{
FMMsgWnd::FailureWnd(errorString(), _window);
}
return isOk;
}
...@@ -4,22 +4,25 @@ ...@@ -4,22 +4,25 @@
#include "fmtasknownd.h" #include "fmtasknownd.h"
// 支付退款 // 支付退款
//class TaskRefundPay : public FMTaskNoWnd class TaskRefundPay : public FMTaskNoWnd
//{ {
// Q_OBJECT Q_OBJECT
//public: public:
// explicit TaskRefundPay(QJsonObject &jsonObj, QObject *parent = 0); explicit TaskRefundPay(QJsonObject &jsonObj, QObject *parent = 0);
// void packageServerReq(); void packageServerReq();
// void packagePOSRsp(); void packagePOSRsp();
//}; bool sendToServer(bool isShowMsg);
};
// 整单退款 // 整单退款
//class TaskRefundOrder : public FMTaskNoWnd class TaskRefundOrder : public FMTaskNoWnd
//{ {
// Q_OBJECT Q_OBJECT
//public: public:
// explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0); explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0);
// void packageServerReq(); void packageServerReq();
// void packagePOSRsp(); void packagePOSRsp();
//}; bool sendToServer(bool isShowMsg);
};
#endif // TASKOTHERS_H #endif // TASKOTHERS_H
...@@ -35,15 +35,15 @@ QByteArray TaskPay::doTask() ...@@ -35,15 +35,15 @@ QByteArray TaskPay::doTask()
{ {
FMP_DEBUG() << __FUNCTION__; FMP_DEBUG() << __FUNCTION__;
//获取可用的代金券 //获取可用的代金券
TaskCoupon taskCoupon(posReqJsonObj, _session); // TaskCoupon taskCoupon(posReqJsonObj, _session);
QByteArray ret = taskCoupon.doTask(); // QByteArray ret = taskCoupon.doTask();
if(taskCoupon.error() != FM_API_SUCCESS) // if(taskCoupon.error() != FM_API_SUCCESS)
{ // {
return ret; // return ret;
} // }
//查询余额和积分 //查询余额和积分
ret = queryMemberInfo(); QByteArray ret = queryMemberInfo();
if(error() != FM_API_SUCCESS) if(error() != FM_API_SUCCESS)
{ {
return ret; return ret;
...@@ -81,31 +81,35 @@ QByteArray TaskPay::queryMemberInfo() ...@@ -81,31 +81,35 @@ QByteArray TaskPay::queryMemberInfo()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id"); serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id"); serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["code"] = getPosJsonValue("fm_open_id"); QJsonObject code;
code["code"] = getPosJsonValue("fm_open_id");
serverReqJsonObj["data"] = code;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch()); serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign()); url = FMPVipSettings::instance()->getServerUrl() + "/auth";
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
net.send(url, data, rspData); net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误 // 网络错误
if(net.error != FM_API_SUCCESS) { if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg); setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else { } else {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON); setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else { } else {
serverRspJsonObj = rspJson.object(); serverRspJsonObj = rspJson.object();
// 服务器返回的错误 // 服务器返回的错误
if(serverRspJsonObj.contains("errcode")) { if(serverRspJsonObj.contains("errcode")) {
setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString()); setError(FM_API_SERVERERROR, serverRspJsonObj["errcode"].toInt(), serverRspJsonObj["errmsg"].toString());
...@@ -153,15 +157,18 @@ void TaskPay::packageServerReq() ...@@ -153,15 +157,18 @@ void TaskPay::packageServerReq()
serverReqJsonObj["stationId"] = getPosJsonValue("pos_id"); serverReqJsonObj["stationId"] = getPosJsonValue("pos_id");
serverReqJsonObj["storeId"] = getPosJsonValue("store_id"); serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id"); serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id");
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["partnerId"] = PARTNER_ID; serverReqJsonObj["partnerId"] = PARTNER_ID;
QJsonObject transaction;
transaction["memberTransId"] = ""; //! 会员新接口使用 data 打包业务数据
transaction["account"] = getPosJsonValue("fm_open_id"); QJsonObject transData;
transaction["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt(); transData["transId"] = getPosJsonValue("trans_id");
transaction["isUseScore"] = session()->data("isUseScore").toInt(); transData["businessDate"] = getPosJsonValue("business_date");
transData["memberTransId"] = getPosJsonValue("fm_id");
transData["account"] = getPosJsonValue("fm_open_id");
transData["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt();
transData["isUseScore"] = session()->data("isUseScore").toInt();
QJsonArray products; QJsonArray products;
QJsonArray clientArray = getPosJsonValue("products").toArray(); QJsonArray clientArray = getPosJsonValue("products").toArray();
...@@ -185,7 +192,7 @@ void TaskPay::packageServerReq() ...@@ -185,7 +192,7 @@ void TaskPay::packageServerReq()
payList.push_back(balance); payList.push_back(balance);
//积分支付详情 //积分支付详情
if(transaction["isUseScore"].toInt()) if(transData["isUseScore"].toInt())
{ {
QJsonObject score; QJsonObject score;
score["amount"] = session()->data("score").toInt(); score["amount"] = session()->data("score").toInt();
...@@ -207,10 +214,13 @@ void TaskPay::packageServerReq() ...@@ -207,10 +214,13 @@ void TaskPay::packageServerReq()
payList.push_back(coupon); payList.push_back(coupon);
} }
transaction["products"] = products; transData["productList"] = products;
transaction["payList"] = payList; transData["payList"] = payList;
serverReqJsonObj["data"] = transData;
serverReqJsonObj[PosProps.Transaction] = transaction; serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
} }
bool TaskPay::sendToServer(bool isShowMsg) bool TaskPay::sendToServer(bool isShowMsg)
...@@ -221,22 +231,24 @@ bool TaskPay::sendToServer(bool isShowMsg) ...@@ -221,22 +231,24 @@ bool TaskPay::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj); QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact); QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign()); url = FMPVipSettings::instance()->getServerUrl() + "/pay";
QByteArray rspData; QByteArray rspData;
FMNetwork net; FMNetwork net;
net.send(url, data, rspData); net.send(url, data, rspData);
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 网络错误 // 网络错误
if(net.error != FM_API_SUCCESS) { if(net.error != FM_API_SUCCESS) {
setError(net.error, net.errorMsg); setError(net.error, net.errorMsg);
serverRspJsonObj = rspJson.object();
} else { } else {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误 // Json错误
if(jsonErr.error != QJsonParseError::NoError) { if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON); setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else { } else {
serverRspJsonObj = rspJson.object(); serverRspJsonObj = rspJson.object();
} }
...@@ -265,16 +277,16 @@ void TaskPay::packagePOSRsp() ...@@ -265,16 +277,16 @@ void TaskPay::packagePOSRsp()
posRspJsonObj[PosProps.Prompt] = 0; posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1; posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = getServerJsonValue("account").toString(); posRspJsonObj[PosProps.Fm_open_id] = getServerJsonValue("account").toString();
posRspJsonObj[PosProps.Fm_transId] = getServerJsonValue("memberTransId").toString(); posRspJsonObj[PosProps.Fm_id] = getServerJsonValue("memberTransId").toString();
QJsonArray servPayArray = getServerJsonValue("payList").toArray(); QJsonArray servPayArray = getServerJsonValue("payList").toArray();
//支付方式描述 //支付方式描述
QMap<QString, QString> description; QMap<QString, QString> description;
description["20001"] = "会员储值金支付"; description["20001"] = QString::fromLocal8Bit("会员储值金支付");
description["20002"] = "会员积分支付"; description["20002"] = QString::fromLocal8Bit("会员积分支付");
description["20003"] = "代金券支付"; description["20003"] = QString::fromLocal8Bit("代金券支付");
description["20004"] = "商品券支付"; description["20004"] = QString::fromLocal8Bit("商品券支付");
description["20005"] = "现金支付"; description["20005"] = QString::fromLocal8Bit("现金支付");
//计算总支付额 //计算总支付额
QJsonArray pay_ids; QJsonArray pay_ids;
...@@ -282,8 +294,8 @@ void TaskPay::packagePOSRsp() ...@@ -282,8 +294,8 @@ void TaskPay::packagePOSRsp()
for(int i = 0; i < servPayArray.size(); i++) for(int i = 0; i < servPayArray.size(); i++)
{ {
QJsonObject pay_id; QJsonObject pay_id;
pay_id["pay_id"] = QString::number(servPayArray[i].toObject()["typeModeFlag"].toInt()); pay_id["pay_id"] = servPayArray[i].toObject()["typeModeFlag"].toString();
pay_id["pay_str"] = description[QString::number(servPayArray[i].toObject()["typeModeFlag"].toInt())]; pay_id["pay_str"] = description[servPayArray[i].toObject()["typeModeFlag"].toString()];
pay_id["pay_amount"] = servPayArray[i].toObject()["amount"].toInt(); pay_id["pay_amount"] = servPayArray[i].toObject()["amount"].toInt();
pay_id["code"] = servPayArray[i].toObject()["code"].toString(); pay_id["code"] = servPayArray[i].toObject()["code"].toString();
pay_ids.push_back(pay_id); pay_ids.push_back(pay_id);
......
...@@ -8,6 +8,7 @@ FMMsgWnd::FMMsgWnd(QDialog *parent) : ...@@ -8,6 +8,7 @@ FMMsgWnd::FMMsgWnd(QDialog *parent) :
{ {
ui->setupUi(this); ui->setupUi(this);
setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_QuitOnClose, false);
this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
} }
......
...@@ -173,8 +173,6 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text) ...@@ -173,8 +173,6 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
double num = text.toDouble(); double num = text.toDouble();
double maxPay = orderInfo->getMaxWillPay(); double maxPay = orderInfo->getMaxWillPay();
if (num > maxPay) { if (num > maxPay) {
ui->pay_edit->setText(DOUBLE_STR(maxPay));
QString maxPay_info = QString::fromLocal8Bit("余额只需支付 %1 元"); QString maxPay_info = QString::fromLocal8Bit("余额只需支付 %1 元");
if (maxPay >= orderInfo->getAmountStr().toDouble()) { if (maxPay >= orderInfo->getAmountStr().toDouble()) {
maxPay_info = QString::fromLocal8Bit("余额最多支付 %1 元"); maxPay_info = QString::fromLocal8Bit("余额最多支付 %1 元");
...@@ -187,4 +185,5 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text) ...@@ -187,4 +185,5 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
oldPayText = text; oldPayText = text;
ui->pay_max->setText(""); ui->pay_max->setText("");
} }
ui->pay_edit->setText(DOUBLE_STR(maxPay));
} }
...@@ -163,8 +163,8 @@ ...@@ -163,8 +163,8 @@
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>80</width> <width>60</width>
<height>16777215</height> <height>60</height>
</size> </size>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
......
...@@ -204,11 +204,11 @@ ...@@ -204,11 +204,11 @@
} }
#pay_chk::indicator:unchecked { #pay_chk::indicator:unchecked {
image: url(:/chk_unchecked.png); image: url(:/img/chk_unchecked.png);
} }
#pay_chk::indicator:checked { #pay_chk::indicator:checked {
image: url(:/chk_checked.png); image: url(:/img/chk_checked.png);
} }
#pay_btn { #pay_btn {
...@@ -282,7 +282,7 @@ ...@@ -282,7 +282,7 @@
#coupon_separator #coupon_separator
{ {
max-height: 1px; max-height: 1px;
border-image: url(:/coupon_separator.png); border-image: url(:/img/coupon_separator.png);
margin: 0 6 10 6; margin: 0 6 10 6;
}</string> }</string>
</property> </property>
......
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