Commit ea7f1f7d by NitefullWind

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

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