Commit 686345da by unknown

1. 充值/支付服务端超过30秒未响应时,向服务端发送冲正请求,并向POS返回失败信息。

parent 1d787f9f
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# #
#------------------------------------------------- #-------------------------------------------------
QT += core gui network sql QT += core gui network sql concurrent
CONFIG += c++11 CONFIG += c++11
......
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
#include <QTimer> #include <QTimer>
#include <QSettings> #include <QSettings>
#include <QApplication> #include <QApplication>
#include <QtConcurrent>
#include <QFuture>
#include <QSharedPointer>
#include <QSemaphore>
#include "fmbackup.h" #include "fmbackup.h"
#include <QDebug> #include <QDebug>
...@@ -126,6 +130,10 @@ void FMVipForward::request(const QJsonObject &reqJob) ...@@ -126,6 +130,10 @@ void FMVipForward::request(const QJsonObject &reqJob)
}else{ }else{
//超时 //超时
qDebug() << "定时器超时"; qDebug() << "定时器超时";
// 超时后,支付和充值应该自动冲正
if(_reqType==FM_VIP_PAY || _reqType==FM_VIP_FUND) {
autoReversal(reqJob);
}
onServerFinished(reply, true); onServerFinished(reply, true);
} }
} }
...@@ -560,3 +568,57 @@ QMap<QString, Coupon> FMVipForward::getCouponMap(const QString key) ...@@ -560,3 +568,57 @@ QMap<QString, Coupon> FMVipForward::getCouponMap(const QString key)
return couponMap; return couponMap;
} }
void FMVipForward::autoReversal(const QJsonObject &reqJob)
{
QSharedPointer<QSemaphore> share_spr(new QSemaphore());
QtConcurrent::run( [reqJob, share_spr, this]()
{
share_spr->acquire();
QJsonObject reqJsonObj;
for(QString prop : {"appId", "storeId", "stationId", "operatorId", "partnerId", "t"}) {
reqJsonObj[prop] = reqJob[prop];
}
if(reqJob["reqType"] == FM_VIP_FUND) {
reqJsonObj["reqType"] = FM_VIP_REFUND;
QJsonObject transObj;
transObj["memberTransId"] = reqJob["transId"];
reqJsonObj["transaction"] = transObj;
} else if(reqJob["reqType"] == FM_VIP_PAY) {
reqJsonObj["reqType"] = FM_VIP_REVOKE;
reqJsonObj["transId"] = reqJob["transId"];
}
QString signUrl = sign(reqJsonObj);
QString url = this->_urlStr.arg(signUrl);
qDebug() << "冲正url:" << url;
QNetworkAccessManager manger;
QNetworkRequest request(url);
request.setRawHeader("Content-Type","text/json");
QJsonDocument reqJson(reqJsonObj);
QByteArray data = reqJson.toJson(QJsonDocument::Compact);
qDebug() << "冲正数据: " << data;
QNetworkReply* reply = manger.post(request, data);
QEventLoop loop;
connect(&manger, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), &loop, &QEventLoop::quit);
loop.exec();
reply->deleteLater();
if(reply->error() != QNetworkReply::NoError)
{
qDebug() << "冲正网络异常:" << reply->error() << " " << reply->errorString();
}
qDebug() << "冲正返回:" << QString::fromUtf8(reply->readAll());
});
share_spr->release();
}
#ifndef FMVIPFORWARD_H #ifndef FMVIPFORWARD_H
#define FMVIPFORWARD_H #define FMVIPFORWARD_H
#include "fmapicfg.h" #include "fmapicfg.h"
...@@ -94,6 +94,8 @@ private: ...@@ -94,6 +94,8 @@ private:
void request(const QJsonObject &reqJob); void request(const QJsonObject &reqJob);
QString sign(const QJsonObject &reqJob) const; QString sign(const QJsonObject &reqJob) const;
void autoReversal(const QJsonObject &reqJob);
private: private:
static FMVipForward* _instance; static FMVipForward* _instance;
......
#include "fmsockserver.h" #include "fmsockserver.h"
#include "fmvipdispatcher.h" #include "fmvipdispatcher.h"
#include "include/fmutils/fmutils.hpp" #include "include/fmutils/fmutils.hpp"
#include <QApplication> #include <QApplication>
......
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