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
30ab19b4
Commit
30ab19b4
authored
Aug 10, 2017
by
李定达
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.支付宝二期完成;2.调整签名到报文中;3.添加mac字段测试完成
parent
1745af69
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
96 additions
and
35 deletions
+96
-35
ZH_Client.suo
+0
-0
ZH_Client/dataprocess.h
+4
-1
ZH_Client/fmglobal.h
+1
-0
ZH_Client/sbk_client.cpp
+91
-34
No files found.
ZH_Client.suo
View file @
30ab19b4
No preview for this file type
ZH_Client/dataprocess.h
View file @
30ab19b4
...
...
@@ -392,8 +392,11 @@ public:
json_object_foreach
(
root
,
key
,
value
)
{
//去除签名字段
if
(
strcmp
(
"sign"
,
key
)
==
0
)
continue
;
keys
[
i
]
=
std
::
string
(
key
);
i
++
;
i
++
;
}
json_decref
(
root
);
...
...
ZH_Client/fmglobal.h
View file @
30ab19b4
...
...
@@ -23,6 +23,7 @@
#define CRET_FILE_NAME "client.p12"
#define JSON_KEY_ONLY "partnerOrderId"
#define JSON_KEY_MAC "mac"
#define JSON_KEY_SIGN "sign"
#define JSON_KEY_FMTEST "test"
#define CFG_KEY "template"
...
...
ZH_Client/sbk_client.cpp
View file @
30ab19b4
...
...
@@ -868,13 +868,17 @@ size_t GetSign(void* buffer, size_t size, size_t nmemb, void *userdata)
return
size
*
nmemb
;
}
int
GetRSASign
(
const
string
&
text
,
string
&
sign
)
int
GetRSASign
(
string
&
text
,
string
&
sign
)
{
char
tmp
[
MAX_SIGN_LEN
]
=
{
0
};
string
keys
[
256
];
string
tmps
;
int
len
=
0
;
json_t
*
root
,
*
reqtype
;
json_error_t
error
;
char
*
tmpp
;
if
((
len
=
DataProcess
::
GetJsonKeyArray
(
keys
,
text
))
==
0
)
return
0
;
...
...
@@ -891,6 +895,25 @@ int GetRSASign(const string &text, string &sign)
if
(
DataProcess
::
RSASign
(
tmps
.
c_str
(),
tmp
,
MAX_SIGN_LEN
,
global_info
.
localprivatekey
.
c_str
())
==
0
)
return
0
;
sign
=
string
(
tmp
);
root
=
json_loads
(
text
.
c_str
(),
0
,
&
error
);
if
(
!
root
)
{
LOG
()
<<
"argv is not json"
;
return
0
;
}
json_object_set
(
root
,
JSON_KEY_SIGN
,
json_string
(
sign
.
data
()));
tmpp
=
json_dumps
(
root
,
JSON_COMPACT
|
JSON_SORT_KEYS
);
text
=
std
::
string
(
tmpp
);
LOG
()
<<
"add sign json : "
<<
text
;
json_decref
(
root
);
return
1
;
}
...
...
@@ -960,32 +983,63 @@ int CheckRSASign()
int
GetRealSign
()
{
if
(
!
global_info
.
sign
.
empty
())
json_t
*
root
,
*
sign
=
NULL
;
json_error_t
error
;
char
*
tmp
;
root
=
json_loads
(
global_info
.
recvbuf
.
data
(),
0
,
&
error
);
if
(
!
root
)
{
int
i
=
global_info
.
sign
.
find
(
"
\r\n
sign: "
);
LOG
()
<<
"argv is not json"
;
return
0
;
}
if
(
i
==
-
1
)
return
0
;
sign
=
json_object_get
(
root
,
"sign"
);
string
tmp
=
global_info
.
sign
.
substr
(
i
+
strlen
(
"
\r\n
sign: "
),
global_info
.
sign
.
length
()
-
1
);
if
(
sign
==
NULL
||
!
json_is_string
(
sign
))
{
LOG
()
<<
"server return sign not string"
;
return
0
;
}
int
j
=
0
;
global_info
.
sign
=
string
(
json_string_value
(
sign
))
;
while
(
j
+
1
<
tmp
.
length
()
-
1
)
{
if
(
tmp
.
at
(
j
)
==
'\r'
&&
tmp
.
at
(
j
+
1
)
==
'\n'
)
break
;
++
j
;
}
global_info
.
sign
=
tmp
.
substr
(
0
,
j
);
}
return
0
;
LOG
()
<<
"compress json : "
<<
global_info
.
sign
;
json_decref
(
root
);
return
1
;
//if(!global_info.sign.empty())
//{
// int i = global_info.sign.find("\r\nsign: ");
// if(i == -1)
// return 0;
// string tmp = global_info.sign.substr(i + strlen("\r\nsign: "), global_info.sign.length() - 1);
// int j = 0;
// while(j + 1 < tmp.length() - 1)
// {
// if(tmp.at(j) == '\r' && tmp.at(j + 1) == '\n')
// break ;
// ++ j;
// }
// global_info.sign = tmp.substr(0, j);
//}
//return 0;
}
int
SendMsg
(
const
std
::
string
&
text
,
const
string
&
url
,
int
iscret
)
{
curl_global_init
(
CURL_GLOBAL_ALL
);
string
gignbuf
=
text
;
global_info
.
recvbuf
.
clear
();
CURLcode
rlt
;
...
...
@@ -1015,14 +1069,14 @@ int SendMsg(const std::string &text, const string &url, int iscret)
string
sign
;
if
(
GetRSASign
(
text
,
sign
)
==
0
)
if
(
GetRSASign
(
gignbuf
,
sign
)
==
0
)
{
global_info
.
error
=
string
(
ERROR_SIGN
);
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, string("sign:").append(sign).c_str());
}
headers
=
curl_slist_append
(
headers
,
"Content-Type:application/json;charset=utf-8"
);
headers
=
curl_slist_append
(
headers
,
"Accept:application/json"
);
...
...
@@ -1031,15 +1085,15 @@ int SendMsg(const std::string &text, const string &url, int iscret)
}
else
{
headers
=
curl_slist_append
(
headers
,
"Content-Type:
text
;charset=utf-8"
);
headers
=
curl_slist_append
(
headers
,
"Accept:
text
"
);
headers
=
curl_slist_append
(
headers
,
"Content-Type:
application/json
;charset=utf-8"
);
headers
=
curl_slist_append
(
headers
,
"Accept:
application/json
"
);
//headers = curl_slist_append(headers, "Authorization:dXBzLWNsaWVudDo2VGk4TjBXNzRyb1A=");
headers
=
curl_slist_append
(
headers
,
"Authorization: Basic dXBzLWNsaWVudDo2VGk4TjBXNzRyb1A="
);
}
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
url
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_POST
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDS
,
text
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDS
,
gignbuf
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
headers
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
GetDataForServer
);
curl_easy_setopt
(
curl
,
CURLOPT_HEADERFUNCTION
,
GetSign
);
...
...
@@ -1052,8 +1106,8 @@ int SendMsg(const std::string &text, const string &url, int iscret)
if
(
rlt
==
CURLE_OK
)
{
res
=
1
;
LOG
()
<<
"recv http head "
<<
global_info
.
sign
;
if
(
global_info
.
useRSA
==
1
&&
iscret
==
0
)
GetRealSign
();
LOG
()
<<
"recv msg from:"
<<
url
;
...
...
@@ -1194,18 +1248,18 @@ extern "C"
if
(
GetRealJson
(
req
,
std
::
string
(
request
))
==
0
)
return
0
;
char
outmsg
[
MAX_BUF_LEN
]
=
{
0
};
int
legth
=
0
;
//
char outmsg[MAX_BUF_LEN] = { 0 };
//
int legth = 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
;
}
//
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;
//
}
LOG
()
<<
"3DES Encode(base64):"
<<
outmsg
;
//
LOG() << "3DES Encode(base64):" << outmsg ;
#ifndef FM_TESTS
if
(
SendMsg
(
string
(
outmsg
)
,
global_info
.
cretserverurl
,
1
)
==
0
)
if
(
SendMsg
(
req
,
global_info
.
cretserverurl
,
1
)
==
0
)
{
LOG
()
<<
"recive data from:"
<<
global_info
.
cretserverurl
<<
" failed"
;
return
0
;
...
...
@@ -1265,7 +1319,8 @@ void testinitclient()
//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\":71,\"stationId\":\"3\",\"storeId\":\"1713\",\"transAmount\":3100,\"transId\":\"6460\",\"undiscountAmount\":0,\"ver\":1}";
//char a[] = "{\r\n \"ver\": 1,\r\n \"reqType\": 71,\r\n \"partnerId\": 1443,\r\n \"stationId\": \"1\",\r\n \"storeId\": \"12344\",\r\n \"operatorId\": \"9\",\r\n \"code\": \"adadadada\"\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
\"
: 102,
\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
}"
;
//char a[] = "{\r\n \"businessDate\": \"20170601\",\r\n \"code\": \"281345679987654321\",\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\": 102,\r\n \"stationId\": \"1\",\r\n \"storeId\": \"17607\",\r\n \"transAmount\": 29,\r\n \"transId\": \"1\",\r\n \"undiscountAmount\": 0,\r\n \"ver\": 1\r\n}";
char
a
[]
=
"{
\n
\"
ver
\"
: 1,
\n
\"
code
\"
:
\"
289006089730084695
\"
,
\n
\"
mac
\"
:
\"
C8-D3-FF-A3-D0-FE
\"
,
\n
\"
partnerOrderId
\"
:
\"
28197890622498235
\"
,
\n
\"
transId
\"
:
\"
1
\"
,
\n
\"
storeId
\"
:
\"
17607
\"
,
\n
\"
products
\"
: [
\n
{
\n
\"
salesType
\"
:
\"
Normal
\"
,
\n
\"
number
\"
: 0,
\n
\"
priceAct
\"
: 0,
\n
\"
price
\"
: 3100,
\n
\"
name
\"
:
\"
Coffee
\"
,
\n
\"
discount
\"
: 0,
\n
\"
pid
\"
:
\"
3488
\"
,
\n
\"
consume_num
\"
: 1
\n
}
\n
],
\n
\"
transAmount
\"
: 200001,
\n
\"
businessDate
\"
:
\"
20170731
\"
,
\n
\"
undiscountAmount
\"
: 0,
\n
\"
reqType
\"
: 72,
\n
\"
partnerId
\"
: 1443,
\n
\"
operatorId
\"
:
\"
1000
\"
,
\n
\"
stationId
\"
:
\"
2
\"
,
\n
\"
test
\"
:
\"
test
\"\n
}"
;
char
ls
[]
=
"0|1443|fm9999|1|01|120754391530891|END|"
;
char
ls1
[]
=
"3|1443|fm9999|1|01|120754391530891|20170717||8888|END|"
;
char
ls2
[]
=
"71|1443|fm9999|1|01|120754391530891|20170717||8888|END|"
;
...
...
@@ -1285,6 +1340,8 @@ int main()
char
storeid
[]
=
"12344"
;
char
posno
[]
=
"01"
;
GetRSACret
(
1443
,
"17607"
,
"2"
);
//TestComplementJson();
//Test_RSASign();
...
...
@@ -1312,9 +1369,9 @@ int main()
//GetRSACret(1443, storeid, posno);
//while(1)
//{
//
GetValue(a, b);
GetValue
(
a
,
b
);
//
LOG() << b;
LOG
()
<<
b
;
// Sleep(30*1000);
...
...
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