Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sbkclient
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
李定达
sbkclient
Commits
eeb33faa
Commit
eeb33faa
authored
Jun 05, 2017
by
LIDINGDA\ldd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.3DES加密;2.RSA签名测试通过;签名时只取一级字段中的string和number
parent
a5227c7f
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
188 additions
and
54 deletions
+188
-54
ZH_Client.suo
+0
-0
ZH_Client/dataprocess.h
+4
-0
ZH_Client/fmerror.h
+15
-7
ZH_Client/fmglobal.h
+4
-2
ZH_Client/sbk_client.cpp
+154
-36
ZH_Client/tastdataprocess.cpp
+11
-9
No files found.
ZH_Client.suo
View file @
eeb33faa
No preview for this file type
ZH_Client/dataprocess.h
View file @
eeb33faa
...
...
@@ -10,6 +10,7 @@
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/des.h>
#include "fmlog.h"
#include <jansson.h>
#include <jansson_private.h>
...
...
@@ -465,6 +466,9 @@ public:
else
if
(
json_is_array
(
value
))
{
continue
;
}
else
{
continue
;
}
outmsg
.
append
(
tmp
);
outmsg
.
append
(
"|"
);
...
...
ZH_Client/fmerror.h
View file @
eeb33faa
...
...
@@ -2,18 +2,25 @@
#define FM_ERROR_H
//#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL配置文件错误或不存在\"}"
#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\u914D\u7F6E\u6587\u4EF6\u9519\u8BEF\u6216\u4E0D\u5B58\u5728\"}"
//#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\u914D\u7F6E\u6587\u4EF6\u9519\u8BEF\u6216\u4E0D\u5B58\u5728\"}"
#define ERROR_CLIENT_CFG "{\"statusCode\": 301, \"message\": \"DLL\351\205\215\347\275\256\346\226\207\344\273\266\351\224\231\350\257\257\346\210\226\344\270\215\345\255\230\345\234\250\"}"
//#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"输入参数非json或为空\"}"
#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\u8F93\u5165\u53C2\u6570\u975Ejson\u6216\u4E3A\u7A7A\"}"
//#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\u8F93\u5165\u53C2\u6570\u975Ejson\u6216\u4E3A\u7A7A\"}"
#define ERROR_INDATA "{\"statusCode\": 302, \"message\": \"\350\276\223\345\205\245\345\217\202\346\225\260\351\235\236json\346\210\226\344\270\272\347\251\272\"}"
//#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"服务端返回数据异常\"}"
#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\u670D\u52A1\u7AEF\u8FD4\u56DE\u6570\u636E\u5F02\u5E38\"}"
//#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\u670D\u52A1\u7AEF\u8FD4\u56DE\u6570\u636E\u5F02\u5E38\"}"
#define ERROR_OUTDATA "{\"statusCode\": 303, \"message\": \"\346\234\215\345\212\241\347\253\257\350\277\224\345\233\236\346\225\260\346\215\256\345\274\202\345\270\270\"}"
//#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"网络异常冲正中无法进行交易\"}"
#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u51B2\u6B63\u4E2D\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
//#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u51B2\u6B63\u4E2D\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
#define ERROR_ROLLBACK "{\"statusCode\": 304, \"message\": \"\347\275\221\347\273\234\345\274\202\345\270\270\345\206\262\346\255\243\344\270\255\346\227\240\346\263\225\350\277\233\350\241\214\344\272\244\346\230\223\"}"
//#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"签名异常请联系IT\"}"
#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\u7B7E\u540D\u5F02\u5E38\u8BF7\u8054\u7CFBIT\"}"
//#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\u7B7E\u540D\u5F02\u5E38\u8BF7\u8054\u7CFBIT\"}"
#define ERROR_SIGN "{\"statusCode\": 305, \"message\": \"\347\255\276\345\220\215\345\274\202\345\270\270\350\257\267\350\201\224\347\263\273\"}"
//#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"网络异常连接支付网关失败\"}"
#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u8FDE\u63A5\u652F\u4ED8\u7F51\u5173\u5931\u8D25\"}"
//#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\u7F51\u7EDC\u5F02\u5E38\u8FDE\u63A5\u652F\u4ED8\u7F51\u5173\u5931\u8D25\"}"
#define ERROR_NETWORK "{\"statusCode\": 306, \"message\": \"\347\275\221\347\273\234\345\274\202\345\270\270\350\277\236\346\216\245\346\224\257\344\273\230\347\275\221\345\205\263\345\244\261\350\264\245\"}"
//#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"证书加载失败无法进行交易\"}"
#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\u8BC1\u4E66\u52A0\u8F7D\u5931\u8D25\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
//#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\u8BC1\u4E66\u52A0\u8F7D\u5931\u8D25\u65E0\u6CD5\u8FDB\u884C\u4EA4\u6613\"}"
#define ERROR_CRET "{\"statusCode\": 307, \"message\": \"\350\257\201\344\271\246\345\212\240\350\275\275\345\244\261\350\264\245\346\227\240\346\263\225\350\277\233\350\241\214\344\272\244\346\230\223\"}"
#endif
\ No newline at end of file
ZH_Client/fmglobal.h
View file @
eeb33faa
...
...
@@ -9,8 +9,9 @@
#define MAX_SIGN_LEN 256
#define CFG_FILE_NAME "fmclient.cfg"
#define RBG_FILE_NAME "fmclient.rbk"
#define REQUEST_CRET "{\r\n \"ver\": 1,\r\n \"reqType\": 99,\r\n \"partnerId\":
1443,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"serverPublicKey\": \"%s\",\r\n \"clientPrivateKey
\": \"%s\"\r\n}"
#define DES3_KEY "
123456789987654321123456
"
#define REQUEST_CRET "{\r\n \"ver\": 1,\r\n \"reqType\": 99,\r\n \"partnerId\":
%d,\r\n \"storeId\":\"%s\",\r\n \"stationId
\": \"%s\"\r\n}"
#define DES3_KEY "
ABCD@#9876DFSAAWKLDEOPDD
"
#define CRET_FILE_NAME "client.p12"
#define JSON_KEY_ONLY "partnerOrderId"
#endif
\ No newline at end of file
ZH_Client/sbk_client.cpp
View file @
eeb33faa
...
...
@@ -3,6 +3,7 @@
#include <string>
#include <fstream>
#include <io.h>
#include <iomanip>
#include <jansson.h>
#include <jansson_private.h>
...
...
@@ -26,6 +27,7 @@ using std::string;
int
CheckRSASign
();
int
SendMsg
(
const
std
::
string
&
text
,
const
string
&
url
,
int
iscret
=
1
);
int
UTF8ToGBK
(
unsigned
char
*
lpUTF8Str
,
unsigned
char
*
lpGBKStr
,
int
nGBKStrLen
);
typedef
struct
{
...
...
@@ -260,11 +262,12 @@ int InitClient()
return
1
;
}
int
ProcessPosReqData
(
const
char
*
indata
,
int
*
needrbk
)
int
ProcessPosReqData
(
const
char
*
indata
,
string
&
in
,
int
*
needrbk
)
{
int
type
,
rlt
=
0
;
int
type
,
rlt
=
0
;
json_t
*
root
,
*
reqtype
;
std
::
stringstream
tmps
;
json_t
*
root
,
*
reqtype
,
*
partnerId
,
*
storeId
,
*
stationId
;
json_error_t
error
;
*
needrbk
==
0
;
...
...
@@ -278,27 +281,66 @@ int ProcessPosReqData(const char *indata, int *needrbk)
return
0
;
}
reqtype
=
json_object_get
(
root
,
"reqType"
);
if
(
!
json_is_integer
(
reqtype
))
partnerId
=
json_object_get
(
root
,
"partnerId"
);
if
(
!
json_is_integer
(
partnerId
))
{
LOG
()
<<
"error: reqtype is not a integer!"
;
LOG
()
<<
"error: partnerId is not a integer!"
;
rlt
=
0
;
goto
freeJson
;
}
tmps
<<
(
int
)
json_integer_value
(
partnerId
);
storeId
=
json_object_get
(
root
,
"storeId"
);
if
(
!
json_is_string
(
storeId
))
{
LOG
()
<<
"error: storeId is not a string or int!"
;
rlt
=
0
;
goto
freeJson
;
}
tmps
<<
string
((
char
*
)
json_string_value
(
storeId
));
stationId
=
json_object_get
(
root
,
"stationId"
);
if
(
!
json_is_string
(
stationId
))
{
LOG
()
<<
"error: stationId is not a string or int!"
;
rlt
=
0
;
goto
freeJson
;
}
tmps
<<
string
((
char
*
)
json_string_value
(
stationId
));
time_t
tt
=
time
(
NULL
);
tm
*
t
=
localtime
(
&
tt
);
tmps
<<
t
->
tm_year
+
1900
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
<<
t
->
tm_mon
+
1
;
tmps
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
<<
t
->
tm_mday
;
tmps
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
<<
t
->
tm_hour
;
tmps
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
<<
t
->
tm_min
;
tmps
<<
std
::
setw
(
2
)
<<
std
::
setfill
(
'0'
)
<<
t
->
tm_sec
;
LOG
()
<<
"partnerOrderId code : "
<<
tmps
.
str
();
json_object_set
(
root
,
JSON_KEY_ONLY
,
json_string
(
tmps
.
str
().
c_str
()));
in
=
string
(
json_dumps
(
root
,
JSON_COMPACT
|
JSON_SORT_KEYS
));
reqtype
=
json_object_get
(
root
,
"reqType"
);
if
(
!
json_is_integer
(
reqtype
))
{
LOG
()
<<
"error: reqtype is not a integer!"
;
rlt
=
0
;
goto
freeJson
;
}
type
=
(
int
)
json_integer_value
(
reqtype
);
if
(
type
==
72
||
type
==
62
||
type
==
71
)
*
needrbk
=
1
;
rlt
=
1
;
freeJson:
json_decref
(
root
);
return
1
;
return
rlt
;
}
int
GetRealJson
(
std
::
string
&
out
,
const
std
::
string
&
in
)
...
...
@@ -402,6 +444,7 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if
(
InitClient
()
==
0
)
{
strcpy
(
outdata
,
ERROR_CLIENT_CFG
);
LOG
()
<<
"return json to pos"
<<
outdata
;
return
0
;
}
...
...
@@ -409,12 +452,14 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if
(
global_info
.
isrollback
!=
0
)
{
strcpy
(
outdata
,
ERROR_ROLLBACK
);
LOG
()
<<
"return json to pos"
<<
outdata
;
return
0
;
}
if
(
global_info
.
useRSA
==
1
&&
(
global_info
.
serverpublickey
.
empty
()
||
global_info
.
localprivatekey
.
empty
()))
{
strcpy
(
outdata
,
ERROR_CRET
);
LOG
()
<<
"return json to pos"
<<
outdata
;
return
0
;
}
...
...
@@ -429,6 +474,7 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if
(
CheckRBK
()
==
1
)
{
strcpy
(
outdata
,
ERROR_ROLLBACK
);
LOG
()
<<
"return json to pos"
<<
outdata
;
return
0
;
}
...
...
@@ -436,23 +482,28 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
if
(
indata
==
NULL
||
outdata
==
NULL
)
{
LOG
()
<<
"indata or outdata is null pointer"
;
strcpy
(
outdata
,
ERROR_INDATA
);
LOG
()
<<
"return json to pos"
<<
outdata
;
return
0
;
}
LOG
()
<<
"get json from pos :"
<<
indata
;
string
in
(
indata
,
MAX_BUF_LEN
);
string
tmpin
(
indata
,
MAX_BUF_LEN
);
string
in
;
int
needrbk
=
0
;
if
(
ProcessPosReqData
(
in
.
c_str
()
,
&
needrbk
)
!=
1
)
if
(
ProcessPosReqData
(
tmpin
.
c_str
(),
in
,
&
needrbk
)
!=
1
)
{
strcpy
(
outdata
,
ERROR_INDATA
);
LOG
()
<<
"return error message to pos :"
<<
outdata
;
return
0
;
}
LOG
()
<<
"add partnerOrderId : "
<<
in
;
int
ssign
=
0
;
global_info
.
error
.
clear
();
global_info
.
recvbuf
.
clear
();
...
...
@@ -477,6 +528,15 @@ __declspec(dllexport) int _stdcall GetValue(char *indata, char *outdata)
return
0
;
}
//unsigned char outtmp[MAX_BUF_LEN] = { 0 };
//unsigned char outgbk[MAX_BUF_LEN] = { 0 };
//strcpy((char *)outtmp, global_info.recvbuf.c_str());
//UTF8ToGBK(outtmp, outgbk, MAX_BUF_LEN - 1000);
//LOG() << "UTF-8 to GBK :" << outgbk;
strcpy
(
outdata
,
global_info
.
recvbuf
.
c_str
());
endflag
:
...
...
@@ -518,17 +578,61 @@ int GetRSASign(const string &text, string &sign)
if
((
len
=
DataProcess
::
GetJsonKeyArray
(
keys
,
text
))
==
0
)
return
0
;
//for(int j = 0; j < len; j++)
// std::cout << "---:" << j << ";" << keys[j] << std::endl;
DataProcess
::
SortString
(
keys
,
len
);
if
(
DataProcess
::
GetValueFromJson
(
keys
,
len
,
text
,
tmps
)
==
0
)
return
0
;
LOG
()
<<
"sign data : "
<<
tmps
;
if
(
DataProcess
::
RSASign
(
tmps
.
c_str
(),
tmp
,
MAX_SIGN_LEN
,
global_info
.
localprivatekey
.
c_str
())
==
0
)
return
0
;
sign
=
string
(
tmp
);
return
1
;
}
int
UTF8ToGBK
(
unsigned
char
*
lpUTF8Str
,
unsigned
char
*
lpGBKStr
,
int
nGBKStrLen
)
{
wchar_t
*
lpUnicodeStr
=
NULL
;
int
nRetLen
=
0
;
if
(
!
lpUTF8Str
)
//如果UTF8字符串为NULL则出错退出
return
0
;
nRetLen
=
MultiByteToWideChar
(
CP_UTF8
,
0
,(
char
*
)
lpUTF8Str
,
-
1
,
NULL
,
NULL
);
//获取转换到Unicode编码后所需要的字符空间长度
//lpUnicodeStr = new WCHAR[nRetLen + 1]; //为Unicode字符串空间
lpUnicodeStr
=
(
WCHAR
*
)
malloc
(
sizeof
(
WCHAR
)
*
(
nRetLen
+
1
));
nRetLen
=
MultiByteToWideChar
(
CP_UTF8
,
0
,(
char
*
)
lpUTF8Str
,
-
1
,
lpUnicodeStr
,
nRetLen
);
//转换到Unicode编码
if
(
!
nRetLen
)
//转换失败则出错退出
return
0
;
nRetLen
=
WideCharToMultiByte
(
CP_ACP
,
0
,
lpUnicodeStr
,
-
1
,
NULL
,
NULL
,
NULL
,
NULL
);
//获取转换到GBK编码后所需要的字符空间长度
if
(
!
lpGBKStr
)
//输出缓冲区为空则返回转换后需要的空间大小
{
if
(
lpUnicodeStr
)
free
(
lpUnicodeStr
);
return
nRetLen
;
}
if
(
nGBKStrLen
<
nRetLen
)
//如果输出缓冲区长度不够则退出
{
if
(
lpUnicodeStr
)
free
(
lpUnicodeStr
);
return
0
;
}
nRetLen
=
WideCharToMultiByte
(
CP_ACP
,
0
,
lpUnicodeStr
,
-
1
,(
char
*
)
lpGBKStr
,
nRetLen
,
NULL
,
NULL
);
//转换到GBK编码
if
(
lpUnicodeStr
)
free
(
lpUnicodeStr
);
return
nRetLen
;
}
int
CheckRSASign
()
{
if
(
global_info
.
sign
.
empty
())
...
...
@@ -538,6 +642,8 @@ int CheckRSASign()
string
tmps
;
int
len
=
0
;
LOG
()
<<
"get server return sign : "
<<
global_info
.
sign
;
if
((
len
=
DataProcess
::
GetJsonKeyArray
(
keys
,
global_info
.
recvbuf
))
==
0
)
return
0
;
...
...
@@ -546,6 +652,8 @@ int CheckRSASign()
if
(
DataProcess
::
GetValueFromJson
(
keys
,
len
,
global_info
.
recvbuf
,
tmps
)
==
0
)
return
0
;
LOG
()
<<
"check sign data : "
<<
tmps
;
return
DataProcess
::
RSAVerify
(
tmps
.
c_str
(),
global_info
.
sign
.
c_str
(),
global_info
.
serverpublickey
.
c_str
());
}
...
...
@@ -612,10 +720,10 @@ int SendMsg(const std::string &text, const string &url, int iscret)
LOG
()
<<
"Get RSA Sign failed"
;
return
0
;
}
LOG
()
<<
"get sign : "
<<
sign
;
headers
=
curl_slist_append
(
headers
,
string
(
"sign:"
).
append
(
sign
).
c_str
());
headers
=
curl_slist_append
(
headers
,
"Content-Type:text/json"
);
}
headers
=
curl_slist_append
(
headers
,
"Content-Type:text/json"
);
}
else
{
...
...
@@ -677,7 +785,7 @@ int CheckCret()
json_error_t
error
;
char
*
tmp
;
#ifdef FM_TESTS
char
testreturn
[]
=
"{
\r\n
\"
ver
\"
: 1,
\r\n
\"
statusCode
\"
: 100,
\r\n
\"
serverPublicKey
\"
:
\"
HURK/7TakbDFqpYO5FP1L+puEDvAnzhNs1tHuK4ABfxsv/GRNOL9LVo3w08BuzXwRyDzdeOMrkkkimqQ25GTs3WAnyWqcxznwD4LdyAmNEdfFePA1eT+Bn5/BgfpeEuyUDelyPQPonagECQgteBDXeqljRf+3wGrf3BOu9NinqJ3FV2RQrpzQyRR8H6KsbHH0NXv0ziEkhukOPSp2zMgX0/fxaGGi5y6
\"
,
\r\n
\"
clientPrivateKey
\"
:
\"
VtyoIS+ukDjlAk2O6mMxXwJMECaV3AyQK9FepIpFIV0I/NDZzMzaBmy/8ZE04v0tWjfDTwG7NfBHIPN144yuSSSKapDbkZOzdYCfJapzHOfAPgt3ICY0R18V48DV5P4Gfn8GB+l4S7JQN6XI9A+idqAQJCC14ENd6qWNF/7fAat/cE6702KeoncVXZFCunNDJFHwfoqxscfQ1e/TOISSG6Q49KnbMyBfdr4wu5zv+fJhP0t4WqbQMkkxMmVS/iF6ggSo8B25ktOOwy15xWGx8/DpHdDOwwfiouvpzx7V+vySf+YK2SGIBoDxH6Axcdp2sQHPlL1R6d7t3U/eUZ9uA7DpA7zjeraDRQrtNr/97SyNvqCisfLqTNQsBFHZJ7+lqQ3Dy1JN/vpbmSGSQLU06ZaXEgxRn6WiDwC0OfcwQt7JsOVCIJYHShCTDeL7aDAH6YeFj2x1+P2IcMx/u9tTfd5ptiFi/gE8jS5MAWTPbTf1r2lLRGzk+TxYlHdQpYs4ohZQgtuzEqdt1ERAO6pb6+jaUlSZqhC+3Z1dSe0xVwQk0NN37Ieh8gQpp/RIQq13Oox0o+tt+oWSxAKcQqY5s2n7w0Nal2HEZJtpgcyXG0RWhoqGtWfMM28vWZTmZoDp1QvnPNTsVBNkGdfObCtN7wZVsSSPs4O56dkSsW4uO0xTfQymHLSA8aoRjiWJIKijvLvCcwW8IGuy7i+PnuhhqR5yuRWQq2o6DIjiDUD3N3fYXam3f4opLa1iQBBYurBuOfS7GCqrjfpvtkR0JZNIp9BAw8rLihnO5KSG17c4s2s0f1ZMbNKHUHTOo2Hb70UPVFEXuWFWbtZOtasV4oFhwg==
\"\r\n
}"
;
char
testreturn
[]
=
"{
\r\n
\"
ver
\"
: 1,
\r\n
\"
partnerId
\"
: 1234,
\r\n
\"
statusCode
\"
: 100,
\r\n
\"
serverPublicKey
\"
:
\"
HURK/7TakbDFqpYO5FP1L+puEDvAnzhNs1tHuK4ABfxsv/GRNOL9LVo3w08BuzXwRyDzdeOMrkkkimqQ25GTs3WAnyWqcxznwD4LdyAmNEdfFePA1eT+Bn5/BgfpeEuyUDelyPQPonagECQgteBDXeqljRf+3wGrf3BOu9NinqJ3FV2RQrpzQyRR8H6KsbHH0NXv0ziEkhukOPSp2zMgX0/fxaGGi5y6
\"
,
\r\n
\"
clientPrivateKey
\"
:
\"
VtyoIS+ukDjlAk2O6mMxXwJMECaV3AyQK9FepIpFIV0I/NDZzMzaBmy/8ZE04v0tWjfDTwG7NfBHIPN144yuSSSKapDbkZOzdYCfJapzHOfAPgt3ICY0R18V48DV5P4Gfn8GB+l4S7JQN6XI9A+idqAQJCC14ENd6qWNF/7fAat/cE6702KeoncVXZFCunNDJFHwfoqxscfQ1e/TOISSG6Q49KnbMyBfdr4wu5zv+fJhP0t4WqbQMkkxMmVS/iF6ggSo8B25ktOOwy15xWGx8/DpHdDOwwfiouvpzx7V+vySf+YK2SGIBoDxH6Axcdp2sQHPlL1R6d7t3U/eUZ9uA7DpA7zjeraDRQrtNr/97SyNvqCisfLqTNQsBFHZJ7+lqQ3Dy1JN/vpbmSGSQLU06ZaXEgxRn6WiDwC0OfcwQt7JsOVCIJYHShCTDeL7aDAH6YeFj2x1+P2IcMx/u9tTfd5ptiFi/gE8jS5MAWTPbTf1r2lLRGzk+TxYlHdQpYs4ohZQgtuzEqdt1ERAO6pb6+jaUlSZqhC+3Z1dSe0xVwQk0NN37Ieh8gQpp/RIQq13Oox0o+tt+oWSxAKcQqY5s2n7w0Nal2HEZJtpgcyXG0RWhoqGtWfMM28vWZTmZoDp1QvnPNTsVBNkGdfObCtN7wZVsSSPs4O56dkSsW4uO0xTfQymHLSA8aoRjiWJIKijvLvCcwW8IGuy7i+PnuhhqR5yuRWQq2o6DIjiDUD3N3fYXam3f4opLa1iQBBYurBuOfS7GCqrjfpvtkR0JZNIp9BAw8rLihnO5KSG17c4s2s0f1ZMbNKHUHTOo2Hb70UPVFEXuWFWbtZOtasV4oFhwg==
\"\r\n
}"
;
root
=
json_loads
(
testreturn
,
0
,
&
error
);
#else
root
=
json_loads
(
outmsg
,
0
,
&
error
);
...
...
@@ -729,25 +837,27 @@ int CheckCret()
filestm
.
flush
();
filestm
.
close
();
global_info
.
serverpublickey
=
string
(
json_string_value
(
serverpublickey
));
global_info
.
localprivatekey
=
string
(
json_string_value
(
localprivatekey
));
global_info
.
serverpublickey
=
string
(
(
char
*
)
json_string_value
(
serverpublickey
));
global_info
.
localprivatekey
=
string
((
char
*
)
json_string_value
(
localprivatekey
));
LOG
()
<<
"server public key :"
<<
global_info
.
serverpublickey
;
LOG
()
<<
"client private key :"
<<
global_info
.
localprivatekey
;
}
else
{
json_decref
(
root
);
return
0
;
}
json_decref
(
root
);
return
1
;
}
/******************************************
*GetCret :从签名服务获取证书
*storeID :门店号
*posNo :POS机器编号
******************************************/
*GetCret :从签名服务获取************/
extern
"C"
{
__declspec
(
dllexport
)
int
_stdcall
GetRSACret
(
char
*
storeID
,
char
*
posNo
)
__declspec
(
dllexport
)
int
_stdcall
GetRSACret
(
int
partnerId
,
char
*
storeID
,
char
*
posNo
)
{
if
(
storeID
==
NULL
||
posNo
==
NULL
||
strlen
(
storeID
)
==
0
||
strlen
(
posNo
)
==
0
)
{
...
...
@@ -768,7 +878,7 @@ extern "C"
char
request
[
MAX_BUF_LEN
]
=
{
0
};
sprintf_s
(
request
,
MAX_BUF_LEN
,
REQUEST_CRET
,
storeID
,
posNo
,
global_info
.
serverpublickey
.
c_str
(),
global_info
.
localprivatekey
.
c_str
()
);
sprintf_s
(
request
,
MAX_BUF_LEN
,
REQUEST_CRET
,
partnerId
,
storeID
,
posNo
);
LOG
()
<<
request
;
...
...
@@ -780,7 +890,7 @@ extern "C"
char
outmsg
[
MAX_BUF_LEN
]
=
{
0
};
int
legth
=
0
;
if
((
legth
=
DataProcess
::
DES3Encode
((
const
unsigned
char
*
)
DES3_KEY
,
req
.
c_str
(),
req
.
size
(),
(
unsigned
char
*
)
outmsg
,
MAX_BUF_LEN
))
==
0
)
if
((
legth
=
DataProcess
::
DES3Encode
((
const
unsigned
char
*
)
DES3_KEY
,
req
.
c_str
(),
req
.
length
(),
(
unsigned
char
*
)
outmsg
,
MAX_BUF_LEN
))
==
0
)
{
LOG
()
<<
"3DES encode failed"
;
return
0
;
...
...
@@ -802,6 +912,9 @@ extern "C"
#endif
string
tmpstr
=
global_info
.
recvbuf
.
substr
(
1
,
global_info
.
recvbuf
.
length
()
-
2
);
global_info
.
recvbuf
=
tmpstr
;
if
(
CheckCret
()
==
0
)
{
LOG
()
<<
"Check Cret failed"
;
...
...
@@ -837,9 +950,11 @@ void testinitclient()
InitClient
();
}
char
a
[]
=
"{
\"
ver
\"
:1,
\"
reqType
\"
: 62,
\"
coupon
\"
:
\"
122222222222
\"
,
\"
station_id
\"
:
\"
1
\"
,
\"
store_i
d
\"
:
\"
999999
\"
,
\"
operator_id
\"
:
\"
00000002
\"
}"
;
//char a[] = "{\"ver\":1,\"partnerId\":1234,\"reqType\": 62,\"coupon\": \"122222222222\",\"stationId\": \"1\",\"storeI
d\": \"999999\",\"operator_id\": \"00000002\" }";
//char a[] = "{\r\n \"pay_transId\":\"2017052600001162504297\",\r\n \"total_amount\":1,\r\n \"mcoupon_amount\":0,\r\n \"alipay_amount\":1,\r\n \"pay_ebcode\":\"10010\",\r\n \"ver\":1,\r\n \"fmId\":\"SXA1377O27012186844\",\r\n \"pay_date\":\"2017-05-26 17:01:16.004\",\r\n \"statusCode\":100\r\n}";
//char a[] = "{\"businessDate\":\"20170526\",\"code\":\"7310180009462033\",\"operatorId\":\"90001\",\"partnerId\":1443,\"products\":[{\"consume_num\":1,\"discount\":0,\"name\":\"Coffee\",\"number\":0,\"payment\":null,\"pid\":\"3488\",\"price\":3100,\"priceAct\":0,\"salesType\":\"Normal\",\"scope\":null}],\"promotionTag\":null,\"reqType\":72,\"stationId\":\"3\",\"storeId\":\"1713\",\"transAmount\":3100,\"transId\":6460,\"undiscountAmount\":0,\"ver\":1}";
//char a[] = "{\r\n \"ver\": 1,\r\n \"reqType\": 0,\r\n \"partnerId\": 1443,\r\n \"stationId\": \"123123\",\r\n \"storeId\": \"12344\",\r\n \"operatorId\": \"00000002\",\r\n \"code\": \"7320020400887150\"\r\n}";
char
a
[]
=
"{
\r\n
\"
businessDate
\"
:
\"
20170601
\"
,
\r\n
\"
code
\"
:
\"
7310188850000277
\"
,
\r\n
\"
operatorId
\"
:
\"
90001
\"
,
\r\n
\"
partnerId
\"
: 1443,
\r\n
\"
partnerOrderId
\"
:
\"
1443171223323
\"
,
\r\n
\"
products
\"
: [
\r\n
{
\r\n
\"
consume_num
\"
: 1,
\r\n
\"
discount
\"
: 0,
\r\n
\"
name
\"
:
\"
Coffee
\"
,
\r\n
\"
number
\"
: 0,
\r\n
\"
payment
\"
: null,
\r\n
\"
pid
\"
:
\"
3488
\"
,
\r\n
\"
price
\"
: 3100,
\r\n
\"
priceAct
\"
: 0,
\r\n
\"
salesType
\"
:
\"
Normal
\"
,
\r\n
\"
scope
\"
: null
\r\n
}
\r\n
],
\r\n
\"
promotionTag
\"
: null,
\r\n
\"
reqType
\"
: 72,
\r\n
\"
stationId
\"
:
\"
9
\"
,
\r\n
\"
storeId
\"
:
\"
12344
\"
,
\r\n
\"
transAmount
\"
: 29,
\r\n
\"
transId
\"
: 1,
\r\n
\"
undiscountAmount
\"
: 0,
\r\n
\"
ver
\"
: 1
\r\n
}"
;
void
testCheckRollbackData
()
{
InitClient
();
...
...
@@ -849,11 +964,11 @@ void testCheckRollbackData()
int
main
()
{
char
storeid
[]
=
"
23456
"
;
char
storeid
[]
=
"
12344
"
;
char
posno
[]
=
"01"
;
//
Test_RSASign();
//
Test_RSAVerify();
Test_RSASign
();
Test_RSAVerify
();
//Test_GetPEMKey();
//Test_3DES();
//Test_LOG();
...
...
@@ -866,13 +981,16 @@ int main()
//TestRETDES();
GetRSACret
(
storeid
,
posno
);
while
(
1
)
{
GetValue
(
a
,
b
);
GetRSACret
(
1443
,
storeid
,
posno
);
//
while(1)
//
{
GetValue
(
a
,
b
);
LOG
()
<<
b
;
}
// LOG() << b;
// Sleep(30*1000);
//}
...
...
ZH_Client/tastdataprocess.cpp
View file @
eeb33faa
...
...
@@ -4,15 +4,15 @@
using
namespace
std
;
char
text
[]
=
"
1443|72|1|12344
|1"
;
char
texts
[]
=
"
1443|72|1|12344
|1"
;
char
text
[]
=
"
207
|1"
;
char
texts
[]
=
"
207
|1"
;
unsigned
char
deskey
[]
=
"123456789012345678901235"
;
char
sign
[
256
]
=
{
0
};
char
out
[
1024
]
=
{
0
};
char
private_key
[]
=
"MIIC
XQIBAAKBgQDK1JuEwMaEetLryK/PxhEd9QdMWllr/MAVNhV4CMboIjQzYg40ZdIU8qp0kaS/Oe06Th8YWi+wPW+vOSSd3J7kq2r23MMULStSyrK/GAyi7tvvpkNmoP2+s9NPoUjzNGqZTVQ3AqktkgTUiQgO5elqnkfXpz7J6OHm1/m0VjOvpwIDAQABAoGAAdQ+/sh6QdGVu1iY9Ue0+c8u3Kpn6ghidw6AzQ9PM+KzE8+Ljz9n0JaLoPd7Q9oy4Ha54w9VJMK5EhxyzxWhPSyNr/pvxXwMZL22NfdS/Xlj5L1zzR3JGybc7qxMk4rBX+/aT5YbNG5m4yN3pZldMjJPFzVtv6q4PYnq/DBNjgECQQDsq5NoLXbVBo+Ba4nVrV1yPKNqrLwWkpGONrmkXh3KljNOIBoODKoRt0IfA/fym0t4qDu3e0qNBj44MlxpxmqnAkEA22V+QgM9QonIAWTNgFVlYE6sPtHDaPf7WLBHfCjYTUbjFTAGQBKI3phGdPAipB/2pNlty9RZeHyvDZNRTSIzAQJAY56tA5LvjCegzDc544l/5hAEMWjYGyBCyHvclIVRQO8MVXxJu1Q1WhOrb2a6PZKEqBsYV9k7vjS8h+ca4yMzzQJBAI5u9qf+mF/BOWKGQc/mINmEWdiyr81O6ROr5czaa4rH0ZcoxXYFUmxIqb0zRRoOUj61lc11f9xz/eWvVWHhKQECQQCyEFGJtqqtZZyVNmpWYtCJqVlGD7I2dD5oCmQehYLs3XtwbMsqlxPkSbN9zyYGjiPtg0xevqazN32+hXAO3mmG
"
;
char
public_key
[]
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ
DK1JuEwMaEetLryK/PxhEd9QdMWllr/MAVNhV4CMboIjQzYg40ZdIU8qp0kaS/Oe06Th8YWi+wPW+vOSSd3J7kq2r23MMULStSyrK/GAyi7tvvpkNmoP2+s9NPoUjzNGqZTVQ3AqktkgTUiQgO5elqnkfXpz7J6OHm1/m0VjOvp
wIDAQAB"
;
char
private_key
[]
=
"MIIC
dgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALNT2Oh4Yw2ijcEt+rqKAfnsRUqXlqOOFWcBLZw9SZHXbIOjOBgWXmEh2fa5fbP/yJwHfBXPVK4k0lFrXQuEFlcxI2YdAatLsT2BWOGAhJ15KRvN9uJseNXDRqFBjMJQGr4hbmtohowBdzgLU8ztUeO++4SAcqsnCapEsNi/jwbjAgMBAAECgYBV+J2lnYmHUOX6tgtdAKq/4Wi6wP/D+2sBTcxK+graM1ffqBFNYvPuRydSpEzCTZ8kRmZTomkrb5Ww2PLrgXCfn8CEuu+Gs0qOmIKSJrQqxCjAV5LceqlSNRMbUOlfF0iXtaNS1SFYgTROP+TEOpo6uQCr0wosraJ7XSbkN01Z4QJBAO+uVE6PUlFX3wKHcJv8+gVd3MtB2b74isxAGJt26X811mMr9k2d3p9z/KteZnk6ih0nqrTsNUjcrVeZGxt7WlECQQC/iYyuh3QlBqC0eI7TcvzfjeeGBpo6a9vfbTHQ6dcEotmYtJsvU3/ryaFm08GiT4s131D6LBPh4bm7rGWZ1IzzAkBuvkTT+6LUVN6E46GjYXMAUcs32xhKBbrT/vWft4TRs0V4kxJ98Gixkjz3zWlZsDOqnu5gJBfGr7gkFmkQ/KDRAkBPABXVeqsOBoDMTxlh34CrWGVRI3IDfK9QpUIxz/FOyTiEwqFrUL5na1+2AMtR/gsGKljFBt8ggLDR1paFb2S/AkEAoO0Zg2qya2j+ho9/aY6eHCFBE3XNukUZZRO4P7wSEPRECqQ1DhT1r8QsXo6nuXlOf6JHO6gXV2j5XDg4UhcpRA==
"
;
char
public_key
[]
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ
CzU9joeGMNoo3BLfq6igH57EVKl5ajjhVnAS2cPUmR12yDozgYFl5hIdn2uX2z/8icB3wVz1SuJNJRa10LhBZXMSNmHQGrS7E9gVjhgISdeSkbzfbibHjVw0ahQYzCUBq+IW5raIaMAXc4C1PM7VHjvvuEgHKrJwmqRLDYv48G4
wIDAQAB"
;
RSA
*
createRSA
(
unsigned
char
*
key
,
int
publictype
)
{
...
...
@@ -74,13 +74,15 @@ void Test_3DES()
{
char
tmpout
[
1024
]
=
{
0
};
char
outs
[
MAX_BUF_LEN
]
=
{
0
};
char
tmps
[]
=
"gEYXfUox9kFVFu6I3os8LMULhYn85Ou8R4ye05OZmNb2yb71t18S7BILEi1DZQLPzV6F7UQVsWu+FCvkEssVBS8ZElcrKoaq91aovWZOb17itgpCbvsoE0tvfH2OPC+uNDEjW6iX5WoEFQ3aNJ3OOLyapa0tGrir7Gn/BlAoBkeP5OPP/9Yet4uXbJvwZTTpnkS7YLDqbqCvaaobm6u/LagIOsUGud6V4wDG/OwywymyZl0QXY2bUIQF4OHkIvbgr/LYkYS4zU5X5W5WFlH8xwmjhlMTpvlz8L29tPpJi/BkZ5IPriU9js1o+g73zboYkdTJDKZgewSewDFsH++L2GVaoawECajkwCkI1+Hrob/gKJ3FSJgHBvCHpR6+QUhLe2LMV4VsaikxgrRXZnaFXi52xiFHj2bfys2C2y0ybZZiEqJO3aKn8PSXFZCx+PMw3aGBfqJDWGG4RJysfNg7XAwEaKh8UzIQfJxL8ISKePvYvB8QdMJPUzcEqDEn0m6NVS85x3Wi9Go3ttUvhNHXkOISGv2DlWxzfi7dezzA/EP68nOg7RbmtcWWy/KYl/3DPDdmjTWGz80/R6kzlBh1l0KEr8IuCEamt9TSYv3NkDbSYYTbNvKyH7ubElctD9MoKOCavJ2xGW+Evc2BQ0ld1FgqvFzmN9lHxuCOW5bCylU+Hc51Tcvwve5kFZfIU28o0zhACsQlkSXzWf1Px5ThXxCBz0ZDlC7Y2EAPkzfFzFo8c98/w26dvqoLFi0u2VhGFm/iWfe8i+7xXMPJeaZD/2MRY2PXcG4Ym4f8KRQ3uQKdc+cunaLloiUDDrX5aGqJXp7CjlmtuDu8ZSPjQhaBc27KdseUkZ8cPb/LGNoAtEyvkMzoj5/Z65gw+wpivMoFJ+2xot/zg26kvEfwtq99szaZhDIt9EVXzoZ86j2UiKio+zI6A6Ft8++K39XrljZX3+6jIDGfwymcO+v40Vk/icWKueXrmcdb1b/+tcXCVXV1a1Qxt3SRPF8CcjKRSJHI0KsrGQXDdPUjT8I0G3z3yVvRUGBRBtIaJlvLofX/NTGNw7DImwfzdyaKpYx21sxbE/sxESSiQxUn84Pn/Qn1h/mM4K3QNb/sVoCkQhxHs4bRGAQ6HUAR1w6WjtY1N6W1Lsra4RZ0NGyx7Hu/YulIvbYoSEFvH+mlShZ0YFCkx+A9+TpZq+qjXnI/2uzkLwY+iwFmWECn2v2Ev4ITwUZaSnymHgQ4rB+xVfRCKDOiZeknP1yx25TFLnTyxSa/hhaD7NF60xnRkJVBo22dEED1wPvhTiVo3oGYnYSUftTTb6Si4wh35oGlW6DGJUMRAAmmorHgotgodTc9DSF4BAR6Ibqo+QZnnOBnGUUv/f0vm2kUj3gphNr6mlfYz38u2zCH6wMjqJWb/Qb0WT1hS7vFea2yHgiCHlFuBLQtZdnQMomFzqweZnZE65gamJ4hZwBrrTgo+vEC6TIWuA6d4Ev7IUDKNsv5VTAcpO14RVDiMmG3FwUYGKOoVtA0aEdgOOM6"
;
if
(
DataProcess
::
DES3Encode
(
deskey
,
text
,
strlen
(
text
),
(
unsigned
char
*
)
out
,
1024
)
!=
0
)
printf
(
"edcode base64:%s
\r\n
"
,
out
);
else
printf
(
"encode failed"
);
//
if(DataProcess::DES3Encode(deskey, text, strlen(text), (unsigned char *)out, 1024) != 0)
//
printf("edcode base64:%s\r\n", out);
//
else
//
printf("encode failed");
if
(
DataProcess
::
DES3Decode
(
deskey
,
out
,
strlen
(
out
),
(
unsigned
char
*
)
tmpout
,
1024
)
!=
0
)
if
(
DataProcess
::
DES3Decode
(
(
const
unsigned
char
*
)
DES3_KEY
,
tmps
,
strlen
(
tmps
),
(
unsigned
char
*
)
outs
,
MAX_BUF_LEN
)
!=
0
)
printf
(
"edcode base64:%s
\r\n
"
,
tmpout
);
else
printf
(
"encode failed"
);
...
...
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