Commit 30ab19b4 by 李定达

1.支付宝二期完成;2.调整签名到报文中;3.添加mac字段测试完成

parent 1745af69
No preview for this file type
......@@ -392,6 +392,9 @@ public:
json_object_foreach(root, key, value)
{
//去除签名字段
if(strcmp("sign", key) == 0)
continue ;
keys[i] = std::string(key);
i++ ;
}
......
......@@ -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"
......
......@@ -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())
{
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);
json_t *root, *sign = NULL;
json_error_t error;
char *tmp;
int j = 0;
root = json_loads(global_info.recvbuf.data(), 0, &error);
while(j + 1 < tmp.length() - 1)
if(!root)
{
if(tmp.at(j) == '\r' && tmp.at(j + 1) == '\n')
break ;
++ j;
}
global_info.sign = tmp.substr(0, j);
LOG() << "argv is not json";
return 0;
}
sign = json_object_get(root, "sign");
if(sign == NULL || !json_is_string(sign))
{
LOG() << "server return sign not string";
return 0;
}
global_info.sign = string(json_string_value(sign));
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);
......
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