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
rspData = reply->readAll();
} else {
int err = reply->error();
rspData = reply->readAll();
error = FM_API_NETWORERROR;
errorMsg = netErrInfo(err);
}
......
......@@ -17,6 +17,8 @@ FMPVip::~FMPVip()
{
StopService();
FMPLoggerInterface::InitContext(nullptr, false);
if (d_ptr) {
delete d_ptr;
d_ptr = nullptr;
......
......@@ -62,8 +62,8 @@ void FMPVipServer::onReadyRead()
rspData;
Write(rspData);
socket->waitForDisconnected();
socket->waitForBytesWritten();
socket->close();
socket->deleteLater();
socket = nullptr;
}
......@@ -10,6 +10,7 @@
#include "fmp_vip_server.h"
#include "tasklogin.h"
#include "taskpay.h"
#include "taskothers.h"
#include "taskfinal.h"
#include <ctkPluginContext.h>
#undef StartService
......@@ -49,6 +50,7 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
rspData = taskPay.doTask();
break;
}
case FM_QR_Pay: {
if (_ctx) {
ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>();
......@@ -56,13 +58,22 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
epay->DockPayRequest(reqData);
epay->StartService();
rspData = epay->DockPayRespond();
epay->StopService();
}
else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8();
}
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: {
if (_ctx) {
ctkServiceReference ref =_ctx->getServiceReference<FMPePayInterface>();
......@@ -70,7 +81,6 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
epay->DockRefundRequest(reqData);
epay->StartService();
rspData = epay->DockRefundRespond();
epay->StopService();
}
else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"退款服务不可用\"}").toUtf8();
......
......@@ -5,9 +5,17 @@
#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 {
......
#include "fmtasknownd.h"
#include "fmp_vip_settings.h"
#include "fmnetwork.h"
#include <QJsonDocument>
#include <QCryptographicHash>
//FMTaskNoWnd::FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session *session, QObject *parent) :
// FMTask(jsonObj, fmType, session, parent)
//{
//}
//QByteArray FMTaskNoWnd::doTask()
//{
// copyPros();
// bool isOk = sendToServer();
// if(!isOk) {
// FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString());
// return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1();
// }
// packagePOSRsp();
// QJsonDocument json(posRspJsonObj);
// return json.toJson(QJsonDocument::Compact);
//}
FMTaskNoWnd::FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session *session, QObject *parent) :
FMTask(jsonObj, fmType, session, parent)
{
}
QByteArray FMTaskNoWnd::doTask()
{
copyPros();
bool isOk = sendToServer();
if(!isOk) {
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString());
return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1();
}
packagePOSRsp();
QJsonDocument json(posRspJsonObj);
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
#define FMTASKNOWND_H
//#include "fmtask.h"
#include "fmtask.h"
//class FMTaskNoWnd : public FMTask
//{
// Q_OBJECT
//public:
// explicit FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session* session = 0, QObject *parent = 0);
class FMTaskNoWnd : public FMTask
{
Q_OBJECT
public:
explicit FMTaskNoWnd(QJsonObject &jsonObj, FM_TYPE fmType, Session* session = 0, QObject *parent = 0);
// virtual QByteArray doTask();
//protected:
// virtual void packageServerReq() = 0;
// virtual void packagePOSRsp() = 0;
//};
virtual QByteArray doTask();
protected:
virtual void packageServerReq() = 0;
virtual void packagePOSRsp() = 0;
QString sign() const;
};
#endif // FMTASKNOWND_H
......@@ -60,15 +60,15 @@ void TaskCoupon::packageServerReq()
serverReqJsonObj["stationId"] = getPosJsonValue("pos_id");
serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id");
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
QJsonObject transaction;
transaction["memberTransId"] = "";
transaction["account"] = getPosJsonValue("fm_open_id");
transaction["isUseScore"] = 1;
transaction["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt();
QJsonObject transData;
transData["transId"] = getPosJsonValue("trans_id");
transData["businessDate"] = getPosJsonValue("business_date");
transData["memberTransId"] = getPosJsonValue("fm_id");
transData["account"] = getPosJsonValue("fm_open_id");
transData["isUseScore"] = 1;
transData["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt();
QJsonArray products;
QJsonArray clientArr = getPosJsonValue("products").toArray();
for(int i = 0; i < clientArr.size(); i++)
......@@ -79,8 +79,11 @@ void TaskCoupon::packageServerReq()
product["productId"] = clientArr[i].toObject()["pid"];
products.append(product);
}
transaction["products"] = products;
serverReqJsonObj["transaction"] = transaction;
transData["productList"] = products;
serverReqJsonObj["data"] = transData;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
bool TaskCoupon::sendToServer(bool isShowMsg)
......@@ -91,25 +94,26 @@ bool TaskCoupon::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign());
url = FMPVipSettings::instance()->getServerUrl() + "/coupon";
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 {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 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());
......
......@@ -25,6 +25,7 @@ protected:
bool sendToServer(bool isShowMsg = true);
void packagePOSRsp();
protected:
QJsonObject posReqJsonObj;
QJsonObject posRspJsonObj;
......@@ -63,4 +64,4 @@ private:
QString _errorMsg;
};
#endif // TASKCOUPON_H
\ No newline at end of file
#endif // TASKCOUPON_H
......@@ -35,13 +35,14 @@ void TaskFinal::packageServerReq()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["partnerId"] = PARTNER_ID;
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id");
serverReqJsonObj["memberTransId"] = "";
QJsonObject transaction;
transaction["account"] = getPosJsonValue("fm_open_id");
transaction["totalAmount"] = getPosJsonValue("order_amount");
transaction["payAmount"] = getPosJsonValue("paid_amount");
QJsonObject transData;
transData["businessDate"] = getPosJsonValue("business_date");
transData["transId"] = getPosJsonValue("trans_id");
transData["memberTransId"] = getPosJsonValue("fm_id");
transData["account"] = getPosJsonValue("fm_open_id");
transData["totalAmount"] = getPosJsonValue("order_amount");
transData["payAmount"] = getPosJsonValue("paid_amount");
// 产品列表
QJsonArray products;
......@@ -54,7 +55,7 @@ void TaskFinal::packageServerReq()
products.append(product);
}
transaction["products"] = products;
transData["productList"] = products;
QJsonArray payList;
foreach(auto p, getPosJsonValue(PosProps.Pay_ids).toArray())
......@@ -63,33 +64,33 @@ void TaskFinal::packageServerReq()
pay["amount"] = p.toObject()["pay_amount"];
pay["thirdPayTransId"] = "";
pay["code"] = p.toObject()["code"].toString();
pay["transId"] = getPosJsonValue("trans_id");
pay["transId"] = p.toObject()["trans_id"];
pay["payTransId"] = p.toObject()["pay_transId"].toString();
QString typeModeFlag = p.toObject()["pay_id"].toString();
if(typeModeFlag == "0")
{
//现金支付
pay["typeModeFlag"] = 20005;
pay["typeModeFlag"] = "20005";
}
else if(typeModeFlag == "7")
{
//支付宝钱包
pay["typeModeFlag"] = 10001; //???
pay["typeModeFlag"] = "10001"; //???
}
else if(typeModeFlag == "9")
{
//微信钱包
pay["typeModeFlag"] = 10004; //???
pay["typeModeFlag"] = "10004"; //???
}
else
{
pay["typeModeFlag"] = typeModeFlag.toInt();
pay["typeModeFlag"] = typeModeFlag;
}
payList.append(pay);
}
transaction["payList"] = payList;
serverReqJsonObj["transaction"] = transaction;
transData["payList"] = payList;
serverReqJsonObj["data"] = transData;
int finalType = getPosJsonValue("settlement_type").toInt();
if(finalType == 0) //支付结算
......@@ -100,6 +101,9 @@ void TaskFinal::packageServerReq()
{
serverReqJsonObj["reqType"] = 1010;
}
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
bool TaskFinal::sendToServer(bool isShowMsg)
......@@ -110,28 +114,34 @@ bool TaskFinal::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign());
url = FMPVipSettings::instance()->getServerUrl() + "/order";
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 {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 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;
FMP_INFO() << "Server rsponse: " << serverRspJsonObj;
// 备份
if(error() == FM_API_NETWORERROR) {
......
......@@ -99,8 +99,11 @@ void TaskLogin::packageServerReq()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_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["sign"] = sign();
}
bool TaskLogin::sendToServer(bool isShowMsg)
......@@ -111,29 +114,36 @@ bool TaskLogin::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign());
url = FMPVipSettings::instance()->getServerUrl() + "/auth";
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 {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 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);
}
......@@ -231,4 +241,4 @@ QString TaskLogin::sign() const
QByteArray md5Bt = QCryptographicHash::hash(bt, QCryptographicHash::Md5);
return md5Bt.toHex();
}
\ No newline at end of file
}
#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)
// :FMTaskNoWnd(jsonObj, FM_Order_Revoke, 0, parent)
//{
//}
//void TaskRefundPay::packageServerReq()
//{
// serverReqJsonObj[ServerProps(PosProps.TransId)] = getPosJsonValue(PosProps.TransId);
//}
//void TaskRefundPay::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;
//}
//TaskRefundOrder::TaskRefundOrder(QJsonObject &jsonObj, QObject *parent)
// :FMTaskNoWnd(jsonObj, FM_Order_Refund, 0, parent)
//{
//}
//void TaskRefundOrder::packageServerReq()
//{
// QJsonObject trans;
// trans[ServerProps(PosProps.Fm_id)] = getPosJsonValue(PosProps.Fm_id);
// serverReqJsonObj[ServerProps(PosProps.Transaction)] = trans;
//}
//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;
//}
TaskRefundPay::TaskRefundPay(QJsonObject &jsonObj, QObject *parent)
:FMTaskNoWnd(jsonObj, FM_Order_Revoke, 0, parent)
{
}
void TaskRefundPay::packageServerReq()
{
// 固定部分
serverReqJsonObj[PosProps.AppId] = APP_ID;
serverReqJsonObj[PosProps.PartnerId] = PARTNER_ID;
serverReqJsonObj[ServerProps(PosProps.Fm_cmd)] = FM_Type();
QJsonArray transIds;
transIds.append(getPosJsonValue(PosProps.TransId));
QJsonObject transData;
transData["transIds"] = transIds;
serverReqJsonObj["data"] = transData;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
void TaskRefundPay::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 TaskRefundPay::sendToServer(bool isShowMsg)
{
FMP_DEBUG() << __FUNCTION__;
packageServerReq();
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = FMPVipSettings::instance()->getServerUrl() + "/refund";
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 @@
#include "fmtasknownd.h"
// 支付退款
//class TaskRefundPay : public FMTaskNoWnd
//{
// Q_OBJECT
//public:
// explicit TaskRefundPay(QJsonObject &jsonObj, QObject *parent = 0);
// void packageServerReq();
// void packagePOSRsp();
//};
class TaskRefundPay : public FMTaskNoWnd
{
Q_OBJECT
public:
explicit TaskRefundPay(QJsonObject &jsonObj, QObject *parent = 0);
void packageServerReq();
void packagePOSRsp();
bool sendToServer(bool isShowMsg);
};
// 整单退款
//class TaskRefundOrder : public FMTaskNoWnd
//{
// Q_OBJECT
//public:
// explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0);
// void packageServerReq();
// void packagePOSRsp();
//};
class TaskRefundOrder : public FMTaskNoWnd
{
Q_OBJECT
public:
explicit TaskRefundOrder(QJsonObject &jsonObj, QObject *parent = 0);
void packageServerReq();
void packagePOSRsp();
bool sendToServer(bool isShowMsg);
};
#endif // TASKOTHERS_H
......@@ -35,15 +35,15 @@ QByteArray TaskPay::doTask()
{
FMP_DEBUG() << __FUNCTION__;
//获取可用的代金券
TaskCoupon taskCoupon(posReqJsonObj, _session);
QByteArray ret = taskCoupon.doTask();
if(taskCoupon.error() != FM_API_SUCCESS)
{
return ret;
}
// TaskCoupon taskCoupon(posReqJsonObj, _session);
// QByteArray ret = taskCoupon.doTask();
// if(taskCoupon.error() != FM_API_SUCCESS)
// {
// return ret;
// }
//查询余额和积分
ret = queryMemberInfo();
QByteArray ret = queryMemberInfo();
if(error() != FM_API_SUCCESS)
{
return ret;
......@@ -81,31 +81,35 @@ QByteArray TaskPay::queryMemberInfo()
serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_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["sign"] = sign();
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign());
url = FMPVipSettings::instance()->getServerUrl() + "/auth";
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 {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// 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());
......@@ -153,15 +157,18 @@ void TaskPay::packageServerReq()
serverReqJsonObj["stationId"] = getPosJsonValue("pos_id");
serverReqJsonObj["storeId"] = getPosJsonValue("store_id");
serverReqJsonObj["operatorId"] = getPosJsonValue("operator_id");
serverReqJsonObj["transId"] = getPosJsonValue("trans_id");
serverReqJsonObj["businessDate"] = getPosJsonValue("business_date");
serverReqJsonObj["partnerId"] = PARTNER_ID;
QJsonObject transaction;
transaction["memberTransId"] = "";
transaction["account"] = getPosJsonValue("fm_open_id");
transaction["payAmount"] = getPosJsonValue("order_amount").toInt() - getPosJsonValue("paid_amount").toInt();
transaction["isUseScore"] = session()->data("isUseScore").toInt();
//! 会员新接口使用 data 打包业务数据
QJsonObject transData;
transData["transId"] = getPosJsonValue("trans_id");
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 clientArray = getPosJsonValue("products").toArray();
......@@ -185,7 +192,7 @@ void TaskPay::packageServerReq()
payList.push_back(balance);
//积分支付详情
if(transaction["isUseScore"].toInt())
if(transData["isUseScore"].toInt())
{
QJsonObject score;
score["amount"] = session()->data("score").toInt();
......@@ -207,10 +214,13 @@ void TaskPay::packageServerReq()
payList.push_back(coupon);
}
transaction["products"] = products;
transaction["payList"] = payList;
transData["productList"] = products;
transData["payList"] = payList;
serverReqJsonObj["data"] = transData;
serverReqJsonObj[PosProps.Transaction] = transaction;
serverReqJsonObj["t"] = QString::number(QDateTime::currentMSecsSinceEpoch());
serverReqJsonObj["sign"] = sign();
}
bool TaskPay::sendToServer(bool isShowMsg)
......@@ -221,22 +231,24 @@ bool TaskPay::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
url = QString("%1?sign=%2").arg(FMPVipSettings::instance()->getServerUrl()).arg(sign());
url = FMPVipSettings::instance()->getServerUrl() + "/pay";
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 {
QJsonParseError jsonErr;
QJsonDocument rspJson = QJsonDocument::fromJson(rspData, &jsonErr);
// Json错误
if(jsonErr.error != QJsonParseError::NoError) {
setError(FM_API_BADJSON);
FMP_ERROR() << "Unknown data: " << rspData;
} else {
serverRspJsonObj = rspJson.object();
}
......@@ -265,16 +277,16 @@ void TaskPay::packagePOSRsp()
posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1;
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();
//支付方式描述
QMap<QString, QString> description;
description["20001"] = "会员储值金支付";
description["20002"] = "会员积分支付";
description["20003"] = "代金券支付";
description["20004"] = "商品券支付";
description["20005"] = "现金支付";
description["20001"] = QString::fromLocal8Bit("会员储值金支付");
description["20002"] = QString::fromLocal8Bit("会员积分支付");
description["20003"] = QString::fromLocal8Bit("代金券支付");
description["20004"] = QString::fromLocal8Bit("商品券支付");
description["20005"] = QString::fromLocal8Bit("现金支付");
//计算总支付额
QJsonArray pay_ids;
......@@ -282,8 +294,8 @@ void TaskPay::packagePOSRsp()
for(int i = 0; i < servPayArray.size(); i++)
{
QJsonObject pay_id;
pay_id["pay_id"] = QString::number(servPayArray[i].toObject()["typeModeFlag"].toInt());
pay_id["pay_str"] = description[QString::number(servPayArray[i].toObject()["typeModeFlag"].toInt())];
pay_id["pay_id"] = servPayArray[i].toObject()["typeModeFlag"].toString();
pay_id["pay_str"] = description[servPayArray[i].toObject()["typeModeFlag"].toString()];
pay_id["pay_amount"] = servPayArray[i].toObject()["amount"].toInt();
pay_id["code"] = servPayArray[i].toObject()["code"].toString();
pay_ids.push_back(pay_id);
......
......@@ -8,6 +8,7 @@ FMMsgWnd::FMMsgWnd(QDialog *parent) :
{
ui->setupUi(this);
setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_QuitOnClose, false);
this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
}
......
......@@ -173,8 +173,6 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
double num = text.toDouble();
double maxPay = orderInfo->getMaxWillPay();
if (num > maxPay) {
ui->pay_edit->setText(DOUBLE_STR(maxPay));
QString maxPay_info = QString::fromLocal8Bit("余额只需支付 %1 元");
if (maxPay >= orderInfo->getAmountStr().toDouble()) {
maxPay_info = QString::fromLocal8Bit("余额最多支付 %1 元");
......@@ -187,4 +185,5 @@ void FMVipOrder::on_pay_edit_textChanged(const QString &text)
oldPayText = text;
ui->pay_max->setText("");
}
ui->pay_edit->setText(DOUBLE_STR(maxPay));
}
......@@ -163,8 +163,8 @@
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
<width>60</width>
<height>60</height>
</size>
</property>
<property name="styleSheet">
......
......@@ -204,11 +204,11 @@
}
#pay_chk::indicator:unchecked {
image: url(:/chk_unchecked.png);
image: url(:/img/chk_unchecked.png);
}
#pay_chk::indicator:checked {
image: url(:/chk_checked.png);
image: url(:/img/chk_checked.png);
}
#pay_btn {
......@@ -282,7 +282,7 @@
#coupon_separator
{
max-height: 1px;
border-image: url(:/coupon_separator.png);
border-image: url(:/img/coupon_separator.png);
margin: 0 6 10 6;
}</string>
</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