Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fmp_vip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
fmp_vip
Commits
8c7406ea
Commit
8c7406ea
authored
Jul 18, 2017
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 调整绿篮子对接代码。
parent
6c341fa9
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
117 additions
and
890 deletions
+117
-890
fmvipdispatcher.cpp
+14
-8
global.h
+30
-8
task/fmtask.cpp
+3
-2
task/fmtasknownd.cpp
+0
-38
task/fmtasknownd.h
+0
-2
task/taskfinal.cpp
+14
-142
task/taskfinal.h
+4
-49
task/tasklogin.cpp
+11
-167
task/tasklogin.h
+3
-53
task/taskothers.cpp
+3
-119
task/taskothers.h
+0
-3
task/taskpay.cpp
+34
-251
task/taskpay.h
+1
-48
No files found.
fmvipdispatcher.cpp
View file @
8c7406ea
...
@@ -64,16 +64,22 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
...
@@ -64,16 +64,22 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
}
}
break
;
break
;
}
}
case
FM_Order_Refund
:
{
case
FM_Refund
:
{
TaskRefundOrder
taskRefundOrder
(
jsonObj
);
QString
fm_id
=
jsonObj
[
PosProps
.
Transaction
].
toObject
()[
PosProps
.
Fm_id
].
toString
();
rspData
=
taskRefundOrder
.
doTask
();
if
(
fm_id
!=
""
)
{
break
;
TaskRefundOrder
taskRefundOrder
(
jsonObj
);
}
rspData
=
taskRefundOrder
.
doTask
();
case
FM_Order_Revoke
:
{
}
else
{
TaskRefundPay
taskRefundPay
(
jsonObj
);
TaskRefundPay
taskRefundPay
(
jsonObj
);
rspData
=
taskRefundPay
.
doTask
();
rspData
=
taskRefundPay
.
doTask
();
}
break
;
break
;
}
}
// case FM_Order_Revoke: {
// TaskRefundPay taskRefundPay(jsonObj);
// rspData = taskRefundPay.doTask();
// break;
// }
case
FM_QR_Refund
:
{
case
FM_QR_Refund
:
{
if
(
_ctx
)
{
if
(
_ctx
)
{
ctkServiceReference
ref
=
_ctx
->
getServiceReference
<
FMPePayInterface
>
();
ctkServiceReference
ref
=
_ctx
->
getServiceReference
<
FMPePayInterface
>
();
...
...
global.h
View file @
8c7406ea
...
@@ -21,15 +21,30 @@
...
@@ -21,15 +21,30 @@
enum
FM_TYPE
{
enum
FM_TYPE
{
FM_Login
=
1001
,
FM_Login
=
1001
,
FM_Pay
=
1003
,
FM_Pay
=
1003
,
FM_Order_Refund
,
FM_Refund
=
1004
,
FM_Charge_Refund
,
FM_Final
=
1007
,
FM_Final
=
1007
,
FM_Coupon
=
1009
,
FM_Coupon
=
1009
,
FM_Fund
,
FM_Fund
,
FM_Order_Revoke
,
FM_Order_Revoke
,
FM_QR_Pay
=
10031
,
FM_QR_Pay
=
10031
,
FM_QR_Refund
=
10041
FM_QR_Refund
=
10041
,
FM_Refund_Pay
,
FM_Refund_Order
};
};
// 会员服务端请求URL
#ifndef FMREQURLMAP
#define FMREQURLMAP
typedef
std
::
map
<
int
,
QString
>
FMReqUrlMap
;
const
FMReqUrlMap
::
value_type
FMReqUrlMapPairs
[]
=
{
FMReqUrlMap
::
value_type
(
FM_Login
,
"auth"
),
FMReqUrlMap
::
value_type
(
FM_Pay
,
"pay"
),
FMReqUrlMap
::
value_type
(
FM_Final
,
"order"
),
FMReqUrlMap
::
value_type
(
FM_Refund_Pay
,
"refund"
),
FMReqUrlMap
::
value_type
(
FM_Refund_Order
,
"correct"
)
};
const
FMReqUrlMap
ReqUrl
(
FMReqUrlMapPairs
,
FMReqUrlMapPairs
+
(
sizeof
FMReqUrlMapPairs
/
sizeof
FMReqUrlMapPairs
[
0
]));
#endif
// JSON数据各字段名称
// JSON数据各字段名称
#ifndef POSPROPS
#ifndef POSPROPS
...
@@ -40,6 +55,7 @@ struct PP{
...
@@ -40,6 +55,7 @@ struct PP{
AppId
=
"appId"
;
AppId
=
"appId"
;
PartnerId
=
"partnerId"
;
PartnerId
=
"partnerId"
;
T
=
"t"
;
T
=
"t"
;
Sign
=
"sign"
;
StoreId
=
"store_id"
;
StoreId
=
"store_id"
;
PosId
=
"pos_id"
;
PosId
=
"pos_id"
;
OperatorId
=
"operator_id"
;
OperatorId
=
"operator_id"
;
...
@@ -74,7 +90,7 @@ struct PP{
...
@@ -74,7 +90,7 @@ struct PP{
ScoreAmount
=
"scoreAmount"
;
ScoreAmount
=
"scoreAmount"
;
IsUseScore
=
"isUseScore"
;
IsUseScore
=
"isUseScore"
;
Coupons
=
"coupons"
;
Coupons
=
"coupons"
;
Transaction
=
"transaction"
;
Transaction
=
"transaction
s
"
;
OrderAmount
=
"order_amount"
;
OrderAmount
=
"order_amount"
;
PaidAmount
=
"paid_amount"
;
PaidAmount
=
"paid_amount"
;
NeedAmount
=
"need_amount"
;
NeedAmount
=
"need_amount"
;
...
@@ -113,6 +129,7 @@ struct PP{
...
@@ -113,6 +129,7 @@ struct PP{
QString
AppId
;
QString
AppId
;
QString
PartnerId
;
QString
PartnerId
;
QString
T
;
QString
T
;
QString
Sign
;
QString
StoreId
;
QString
StoreId
;
QString
PosId
;
QString
PosId
;
QString
OperatorId
;
QString
OperatorId
;
...
@@ -201,13 +218,18 @@ const PropsMap::value_type PropsMapPairs[] =
...
@@ -201,13 +218,18 @@ const PropsMap::value_type PropsMapPairs[] =
PropsMap
::
value_type
(
PosProps
.
StoreId
,
"storeId"
),
PropsMap
::
value_type
(
PosProps
.
StoreId
,
"storeId"
),
PropsMap
::
value_type
(
PosProps
.
PosId
,
"stationId"
),
PropsMap
::
value_type
(
PosProps
.
PosId
,
"stationId"
),
PropsMap
::
value_type
(
PosProps
.
OperatorId
,
"operatorId"
),
PropsMap
::
value_type
(
PosProps
.
OperatorId
,
"operatorId"
),
PropsMap
::
value_type
(
PosProps
.
Phone
,
"mobile"
),
PropsMap
::
value_type
(
PosProps
.
Phone
,
"mobile"
),
PropsMap
::
value_type
(
PosProps
.
TransId
,
"transId"
),
PropsMap
::
value_type
(
PosProps
.
TransId
,
"transId"
),
PropsMap
::
value_type
(
PosProps
.
Coupon
,
"couponCode"
),
PropsMap
::
value_type
(
PosProps
.
Coupon
,
"couponCode"
),
PropsMap
::
value_type
(
PosProps
.
BussinessDate
,
"businessDate"
),
PropsMap
::
value_type
(
PosProps
.
BussinessDate
,
"businessDate"
),
PropsMap
::
value_type
(
PosProps
.
Fm_open_id
,
"account"
),
PropsMap
::
value_type
(
PosProps
.
Fm_id
,
"memberTransId"
),
PropsMap
::
value_type
(
PosProps
.
Account
,
"memberNo"
),
PropsMap
::
value_type
(
PosProps
.
Fm_open_id
,
"account"
),
PropsMap
::
value_type
(
PosProps
.
CouponList
,
"coupon_list"
)
PropsMap
::
value_type
(
PosProps
.
Account
,
"memberNo"
),
PropsMap
::
value_type
(
PosProps
.
CouponList
,
"coupon_list"
),
PropsMap
::
value_type
(
PosProps
.
PaidAmount
,
"payAmount"
),
PropsMap
::
value_type
(
PosProps
.
OrderAmount
,
"totalAmount"
),
PropsMap
::
value_type
(
PosProps
.
Pay_id
,
"typeModeFlag"
),
PropsMap
::
value_type
(
PosProps
.
Pay_amount
,
"amount"
),
};
};
static
PropsMap
PosToServerProps
(
PropsMapPairs
,
PropsMapPairs
+
(
sizeof
(
PropsMapPairs
)
/
sizeof
(
PropsMapPairs
[
0
])));
static
PropsMap
PosToServerProps
(
PropsMapPairs
,
PropsMapPairs
+
(
sizeof
(
PropsMapPairs
)
/
sizeof
(
PropsMapPairs
[
0
])));
...
...
task/fmtask.cpp
View file @
8c7406ea
...
@@ -107,13 +107,14 @@ bool FMTask::sendToServer(bool isShowMsg)
...
@@ -107,13 +107,14 @@ bool FMTask::sendToServer(bool isShowMsg)
serverReqJsonObj
[
PosProps
.
PartnerId
]
=
PARTNER_ID
;
serverReqJsonObj
[
PosProps
.
PartnerId
]
=
PARTNER_ID
;
serverReqJsonObj
[
PosProps
.
T
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
PosProps
.
T
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
ServerProps
(
PosProps
.
Fm_cmd
)]
=
FM_Type
();
serverReqJsonObj
[
ServerProps
(
PosProps
.
Fm_cmd
)]
=
QString
::
number
(
FM_Type
());
serverReqJsonObj
[
PosProps
.
Sign
]
=
sign
();
packageServerReq
();
packageServerReq
();
QJsonDocument
json
(
serverReqJsonObj
);
QJsonDocument
json
(
serverReqJsonObj
);
QByteArray
data
=
json
.
toJson
(
QJsonDocument
::
Compact
);
QByteArray
data
=
json
.
toJson
(
QJsonDocument
::
Compact
);
url
=
QString
(
"%1?sign=%2"
).
arg
(
FMPVipSettings
::
instance
()
->
getServerUrl
()).
arg
(
sign
());
url
=
FMPVipSettings
::
instance
()
->
getServerUrl
()
+
"/"
+
ReqUrl
.
at
(
FM_Type
());
QByteArray
rspData
;
QByteArray
rspData
;
FMNetwork
net
;
FMNetwork
net
;
...
...
task/fmtasknownd.cpp
View file @
8c7406ea
...
@@ -23,41 +23,3 @@ QByteArray FMTaskNoWnd::doTask()
...
@@ -23,41 +23,3 @@ QByteArray FMTaskNoWnd::doTask()
QJsonDocument
json
(
posRspJsonObj
);
QJsonDocument
json
(
posRspJsonObj
);
return
json
.
toJson
(
QJsonDocument
::
Compact
);
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
();
}
task/fmtasknownd.h
View file @
8c7406ea
...
@@ -13,8 +13,6 @@ public:
...
@@ -13,8 +13,6 @@ public:
protected
:
protected
:
virtual
void
packageServerReq
()
=
0
;
virtual
void
packageServerReq
()
=
0
;
virtual
void
packagePOSRsp
()
=
0
;
virtual
void
packagePOSRsp
()
=
0
;
QString
sign
()
const
;
};
};
#endif // FMTASKNOWND_H
#endif // FMTASKNOWND_H
task/taskfinal.cpp
View file @
8c7406ea
...
@@ -10,40 +10,24 @@
...
@@ -10,40 +10,24 @@
#include <QCryptographicHash>
#include <QCryptographicHash>
TaskFinal
::
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
TaskFinal
::
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
QObject
(
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_Final
,
session
,
parent
)
{
{
posReqJsonObj
=
jsonObj
;
_session
=
session
;
_error
=
FM_API_SUCCESS
;
}
QByteArray
TaskFinal
::
doTask
()
{
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
();
return
QJsonDocument
(
posRspJsonObj
).
toJson
(
QJsonDocument
::
Compact
);
}
}
void
TaskFinal
::
packageServerReq
()
void
TaskFinal
::
packageServerReq
()
{
{
serverReqJsonObj
[
"appId"
]
=
APP_ID
;
serverReqJsonObj
[
"stationId"
]
=
getPosJsonValue
(
"pos_id"
);
serverReqJsonObj
[
"storeId"
]
=
getPosJsonValue
(
"store_id"
);
serverReqJsonObj
[
"operatorId"
]
=
getPosJsonValue
(
"operator_id"
);
serverReqJsonObj
[
"partnerId"
]
=
PARTNER_ID
;
QJsonObject
transData
;
QJsonObject
transData
;
transData
[
"businessDate"
]
=
getPosJsonValue
(
"business_date"
);
std
::
vector
<
QString
>
p
;
transData
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
p
.
push_back
(
PosProps
.
BussinessDate
);
transData
[
"memberTransId"
]
=
getPosJsonValue
(
"fm_id"
);
p
.
push_back
(
PosProps
.
TransId
);
transData
[
"account"
]
=
getPosJsonValue
(
"fm_open_id"
);
p
.
push_back
(
PosProps
.
Fm_id
);
transData
[
"totalAmount"
]
=
getPosJsonValue
(
"order_amount"
);
p
.
push_back
(
PosProps
.
Fm_open_id
);
transData
[
"payAmount"
]
=
getPosJsonValue
(
"paid_amount"
);
p
.
push_back
(
PosProps
.
OrderAmount
);
p
.
push_back
(
PosProps
.
PaidAmount
);
foreach
(
auto
prop
,
p
)
{
transData
[
ServerProps
(
prop
)]
=
getPosJsonValue
(
prop
);
}
// 产品列表
// 产品列表
QJsonArray
products
;
QJsonArray
products
;
foreach
(
auto
p
,
getPosJsonValue
(
"products"
).
toArray
())
foreach
(
auto
p
,
getPosJsonValue
(
"products"
).
toArray
())
...
@@ -91,57 +75,12 @@ void TaskFinal::packageServerReq()
...
@@ -91,57 +75,12 @@ void TaskFinal::packageServerReq()
}
}
transData
[
"payList"
]
=
payList
;
transData
[
"payList"
]
=
payList
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"data"
]
=
transData
;
int
finalType
=
getPosJsonValue
(
"settlement_type"
).
toInt
();
if
(
finalType
==
0
)
//支付结算
{
serverReqJsonObj
[
"reqType"
]
=
FM_Final
;
}
else
if
(
finalType
==
1
)
//退款结算
{
serverReqJsonObj
[
"reqType"
]
=
1010
;
}
serverReqJsonObj
[
"t"
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
"sign"
]
=
sign
();
}
}
bool
TaskFinal
::
sendToServer
(
bool
isShowMsg
)
bool
TaskFinal
::
sendToServer
(
bool
isShowMsg
)
{
{
FMP_DEBUG
()
<<
__FUNCTION__
;
Q_UNUSED
(
isShowMsg
);
packageServerReq
();
FMTask
::
sendToServer
(
false
);
QJsonDocument
json
(
serverReqJsonObj
);
QByteArray
data
=
json
.
toJson
(
QJsonDocument
::
Compact
);
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
{
// 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
(
error
()
==
FM_API_NETWORERROR
)
{
if
(
error
()
==
FM_API_NETWORERROR
)
{
...
@@ -191,70 +130,3 @@ QString TaskFinal::backup()
...
@@ -191,70 +130,3 @@ QString TaskFinal::backup()
}
}
return
""
;
return
""
;
}
}
QJsonValue
TaskFinal
::
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
)
{
if
(
searchJson
.
contains
(
searchKey
))
{
return
searchJson
[
searchKey
];
}
else
{
qDebug
()
<<
searchJson
.
keys
();
foreach
(
QString
key
,
searchJson
.
keys
())
{
if
(
searchJson
[
key
].
isObject
())
{
QJsonObject
ob
=
searchJson
[
key
].
toObject
();
QJsonValue
value
=
searchJsonValue
(
ob
,
searchKey
);
if
(
!
value
.
isNull
()){
return
value
;
}
}
}
}
return
QJsonValue
();
}
QJsonValue
TaskFinal
::
getServerJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
serverRspJsonObj
,
prop
);
}
QJsonValue
TaskFinal
::
getPosJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
posReqJsonObj
,
prop
);
}
QString
TaskFinal
::
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
();
}
task/taskfinal.h
View file @
8c7406ea
#ifndef TASKFINAL_H
#ifndef TASKFINAL_H
#define TASKFINAL_H
#define TASKFINAL_H
#include <QObject>
#include "fmtasknownd.h"
#include <QJsonObject>
#include "session.h"
class
TaskFinal
:
public
QObject
class
TaskFinal
:
public
FMTaskNoWnd
{
{
Q_OBJECT
Q_OBJECT
public
:
public
:
explicit
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
explicit
TaskFinal
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
QByteArray
doTask
();
void
setFM_Type
(
const
FM_TYPE
fmType
)
{
_FM_Type
=
fmType
;}
FM_TYPE
FM_Type
()
const
{
return
_FM_Type
;}
Session
*
session
()
const
{
return
_session
;}
void
packageServerReq
();
void
packageServerReq
();
bool
sendToServer
(
bool
isShowMsg
=
true
);
bool
sendToServer
(
bool
isShowMsg
=
true
);
void
packagePOSRsp
();
void
packagePOSRsp
();
QJsonValue
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
);
QJsonValue
getServerJsonValue
(
const
QString
prop
);
QJsonValue
getPosJsonValue
(
const
QString
prop
);
private
:
private
:
QString
backup
();
QString
backup
();
QString
sign
()
const
;
QJsonObject
posReqJsonObj
;
QJsonObject
posRspJsonObj
;
QJsonObject
serverReqJsonObj
;
QJsonObject
serverRspJsonObj
;
Session
*
_session
;
FM_TYPE
_FM_Type
;
QString
url
;
/**
* @brief FMError
* define error.
*/
typedef
int
FMError
;
public
:
FMError
error
()
const
{
return
_error
;}
void
setError
(
const
FMError
error
)
{
_error
=
error
;
_errorMsg
=
""
;}
void
setError
(
const
FMError
error
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
errorMsg
;}
void
setError
(
const
FMError
error
,
const
int
errorCode
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
QString
(
"[%1]%2"
).
arg
(
errorCode
).
arg
(
errorMsg
);}
QString
errorString
()
{
if
(
fm_error
.
find
(
_error
)
==
fm_error
.
end
())
{
return
"Undefine Error"
;
}
else
{
if
(
_errorMsg
!=
""
)
return
_errorMsg
;
return
fm_error
.
at
(
_error
);
}
}
private
:
FMError
_error
;
QString
_errorMsg
;
};
};
#endif // TASKFINAL_H
#endif // TASKFINAL_H
task/tasklogin.cpp
View file @
8c7406ea
...
@@ -3,23 +3,10 @@
...
@@ -3,23 +3,10 @@
#include "fmp_vip_settings.h"
#include "fmp_vip_settings.h"
#include "fmnetwork.h"
#include "fmnetwork.h"
#include <QJsonDocument>
#include <QJsonDocument>
#include <QCryptographicHash>
#define RunFunction(function) do { \
function##(); \
if(error() != FM_API_SUCCESS) { \
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); \
return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1(); \
} \
} while(0);
TaskLogin
::
TaskLogin
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
TaskLogin
::
TaskLogin
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
QObject
(
parent
)
:
FMTask
(
jsonObj
,
FM_Login
,
session
,
parent
)
{
{
posReqJsonObj
=
jsonObj
;
_window
=
NULL
;
_session
=
session
;
_error
=
FM_API_SUCCESS
;
}
}
TaskLogin
::~
TaskLogin
()
TaskLogin
::~
TaskLogin
()
...
@@ -27,17 +14,6 @@ TaskLogin::~TaskLogin()
...
@@ -27,17 +14,6 @@ TaskLogin::~TaskLogin()
del_p
(
_window
);
del_p
(
_window
);
}
}
QByteArray
TaskLogin
::
doTask
()
{
FMP_DEBUG
()
<<
__FUNCTION__
;
RunFunction
(
setWindow
);
RunFunction
(
showWindow
);
RunFunction
(
packagePOSRsp
);
QJsonDocument
json
(
posRspJsonObj
);
return
json
.
toJson
(
QJsonDocument
::
Compact
);
}
void
TaskLogin
::
setWindow
()
void
TaskLogin
::
setWindow
()
{
{
_window
=
new
FMVipLogin
;
_window
=
new
FMVipLogin
;
...
@@ -49,112 +25,11 @@ void TaskLogin::setWindow()
...
@@ -49,112 +25,11 @@ void TaskLogin::setWindow()
session
()
->
addData
(
"business_date"
,
getPosJsonValue
(
"business_date"
));
session
()
->
addData
(
"business_date"
,
getPosJsonValue
(
"business_date"
));
}
}
void
TaskLogin
::
showWindow
()
{
FMP_DEBUG
()
<<
__FUNCTION__
;
if
(
_window
!=
nullptr
)
{
_window
->
initWnd
(
session
());
int
ret
=
_window
->
exec
();
if
(
ret
==
-
1
)
{
setError
(
FM_API_WINDOWCLOSE
);
}
}
}
QJsonValue
TaskLogin
::
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
)
{
if
(
searchJson
.
contains
(
searchKey
))
{
return
searchJson
[
searchKey
];
}
else
{
qDebug
()
<<
searchJson
.
keys
();
foreach
(
QString
key
,
searchJson
.
keys
())
{
if
(
searchJson
[
key
].
isObject
())
{
QJsonObject
ob
=
searchJson
[
key
].
toObject
();
QJsonValue
value
=
searchJsonValue
(
ob
,
searchKey
);
if
(
!
value
.
isNull
()){
return
value
;
}
}
}
}
return
QJsonValue
();
}
QJsonValue
TaskLogin
::
getServerJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
serverRspJsonObj
,
prop
);
}
QJsonValue
TaskLogin
::
getPosJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
posReqJsonObj
,
prop
);
}
void
TaskLogin
::
packageServerReq
()
void
TaskLogin
::
packageServerReq
()
{
{
serverReqJsonObj
[
"appId"
]
=
APP_ID
;
serverReqJsonObj
[
"reqType"
]
=
FM_Login
;
serverReqJsonObj
[
"stationId"
]
=
getPosJsonValue
(
"pos_id"
);
serverReqJsonObj
[
"storeId"
]
=
getPosJsonValue
(
"store_id"
);
serverReqJsonObj
[
"operatorId"
]
=
getPosJsonValue
(
"operator_id"
);
serverReqJsonObj
[
"partnerId"
]
=
PARTNER_ID
;
QJsonObject
code
;
QJsonObject
code
;
code
[
"code"
]
=
session
()
->
data
(
"code"
).
toString
();
code
[
"code"
]
=
session
()
->
data
(
"code"
).
toString
();
serverReqJsonObj
[
"data"
]
=
code
;
serverReqJsonObj
[
"data"
]
=
code
;
serverReqJsonObj
[
"t"
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
"sign"
]
=
sign
();
}
bool
TaskLogin
::
sendToServer
(
bool
isShowMsg
)
{
FMP_DEBUG
()
<<
__FUNCTION__
;
packageServerReq
();
QJsonDocument
json
(
serverReqJsonObj
);
QByteArray
data
=
json
.
toJson
(
QJsonDocument
::
Compact
);
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
{
// 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
;
}
}
void
TaskLogin
::
packagePOSRsp
()
void
TaskLogin
::
packagePOSRsp
()
...
@@ -194,51 +69,20 @@ void TaskLogin::onLogin()
...
@@ -194,51 +69,20 @@ void TaskLogin::onLogin()
}
}
// 认证成功
// 认证成功
else
{
else
{
QString
account
=
getServerJsonValue
(
"account"
).
toString
();
QString
account
=
getServerJsonValue
(
PosProps
.
Fm_open_id
).
toString
();
QString
birthday
=
getServerJsonValue
(
"birthday"
).
toString
();
QString
birthday
=
getServerJsonValue
(
PosProps
.
Birthday
).
toString
();
QString
name
=
getServerJsonValue
(
"name"
).
toString
();
QString
name
=
getServerJsonValue
(
PosProps
.
Name
).
toString
();
FMMsgWnd
::
LoginSuccess
(
account
,
name
,
birthday
,
_window
);
FMMsgWnd
::
LoginSuccess
(
account
,
name
,
birthday
,
_window
);
session
()
->
addData
(
PosProps
.
Name
,
name
);
session
()
->
addData
(
PosProps
.
Amount
,
getServerJsonValue
(
PosProps
.
Amount
).
toInt
());
session
()
->
addData
(
PosProps
.
Birthday
,
birthday
);
session
()
->
addData
(
PosProps
.
Fm_open_id
,
account
);
session
()
->
addData
(
PosProps
.
Score
,
getServerJsonValue
(
PosProps
.
Score
).
toInt
());
_window
->
close
();
_window
->
close
();
}
}
if
(
_window
!=
nullptr
)
{
if
(
_window
!=
nullptr
)
{
_window
->
resetWnd
();
_window
->
resetWnd
();
}
}
}
}
QString
TaskLogin
::
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
();
}
task/tasklogin.h
View file @
8c7406ea
#ifndef TASKLOGIN_H
#ifndef TASKLOGIN_H
#define TASKLOGIN_H
#define TASKLOGIN_H
#include "fmtask.h"
#include "fmtask.h"
#include <QObject>
#include <QJsonObject>
class
TaskLogin
:
public
QObject
class
TaskLogin
:
public
FMTask
{
{
Q_OBJECT
Q_OBJECT
public
:
public
:
explicit
TaskLogin
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
explicit
TaskLogin
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
~
TaskLogin
();
~
TaskLogin
();
QByteArray
doTask
();
Session
*
session
()
const
{
return
_session
;}
QJsonValue
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
);
QJsonValue
getServerJsonValue
(
const
QString
prop
);
QJsonValue
getPosJsonValue
(
const
QString
prop
);
private
:
private
:
void
setWindow
();
void
setWindow
()
override
;
void
showWindow
();
void
packageServerReq
();
void
packageServerReq
();
bool
sendToServer
(
bool
isShowMsg
=
true
);
void
packagePOSRsp
();
void
packagePOSRsp
();
public
slots
:
public
slots
:
void
onLogin
();
void
onLogin
();
private
:
QString
sign
()
const
;
private
:
QJsonObject
posReqJsonObj
;
//pos发来的请求数据
QJsonObject
posRspJsonObj
;
//返回给pos的数据
QJsonObject
serverReqJsonObj
;
//发送给server端的请求数据
QJsonObject
serverRspJsonObj
;
//server返回的数据
FMVipWnd
*
_window
;
Session
*
_session
;
QString
url
;
//server url
/**
* @brief FMError
* define error.
*/
typedef
int
FMError
;
public
:
FMError
error
()
const
{
return
_error
;}
void
setError
(
const
FMError
error
)
{
_error
=
error
;
_errorMsg
=
""
;}
void
setError
(
const
FMError
error
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
errorMsg
;}
void
setError
(
const
FMError
error
,
const
int
errorCode
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
QString
(
"[%1]%2"
).
arg
(
errorCode
).
arg
(
errorMsg
);}
QString
errorString
()
{
if
(
fm_error
.
find
(
_error
)
==
fm_error
.
end
())
{
return
"Undefine Error"
;
}
else
{
if
(
_errorMsg
!=
""
)
return
_errorMsg
;
return
fm_error
.
at
(
_error
);
}
}
private
:
FMError
_error
;
QString
_errorMsg
;
};
};
#endif // TASKLOGIN_H
#endif // TASKLOGIN_H
\ No newline at end of file
task/taskothers.cpp
View file @
8c7406ea
...
@@ -6,27 +6,19 @@
...
@@ -6,27 +6,19 @@
#include <fmp_logger_i.h>
#include <fmp_logger_i.h>
TaskRefundPay
::
TaskRefundPay
(
QJsonObject
&
jsonObj
,
QObject
*
parent
)
TaskRefundPay
::
TaskRefundPay
(
QJsonObject
&
jsonObj
,
QObject
*
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_
Order_Revoke
,
0
,
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_
Refund_Pay
,
0
,
parent
)
{
{
}
}
void
TaskRefundPay
::
packageServerReq
()
void
TaskRefundPay
::
packageServerReq
()
{
{
// 固定部分
serverReqJsonObj
[
PosProps
.
AppId
]
=
APP_ID
;
serverReqJsonObj
[
PosProps
.
PartnerId
]
=
PARTNER_ID
;
serverReqJsonObj
[
ServerProps
(
PosProps
.
Fm_cmd
)]
=
FM_Type
();
QJsonArray
transIds
;
QJsonArray
transIds
;
transIds
.
append
(
getPosJsonValue
(
PosProps
.
TransId
));
transIds
.
append
(
getPosJsonValue
(
PosProps
.
TransId
));
QJsonObject
transData
;
QJsonObject
transData
;
transData
[
"transIds"
]
=
transIds
;
transData
[
"transIds"
]
=
transIds
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"t"
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
"sign"
]
=
sign
();
}
}
void
TaskRefundPay
::
packagePOSRsp
()
void
TaskRefundPay
::
packagePOSRsp
()
...
@@ -40,74 +32,17 @@ void TaskRefundPay::packagePOSRsp()
...
@@ -40,74 +32,17 @@ void TaskRefundPay::packagePOSRsp()
posRspJsonObj
[
PosProps
.
Prompt
]
=
1
;
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
)
TaskRefundOrder
::
TaskRefundOrder
(
QJsonObject
&
jsonObj
,
QObject
*
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_
Order_Refund
,
0
,
parent
)
:
FMTaskNoWnd
(
jsonObj
,
FM_
Refund_Order
,
0
,
parent
)
{
{
}
}
void
TaskRefundOrder
::
packageServerReq
()
void
TaskRefundOrder
::
packageServerReq
()
{
{
serverReqJsonObj
[
PosProps
.
AppId
]
=
APP_ID
;
serverReqJsonObj
[
PosProps
.
PartnerId
]
=
PARTNER_ID
;
serverReqJsonObj
[
ServerProps
(
PosProps
.
Fm_cmd
)]
=
FM_Type
();
QJsonObject
transData
;
QJsonObject
transData
;
transData
[
"memberTransId"
]
=
getPosJsonValue
(
PosProps
.
Fm_id
);
transData
[
ServerProps
(
PosProps
.
Fm_id
)
]
=
getPosJsonValue
(
PosProps
.
Fm_id
);
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"t"
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
"sign"
]
=
sign
();
}
}
void
TaskRefundOrder
::
packagePOSRsp
()
void
TaskRefundOrder
::
packagePOSRsp
()
...
@@ -120,54 +55,3 @@ void TaskRefundOrder::packagePOSRsp()
...
@@ -120,54 +55,3 @@ void TaskRefundOrder::packagePOSRsp()
}
}
posRspJsonObj
[
PosProps
.
Prompt
]
=
1
;
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
;
}
task/taskothers.h
View file @
8c7406ea
...
@@ -11,7 +11,6 @@ public:
...
@@ -11,7 +11,6 @@ public:
explicit
TaskRefundPay
(
QJsonObject
&
jsonObj
,
QObject
*
parent
=
0
);
explicit
TaskRefundPay
(
QJsonObject
&
jsonObj
,
QObject
*
parent
=
0
);
void
packageServerReq
();
void
packageServerReq
();
void
packagePOSRsp
();
void
packagePOSRsp
();
bool
sendToServer
(
bool
isShowMsg
);
};
};
// 整单退款
// 整单退款
...
@@ -22,7 +21,5 @@ public:
...
@@ -22,7 +21,5 @@ public:
explicit
TaskRefundOrder
(
QJsonObject
&
jsonObj
,
QObject
*
parent
=
0
);
explicit
TaskRefundOrder
(
QJsonObject
&
jsonObj
,
QObject
*
parent
=
0
);
void
packageServerReq
();
void
packageServerReq
();
void
packagePOSRsp
();
void
packagePOSRsp
();
bool
sendToServer
(
bool
isShowMsg
);
};
};
#endif // TASKOTHERS_H
#endif // TASKOTHERS_H
task/taskpay.cpp
View file @
8c7406ea
...
@@ -9,21 +9,9 @@
...
@@ -9,21 +9,9 @@
#include <QJsonObject>
#include <QJsonObject>
#include <QCryptographicHash>
#include <QCryptographicHash>
#define RunFunction(function) do { \
function##(); \
if(error() != FM_API_SUCCESS) { \
FMP_WARN() << QString("Task error %1: %2").arg(error()).arg(errorString()); \
return QString(ErrorMsgJson).arg(error()).arg(errorString()).toLatin1(); \
} \
} while(0);
TaskPay
::
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
TaskPay
::
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
:
QObject
(
parent
)
:
FMTask
(
jsonObj
,
FM_Pay
,
session
,
parent
)
{
{
posReqJsonObj
=
jsonObj
;
_window
=
nullptr
;
_session
=
session
;
_error
=
FM_API_SUCCESS
;
}
}
TaskPay
::~
TaskPay
()
TaskPay
::~
TaskPay
()
...
@@ -41,134 +29,37 @@ QByteArray TaskPay::doTask()
...
@@ -41,134 +29,37 @@ QByteArray TaskPay::doTask()
// {
// {
// return ret;
// return ret;
// }
// }
//查询余额和积分
QByteArray
ret
=
queryMemberInfo
();
if
(
error
()
!=
FM_API_SUCCESS
)
{
return
ret
;
}
//保存到session,用于界面显示
session
()
->
addData
(
"amount"
,
getServerJsonValue
(
"amount"
));
session
()
->
addData
(
"score"
,
getServerJsonValue
(
"score"
));
session
()
->
addData
(
"name"
,
getServerJsonValue
(
"name"
));
//清空相应json对象
QStringList
keys
=
serverReqJsonObj
.
keys
();
foreach
(
QString
key
,
keys
)
{
serverReqJsonObj
.
remove
(
key
);
}
keys
=
serverRspJsonObj
.
keys
();
foreach
(
QString
key
,
keys
)
{
serverRspJsonObj
.
remove
(
key
);
}
RunFunction
(
setWindow
);
RunFunction
(
showWindow
);
RunFunction
(
packagePOSRsp
);
QJsonDocument
json
(
posRspJsonObj
);
return
json
.
toJson
(
QJsonDocument
::
Compact
);
}
QByteArray
TaskPay
::
queryMemberInfo
()
preTask
=
new
TaskLogin
(
posReqJsonObj
,
_session
,
this
);
{
preTask
->
session
()
->
addData
(
PosProps
.
FM_Type
,
FM_Pay
);
serverReqJsonObj
[
"appId"
]
=
APP_ID
;
QByteArray
loginRst
=
preTask
->
doTask
();
serverReqJsonObj
[
"reqType"
]
=
FM_Login
;
if
(
preTask
->
error
()
!=
FM_API_SUCCESS
)
{
serverReqJsonObj
[
"stationId"
]
=
getPosJsonValue
(
"pos_id"
);
return
loginRst
;
serverReqJsonObj
[
"storeId"
]
=
getPosJsonValue
(
"store_id"
);
serverReqJsonObj
[
"operatorId"
]
=
getPosJsonValue
(
"operator_id"
);
serverReqJsonObj
[
"partnerId"
]
=
PARTNER_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
=
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
{
// 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
());
}
}
}
}
this
->
_session
=
preTask
->
session
();
FMP_INFO
()
<<
"Server rsponse: "
<<
serverRspJsonObj
;
return
FMTask
::
doTask
();
return
rspData
;
}
}
void
TaskPay
::
setWindow
()
void
TaskPay
::
setWindow
()
{
{
_window
=
new
FMVipOrder
;
_window
=
new
FMVipOrder
;
session
()
->
addData
(
"operator_id"
,
getPosJsonValue
(
"operator_id"
).
toString
());
session
()
->
addData
(
"order_amount"
,
getPosJsonValue
(
"order_amount"
).
toInt
());
session
()
->
addData
(
"order_amount"
,
getPosJsonValue
(
"order_amount"
).
toInt
());
session
()
->
addData
(
"store_id"
,
getPosJsonValue
(
"store_id"
).
toString
());
session
()
->
addData
(
"pos_id"
,
getPosJsonValue
(
"pos_id"
).
toString
());
session
()
->
addData
(
"pay_amount"
,
getPosJsonValue
(
"order_amount"
).
toInt
()
-
getPosJsonValue
(
"paid_amount"
).
toInt
());
session
()
->
addData
(
"pay_amount"
,
getPosJsonValue
(
"order_amount"
).
toInt
()
-
getPosJsonValue
(
"paid_amount"
).
toInt
());
session
()
->
addData
(
"business_date"
,
getPosJsonValue
(
"business_date"
).
toString
());
session
()
->
addData
(
"fm_open_id"
,
getPosJsonValue
(
"fm_open_id"
).
toString
());
session
()
->
addData
(
"products"
,
getPosJsonValue
(
"products"
).
toArray
());
session
()
->
addData
(
"products"
,
getPosJsonValue
(
"products"
).
toArray
());
connect
(
qobject_cast
<
FMVipOrder
*>
(
_window
),
SIGNAL
(
pay
()),
this
,
SLOT
(
onPay
()));
connect
(
qobject_cast
<
FMVipOrder
*>
(
_window
),
SIGNAL
(
pay
()),
this
,
SLOT
(
onPay
()));
}
}
void
TaskPay
::
showWindow
()
{
FMP_DEBUG
()
<<
__FUNCTION__
;
if
(
_window
!=
nullptr
)
{
_window
->
initWnd
(
this
->
session
());
int
ret
=
_window
->
exec
();
if
(
ret
==
-
1
)
{
setError
(
FM_API_WINDOWCLOSE
);
}
}
}
void
TaskPay
::
packageServerReq
()
void
TaskPay
::
packageServerReq
()
{
{
serverReqJsonObj
[
"appId"
]
=
APP_ID
;
serverReqJsonObj
[
"reqType"
]
=
FM_Pay
;
serverReqJsonObj
[
"stationId"
]
=
getPosJsonValue
(
"pos_id"
);
serverReqJsonObj
[
"storeId"
]
=
getPosJsonValue
(
"store_id"
);
serverReqJsonObj
[
"operatorId"
]
=
getPosJsonValue
(
"operator_id"
);
serverReqJsonObj
[
"partnerId"
]
=
PARTNER_ID
;
//! 会员新接口使用 data 打包业务数据
//! 会员新接口使用 data 打包业务数据
QJsonObject
transData
;
QJsonObject
transData
;
transData
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
transData
[
ServerProps
(
PosProps
.
TransId
)]
=
getPosJsonValue
(
PosProps
.
TransId
);
transData
[
"businessDate"
]
=
getPosJsonValue
(
"business_date"
);
transData
[
"memberTransId"
]
=
getPosJsonValue
(
"fm_id"
);
transData
[
ServerProps
(
PosProps
.
Fm_id
)]
=
getPosJsonValue
(
PosProps
.
Fm_id
);
transData
[
"account"
]
=
getPosJsonValue
(
"fm_open_id"
);
transData
[
ServerProps
(
PosProps
.
Fm_open_id
)]
=
session
()
->
data
(
PosProps
.
Fm_open_id
).
toString
();
transData
[
"payAmount"
]
=
getPosJsonValue
(
"order_amount"
).
toInt
()
-
getPosJsonValue
(
"paid_amount"
).
toInt
();
transData
[
ServerProps
(
PosProps
.
IsUseScore
)]
=
session
()
->
data
(
PosProps
.
IsUseScore
).
toInt
();
transData
[
"isUseScore"
]
=
session
()
->
data
(
"isUseScore"
).
toInt
();
QJsonArray
products
;
QJsonArray
products
;
QJsonArray
clientArray
=
getPosJsonValue
(
"products"
).
toArray
();
QJsonArray
clientArray
=
getPosJsonValue
(
"products"
).
toArray
();
...
@@ -182,10 +73,13 @@ void TaskPay::packageServerReq()
...
@@ -182,10 +73,13 @@ void TaskPay::packageServerReq()
products
.
push_back
(
serverObj
);
products
.
push_back
(
serverObj
);
}
}
int
payAmount
=
0
;
QJsonArray
payList
;
QJsonArray
payList
;
//余额支付详情
//余额支付详情
QJsonObject
balance
;
QJsonObject
balance
;
balance
[
"amount"
]
=
session
()
->
data
(
"codeAmount"
).
toDouble
();
int
codeAmount
=
session
()
->
data
(
"codeAmount"
).
toInt
();
balance
[
"amount"
]
=
codeAmount
;
payAmount
+=
codeAmount
;
balance
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
balance
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
balance
[
"typeModeFlag"
]
=
20001
;
balance
[
"typeModeFlag"
]
=
20001
;
balance
[
"code"
]
=
""
;
balance
[
"code"
]
=
""
;
...
@@ -195,7 +89,9 @@ void TaskPay::packageServerReq()
...
@@ -195,7 +89,9 @@ void TaskPay::packageServerReq()
if
(
transData
[
"isUseScore"
].
toInt
())
if
(
transData
[
"isUseScore"
].
toInt
())
{
{
QJsonObject
score
;
QJsonObject
score
;
score
[
"amount"
]
=
session
()
->
data
(
"score"
).
toInt
();
int
scoreAmount
=
session
()
->
data
(
"score"
).
toInt
();
score
[
"amount"
]
=
scoreAmount
;
// payAmount += scoreAmount;
score
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
score
[
"transId"
]
=
getPosJsonValue
(
"trans_id"
);
score
[
"typeModeFlag"
]
=
20002
;
score
[
"typeModeFlag"
]
=
20002
;
score
[
"code"
]
=
""
;
score
[
"code"
]
=
""
;
...
@@ -207,7 +103,9 @@ void TaskPay::packageServerReq()
...
@@ -207,7 +103,9 @@ void TaskPay::packageServerReq()
for
(
QMap
<
QString
,
QVariant
>::
const_iterator
it
=
coupons
.
constBegin
();
it
!=
coupons
.
constEnd
();
it
++
)
for
(
QMap
<
QString
,
QVariant
>::
const_iterator
it
=
coupons
.
constBegin
();
it
!=
coupons
.
constEnd
();
it
++
)
{
{
QJsonObject
coupon
;
QJsonObject
coupon
;
coupon
[
"amount"
]
=
it
.
value
().
value
<
Coupon
>
().
disAmount
;
int
couponAmount
=
it
.
value
().
value
<
Coupon
>
().
disAmount
;
coupon
[
"amount"
]
=
couponAmount
;
payAmount
+=
couponAmount
;
coupon
[
"transId"
]
=
getPosJsonValue
(
PosProps
.
TransId
);
coupon
[
"transId"
]
=
getPosJsonValue
(
PosProps
.
TransId
);
coupon
[
"typeModeFlag"
]
=
it
.
value
().
value
<
Coupon
>
().
typeModeFlag
;
coupon
[
"typeModeFlag"
]
=
it
.
value
().
value
<
Coupon
>
().
typeModeFlag
;
coupon
[
"code"
]
=
it
.
value
().
value
<
Coupon
>
().
code
;
coupon
[
"code"
]
=
it
.
value
().
value
<
Coupon
>
().
code
;
...
@@ -217,67 +115,18 @@ void TaskPay::packageServerReq()
...
@@ -217,67 +115,18 @@ void TaskPay::packageServerReq()
transData
[
"productList"
]
=
products
;
transData
[
"productList"
]
=
products
;
transData
[
"payList"
]
=
payList
;
transData
[
"payList"
]
=
payList
;
transData
[
ServerProps
(
PosProps
.
Pay_amount
)]
=
payAmount
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"data"
]
=
transData
;
serverReqJsonObj
[
"t"
]
=
QString
::
number
(
QDateTime
::
currentMSecsSinceEpoch
());
serverReqJsonObj
[
"sign"
]
=
sign
();
}
bool
TaskPay
::
sendToServer
(
bool
isShowMsg
)
{
FMP_DEBUG
()
<<
__FUNCTION__
;
packageServerReq
();
QJsonDocument
json
(
serverReqJsonObj
);
QByteArray
data
=
json
.
toJson
(
QJsonDocument
::
Compact
);
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
{
// Json错误
if
(
jsonErr
.
error
!=
QJsonParseError
::
NoError
)
{
setError
(
FM_API_BADJSON
);
FMP_ERROR
()
<<
"Unknown data: "
<<
rspData
;
}
else
{
serverRspJsonObj
=
rspJson
.
object
();
}
}
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
;
}
}
void
TaskPay
::
packagePOSRsp
()
void
TaskPay
::
packagePOSRsp
()
{
{
posRspJsonObj
[
PosProps
.
StatusCode
]
=
getServerJsonValue
(
"statusCode"
);
posRspJsonObj
[
PosProps
.
StatusCode
]
=
getServerJsonValue
(
PosProps
.
StatusCode
);
posRspJsonObj
[
PosProps
.
Msg
]
=
getServerJsonValue
(
"msg"
);
posRspJsonObj
[
PosProps
.
Msg
]
=
getServerJsonValue
(
PosProps
.
Msg
);
posRspJsonObj
[
PosProps
.
Prompt
]
=
0
;
posRspJsonObj
[
PosProps
.
Prompt
]
=
0
;
posRspJsonObj
[
PosProps
.
Settlement
]
=
1
;
posRspJsonObj
[
PosProps
.
Settlement
]
=
1
;
posRspJsonObj
[
PosProps
.
Fm_open_id
]
=
getServerJsonValue
(
"account"
).
toString
();
posRspJsonObj
[
PosProps
.
Fm_open_id
]
=
session
()
->
data
(
PosProps
.
Fm_open_id
).
toString
();
posRspJsonObj
[
PosProps
.
Fm_id
]
=
getServerJsonValue
(
"memberTransId"
).
toString
();
posRspJsonObj
[
PosProps
.
Fm_id
]
=
getServerJsonValue
(
PosProps
.
Fm_id
).
toString
();
QJsonArray
servPayArray
=
getServerJsonValue
(
"payList"
).
toArray
();
QJsonArray
servPayArray
=
getServerJsonValue
(
"payList"
).
toArray
();
//支付方式描述
//支付方式描述
...
@@ -294,16 +143,16 @@ void TaskPay::packagePOSRsp()
...
@@ -294,16 +143,16 @@ void TaskPay::packagePOSRsp()
for
(
int
i
=
0
;
i
<
servPayArray
.
size
();
i
++
)
for
(
int
i
=
0
;
i
<
servPayArray
.
size
();
i
++
)
{
{
QJsonObject
pay_id
;
QJsonObject
pay_id
;
pay_id
[
"pay_id"
]
=
servPayArray
[
i
].
toObject
()[
"typeModeFlag"
].
toString
();
pay_id
[
PosProps
.
Pay_id
]
=
servPayArray
[
i
].
toObject
()[
ServerProps
(
PosProps
.
Pay_id
)
].
toString
();
pay_id
[
"pay_str"
]
=
description
[
servPayArray
[
i
].
toObject
()[
"typeModeFlag"
].
toString
()];
pay_id
[
PosProps
.
Pay_str
]
=
description
[
servPayArray
[
i
].
toObject
()[
"typeModeFlag"
].
toString
()];
pay_id
[
"pay_amount"
]
=
servPayArray
[
i
].
toObject
()[
"amount"
].
toInt
();
pay_id
[
PosProps
.
Pay_amount
]
=
servPayArray
[
i
].
toObject
()[
ServerProps
(
PosProps
.
Pay_amount
)
].
toInt
();
pay_id
[
"code"
]
=
servPayArray
[
i
].
toObject
()[
"code"
].
toString
();
pay_id
[
PosProps
.
Coupon_code
]
=
servPayArray
[
i
].
toObject
()[
ServerProps
(
PosProps
.
Coupon_code
)
].
toString
();
pay_ids
.
push_back
(
pay_id
);
pay_ids
.
push_back
(
pay_id
);
totalPaid
+=
pay_id
[
"pay_amount"
].
toInt
();
totalPaid
+=
pay_id
[
PosProps
.
Pay_amount
].
toInt
();
}
}
posRspJsonObj
[
"paid_total_amount"
]
=
totalPaid
;
posRspJsonObj
[
PosProps
.
Paid_total_amount
]
=
totalPaid
;
posRspJsonObj
[
"pay_ids"
]
=
pay_ids
;
posRspJsonObj
[
PosProps
.
Pay_ids
]
=
pay_ids
;
}
}
void
TaskPay
::
onPay
()
void
TaskPay
::
onPay
()
...
@@ -311,69 +160,3 @@ void TaskPay::onPay()
...
@@ -311,69 +160,3 @@ void TaskPay::onPay()
sendToServer
();
sendToServer
();
_window
->
close
();
_window
->
close
();
}
}
QJsonValue
TaskPay
::
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
)
{
if
(
searchJson
.
contains
(
searchKey
))
{
return
searchJson
[
searchKey
];
}
else
{
foreach
(
QString
key
,
searchJson
.
keys
())
{
if
(
searchJson
[
key
].
isObject
())
{
QJsonObject
ob
=
searchJson
[
key
].
toObject
();
QJsonValue
value
=
searchJsonValue
(
ob
,
searchKey
);
if
(
!
value
.
isNull
()){
return
value
;
}
}
}
}
return
QJsonValue
();
}
QJsonValue
TaskPay
::
getServerJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
serverRspJsonObj
,
prop
);
}
QJsonValue
TaskPay
::
getPosJsonValue
(
const
QString
prop
)
{
return
searchJsonValue
(
posReqJsonObj
,
prop
);
}
QString
TaskPay
::
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
();
}
task/taskpay.h
View file @
8c7406ea
...
@@ -3,67 +3,20 @@
...
@@ -3,67 +3,20 @@
#include "fmtask.h"
#include "fmtask.h"
#include "taskcoupon.h"
#include "taskcoupon.h"
class
TaskPay
:
public
QObject
class
TaskPay
:
public
FMTask
{
{
Q_OBJECT
Q_OBJECT
public
:
public
:
explicit
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
explicit
TaskPay
(
QJsonObject
&
jsonObj
,
Session
*
session
=
0
,
QObject
*
parent
=
0
);
~
TaskPay
();
~
TaskPay
();
QByteArray
doTask
();
QByteArray
doTask
();
QByteArray
queryMemberInfo
();
void
setWindow
();
void
setWindow
();
void
showWindow
();
void
packageServerReq
();
void
packageServerReq
();
bool
sendToServer
(
bool
isShowMsg
=
true
);
void
packagePOSRsp
();
void
packagePOSRsp
();
Session
*
session
()
const
{
return
_session
;}
QJsonValue
searchJsonValue
(
QJsonObject
&
searchJson
,
QString
searchKey
);
QJsonValue
getServerJsonValue
(
const
QString
prop
);
QJsonValue
getPosJsonValue
(
const
QString
prop
);
private
slots
:
private
slots
:
void
onPay
();
void
onPay
();
private
:
QJsonObject
posReqJsonObj
;
QJsonObject
posRspJsonObj
;
QJsonObject
serverReqJsonObj
;
QJsonObject
serverRspJsonObj
;
FMVipWnd
*
_window
;
Session
*
_session
;
QString
url
;
private
:
QString
sign
()
const
;
/**
* @brief FMError
* define error.
*/
typedef
int
FMError
;
public
:
FMError
error
()
const
{
return
_error
;}
void
setError
(
const
FMError
error
)
{
_error
=
error
;
_errorMsg
=
""
;}
void
setError
(
const
FMError
error
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
errorMsg
;}
void
setError
(
const
FMError
error
,
const
int
errorCode
,
const
QString
errorMsg
)
{
_error
=
error
;
_errorMsg
=
QString
(
"[%1]%2"
).
arg
(
errorCode
).
arg
(
errorMsg
);}
QString
errorString
()
{
if
(
fm_error
.
find
(
_error
)
==
fm_error
.
end
())
{
return
"Undefine Error"
;
}
else
{
if
(
_errorMsg
!=
""
)
return
_errorMsg
;
return
fm_error
.
at
(
_error
);
}
}
private
:
FMError
_error
;
QString
_errorMsg
;
};
};
#endif // TASKPAY_H
#endif // TASKPAY_H
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment