Commit 686345da by unknown

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

parent 1d787f9f
......@@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui network sql
QT += core gui network sql concurrent
CONFIG += c++11
......
......@@ -9,6 +9,10 @@
#include <QTimer>
#include <QSettings>
#include <QApplication>
#include <QtConcurrent>
#include <QFuture>
#include <QSharedPointer>
#include <QSemaphore>
#include "fmbackup.h"
#include <QDebug>
......@@ -126,6 +130,10 @@ void FMVipForward::request(const QJsonObject &reqJob)
}else{
//超时
qDebug() << "定时器超时";
// 超时后,支付和充值应该自动冲正
if(_reqType==FM_VIP_PAY || _reqType==FM_VIP_FUND) {
autoReversal(reqJob);
}
onServerFinished(reply, true);
}
}
......@@ -560,3 +568,57 @@ QMap<QString, Coupon> FMVipForward::getCouponMap(const QString key)
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
#include "fmapicfg.h"
......@@ -94,6 +94,8 @@ private:
void request(const QJsonObject &reqJob);
QString sign(const QJsonObject &reqJob) const;
void autoReversal(const QJsonObject &reqJob);
private:
static FMVipForward* _instance;
......
#include "fmsockserver.h"
#include "fmsockserver.h"
#include "fmvipdispatcher.h"
#include "include/fmutils/fmutils.hpp"
#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