Commit ea7f1f7d by NitefullWind

1. 修复认证返回的fm_open_id为空问题。 2. 使用全局Session,支付时如果Session中已有fm_open_id不再次认证。

parent 8bebb516
......@@ -31,7 +31,11 @@ FMVipDispatcher::~FMVipDispatcher()
void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
{
FMP_INFO() << "Recv POS reqData: " << reqData;
Session session;
// 如果Session已经超过60秒,则清空
if(session.createdTime().secsTo(QDateTime::currentDateTime()) > 60) {
session.clear();
}
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(reqData, &error);
......@@ -43,11 +47,13 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
case FM_Login: {
TaskLogin taskLogin(jsonObj, &session);
rspData = taskLogin.doTask();
session.resetCreatedTime();
break;
}
case FM_Pay: {
TaskPay taskPay(jsonObj, &session);
rspData = taskPay.doTask();
session.clear();
break;
}
......@@ -96,6 +102,7 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
case FM_Final: {
TaskFinal taskFinal(jsonObj, &session);
rspData = taskFinal.doTask();
session.clear();
break;
}
default:
......
......@@ -5,6 +5,7 @@
#include <QMutex>
#include <QWaitCondition>
#include <QSystemTrayIcon>
#include <session.h>
class FMTask;
class FMPVipServer;
......@@ -24,6 +25,8 @@ public:
private:
FMTask * fmTask;
ctkPluginContext* _ctx;
Session session;
};
#endif // FMVIPDISPATCHER_H
......@@ -3,7 +3,7 @@
Session::Session()
{
_createdTime = QDateTime::currentDateTime();
}
Session::~Session()
......@@ -45,3 +45,14 @@ QMap<QString, Coupon> Session::getCouponMap(const QString key)
}
return couponMap;
}
void Session::clear()
{
_sessionDataMap.clear();
}
void Session::reset()
{
_sessionDataMap.clear();
resetCreatedTime();
}
......@@ -2,6 +2,7 @@
#define SESSION_H
#include <QVariant>
#include <QDateTime>
#include "global.h"
#include "coupon.h"
......@@ -29,8 +30,19 @@ public:
QMap<QString, QVariant> sessionDataMap() const { return this->_sessionDataMap;}
void setSessionDataMap(const QMap<QString, QVariant> &dataMap) {this->_sessionDataMap = dataMap;}
// 清空Session
void clear();
void reset();
// Session的创建时间
QDateTime createdTime () { return _createdTime; }
// 将Session的创建时间重置为当前时间
void resetCreatedTime() {this->_createdTime = QDateTime::currentDateTime();}
private:
QMap<QString, QVariant> _sessionDataMap;
QDateTime _createdTime;
};
#endif // SESSION_H
......@@ -37,7 +37,7 @@ void TaskLogin::packagePOSRsp()
posRspJsonObj["statusCode"] = getServerJsonValue("statusCode").toInt();
posRspJsonObj["msg"] = getServerJsonValue("msg").toString();
posRspJsonObj["prompt"] = getServerJsonValue("prompt").toInt();
posRspJsonObj["fm_open_id"] = getServerJsonValue("account").toString();
posRspJsonObj["fm_open_id"] = getServerJsonValue(PosProps.Fm_open_id).toString();
posRspJsonObj["account"] = getServerJsonValue("memberNo").toString();
posRspJsonObj["type_code"] = getServerJsonValue("typecode").toString();
posRspJsonObj["type_name"] = getServerJsonValue("typename").toString();
......
......@@ -29,13 +29,16 @@ QByteArray TaskPay::doTask()
// return ret;
// }
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Pay);
QByteArray loginRst = preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
return loginRst;
if(session()->data(PosProps.Fm_open_id).toString() == 0) {
preTask = new TaskLogin(posReqJsonObj, _session, this);
preTask->session()->addData(PosProps.FM_Type, FM_Pay);
QByteArray loginRst = preTask->doTask();
if(preTask->error() != FM_API_SUCCESS) {
return loginRst;
}
this->_session = preTask->session();
}
this->_session = preTask->session();
// couponThread = new TaskCouponThread(posReqJsonObj, _session, this);
// couponThread->start();
......
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