Commit 1dc7b824 by 李定达

1.RES支付宝接口支持;2.测试用例编写变成并测试

parent 8df13c56
......@@ -8,3 +8,4 @@ Debug/log/
*.user
Debug/
ipch/
*.log
No preview for this file type
......@@ -18,7 +18,7 @@
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>false</UseOfMfc>
......
......@@ -15,6 +15,9 @@
#define REQUEST_0 "{\r\n \"ver\": 1,\r\n \"reqType\": %s,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"operatorId\":\"%s\",\r\n \"code\":\"%s\"\r\n}"
#define REQUEST_3 "{\r\n \"ver\": 1,\r\n \"reqType\": %s,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"operatorId\":\"%s\",\r\n \"code\":\"%s\",\r\n \"businessDate\":\"%s\",\r\n \"transAmount\":\"%d\",\r\n \"transId\":\"%s\"\r\n}"
#define REQUEST_71 "{\r\n \"ver\": 1,\r\n \"reqType\": %s,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"operatorId\":\"%s\",\r\n \"code\":\"%s\",\r\n \"businessDate\":\"%s\",\r\n \"transAmount\":\"%d\",\r\n \"transId\":\"%s\"\r\n}"
#define REQUEST_72 "{\r\n \"ver\": 1,\r\n \"reqType\": %s,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"operatorId\":\"%s\",\r\n \"code\":\"%s\",\r\n \"businessDate\":\"%s\",\r\n \"transAmount\":\"%d\",\r\n \"undiscountAmount\":\"%d\",\r\n \"promotionTag\":\"%s\",\r\n \"transId\":\"%s\"\r\n}"
#define REQUEST_62 "{\r\n \"ver\": 1,\r\n \"reqType\": %s,\r\n \"partnerId\":%d,\r\n \"storeId\":\"%s\",\r\n \"stationId\": \"%s\",\r\n \"operatorId\":\"%s\",\r\n \"code\":\"%s\",\r\n \"fmId\":\"%s\",\r\n \"transId\":\"%s\",\r\n \"businessDate\":\"%s\",\r\n \"refundAmount\":\"%d\"\r\n}"
#define DES3_KEY "ABCD@#9876DFSAAWKLDEOPDD"
#define CRET_FILE_NAME "client.p12"
......
......@@ -603,22 +603,451 @@ bool Response71ToRES(const string &indata, string &outdata)
return true;
}
bool RESToRequest62(const string &indata, string &outdata)
{
int j = 0;
int tmp = 0;
Request_62 rsp;
outdata.clear();
for(int i = 0;j < 10 && i < indata.size() - 4; i ++)
{
if(indata[i] == '|')
{
rsp.data[j] = indata.substr(tmp, i - tmp);
tmp = i + 1;
j ++;
}
}
string str;
for (int i = 0; i < 10; i ++)
str.append(rsp.data[i]) ;
LOG() << "get struct : " << str;
if(rsp.data[0].empty() || rsp.data[1].empty() || rsp.data[2].empty() || rsp.data[3].empty() || rsp.data[4].empty() || rsp.data[5].empty() || rsp.data[6].empty() || rsp.data[7].empty())
{
LOG() << "error request";
return false;
}
char request[MAX_BUF_LEN] = { 0 };
sprintf_s(request, MAX_BUF_LEN, REQUEST_62, rsp.data[0].data(), atoi(rsp.data[1].data()), rsp.data[2].data(), rsp.data[3].data(), rsp.data[4].data(), rsp.data[5].data(), rsp.data[6].data(), rsp.data[7].data(), rsp.data[8].data(), atoi(rsp.data[9].data()));
LOG() << "get reqType 62 request : " << request;
return true;
}
void AddProd(const string &indata, json_t *root)
{
int i = 0;
int j = 0;
int k = 0;
int tmp = 0;
json_t *prdarray = NULL;
for(i = 0;j < 11 && i < indata.size() - 4; i ++)
{
if(indata[i] == '|')
j ++;
}
tmp = i;
if(i == indata.size() - 4)
return ;
prdarray = json_array();
for(;i < indata.size() - 4; i ++)
{
Product prd;
for(int x = 0; x < 5;)
{
if(i >= indata.size() - 4)
break ;
if(indata[i] == '|')
{
prd.data[x] = indata.substr(tmp, i - tmp);
tmp = i + 1;
++ x;
}
i ++;
}
json_t *prdobj = json_object();
json_object_set(prdobj, "consumeNum", json_integer(atoi(prd.data[0].c_str())));
json_object_set(prdobj, "pid", json_string(prd.data[1].c_str()));
json_object_set(prdobj, "name", json_string(prd.data[2].c_str()));
json_object_set(prdobj, "salesType", json_string(prd.data[3].c_str()));
json_object_set(prdobj, "price", json_integer(atoi(prd.data[4].c_str())));
json_array_append(prdarray, prdobj);
}
if(prdarray != NULL)
json_object_set(root, "products", prdarray);
}
bool RESToRequest72(const string &indata, string &outdata)
{
int j = 0;
int tmp = 0;
Request_72 rsp;
outdata.clear();
for(int i = 0;j < 11 && i < indata.size() - 4; i ++)
{
if(indata[i] == '|')
{
rsp.data[j] = indata.substr(tmp, i - tmp);
tmp = i + 1;
j ++;
}
}
string str;
for (int i = 0; i < 11; i ++)
str.append(rsp.data[i]) ;
LOG() << "get struct : " << str;
if(rsp.data[0].empty() || rsp.data[1].empty() || rsp.data[2].empty() || rsp.data[3].empty() || rsp.data[4].empty() || rsp.data[5].empty() || rsp.data[6].empty() || rsp.data[7].empty())
{
LOG() << "error request";
return false;
}
char request[MAX_BUF_LEN] = { 0 };
sprintf_s(request, MAX_BUF_LEN, REQUEST_72, rsp.data[0].data(), atoi(rsp.data[1].data()), rsp.data[2].data(), rsp.data[3].data(), rsp.data[4].data(), rsp.data[5].data(), rsp.data[6].data(), atoi(rsp.data[7].data()), atoi(rsp.data[8].data()), rsp.data[9].data(), rsp.data[10].data());
LOG() << "get reqType main 72 request : " << request;
//---------------------------------------------------------------
json_t *root;
json_error_t error;
outdata.clear();
rsp.init();
root = json_loads(request, 0, &error);
if(!root)
{
LOG() << "argv is not json";
return false;
}
AddProd(indata, root);
outdata = string(json_dumps(root, JSON_COMPACT));
LOG() << "get request72 with product:" << outdata;
json_decref(root);
return true;
}
bool Response72ToRES(const string &indata, string &outdata)
{
json_t *root;
json_error_t error;
Response_72 rsp;
outdata.clear();
rsp.init();
root = json_loads(indata.data(), 0, &error);
if(!root)
{
LOG() << "argv is not json";
return false;
}
//statusCode
json_t *statusCode = json_object_get(root, "statusCode");
if (statusCode == NULL || !json_is_integer(statusCode))
{
LOG() << "statusCode error";
json_decref(root);
return false;
}
{
char tmpbuf[20] = {0};
itoa(json_integer_value(statusCode), tmpbuf, 10);
rsp.data[0] = string(tmpbuf);
}
//message
json_t *message = json_object_get(root, "message");
if (message == NULL || !json_is_string(message))
{
LOG() << "message error";
json_decref(root);
return false;
}
rsp.data[1] = string(json_string_value(message));
//type
json_t *type = json_object_get(root, "type");
if (type == NULL || !json_is_integer(type))
{
LOG() << "type error";
}else
{
char tmpbuf[20] = {0};
itoa(json_integer_value(type), tmpbuf, 10);
rsp.data[2] = string(tmpbuf);
}
//payAccount
json_t *payAccount = json_object_get(root, "payAccount");
if (payAccount != NULL || json_is_string(payAccount))
{
rsp.data[3] = string(json_string_value(payAccount));
}
//payTransId
json_t *payTransId = json_object_get(root, "payTransId");
if (payTransId != NULL || json_is_string(payTransId))
{
rsp.data[4] = string(json_string_value(payTransId));
}
//fmId
json_t *fmId = json_object_get(root, "fmId");
if (fmId != NULL && json_is_string(fmId))
{
rsp.data[5] = json_string_value(fmId);
}
//paymentMethodCode
json_t *paymentMethodCode = json_object_get(root, "paymentMethodCode");
if (paymentMethodCode != NULL && json_is_string(paymentMethodCode))
{
rsp.data[6] = json_string_value(paymentMethodCode);
}
//paymentMethod
json_t *paymentMethod = json_object_get(root, "paymentMethod");
if (paymentMethod != NULL || json_is_string(paymentMethod))
{
rsp.data[7] = json_string_value(paymentMethod);
}
//transAmount
json_t *transAmount = json_object_get(root, "transAmount");
if (transAmount != NULL || json_is_string(transAmount))
{
rsp.data[8] = json_integer_value(transAmount);
}
//priceAct
json_t *priceAct = json_object_get(root, "priceAct");
if (priceAct != NULL || json_is_integer(priceAct))
{
rsp.data[8] = json_integer_value(priceAct);
}
//merchantDiscount
json_t *merchantDiscount = json_object_get(root, "merchantDiscount");
if (merchantDiscount != NULL || json_is_integer(merchantDiscount))
{
rsp.data[10] = json_integer_value(merchantDiscount);
}
//platformDiscount
json_t *platformDiscount = json_object_get(root, "platformDiscount");
if (platformDiscount != NULL || json_is_integer(platformDiscount))
{
rsp.data[11] = json_integer_value(platformDiscount);
}
//ext
bool _extisobject = false;
json_t *ext = json_object_get(root, "ext");
if(ext != NULL && json_is_object(ext))
_extisobject = true;
//printRow
if(_extisobject)
{
json_t *printRow = json_object_get(ext, "printRow");
if (printRow != NULL && json_is_integer(printRow))
{
rsp.data[12] = json_integer_value(printRow);
}
}
//print
if(_extisobject)
{
json_t *print = json_object_get(ext, "print");
if (print != NULL && json_is_string(print))
{
rsp.data[13] = json_string_value(print);
}
}
for(int i = 0; i < 14; i ++)
outdata.append(rsp.data[i]).append("|");
outdata.append("END|");
LOG() << "get RES Data : " << outdata;
json_decref(root);
return true;
}
bool Response62ToRES(const string &indata, string &outdata)
{
json_t *root;
json_error_t error;
Response_71 rsp;
outdata.clear();
rsp.init();
root = json_loads(indata.data(), 0, &error);
if(!root)
{
LOG() << "argv is not json";
return false;
}
//statusCode
json_t *statusCode = json_object_get(root, "statusCode");
if (statusCode == NULL || !json_is_integer(statusCode))
{
LOG() << "statusCode error";
json_decref(root);
return false;
}
{
char tmpbuf[20] = {0};
itoa(json_integer_value(statusCode), tmpbuf, 10);
rsp.data[0] = string(tmpbuf);
}
//message
json_t *message = json_object_get(root, "message");
if (message == NULL || !json_is_string(message))
{
LOG() << "message error";
json_decref(root);
return false;
}
rsp.data[1] = string(json_string_value(message));
//fmId
json_t *fmId = json_object_get(root, "fmId");
if (fmId != NULL && json_is_string(fmId))
{
rsp.data[2] = json_string_value(fmId);
}
//ext
bool _extisobject = false;
json_t *ext = json_object_get(root, "ext");
if(ext != NULL && json_is_object(ext))
_extisobject = true;
//printRow
if(_extisobject)
{
json_t *printRow = json_object_get(ext, "printRow");
if (printRow != NULL && json_is_integer(printRow))
{
rsp.data[3] = json_integer_value(printRow);
}
}
//print
if(_extisobject)
{
json_t *print = json_object_get(ext, "print");
if (print != NULL && json_is_string(print))
{
rsp.data[4] = json_string_value(print);
}
}
for(int i = 0; i < 5; i ++)
outdata.append(rsp.data[i]).append("|");
outdata.append("END|");
LOG() << "get RES Data : " << outdata;
json_decref(root);
return true;
}
bool RESToJson(const string &indata, string &outdata)
{
_reqType = -1;
if(indata.find_first_of("0") == 0)
if(indata.find("0") == 0)
{
_reqType = 0;
return RESToRequest0(indata, outdata);
}
if(indata.find_first_of("71") == 0)
if(indata.find("71") == 0)
{
_reqType = 71;
return RESToRequest71(indata, outdata);
}
if(indata.find_first_of("3") == 0)
if(indata.find("72") == 0)
{
_reqType = 72;
return RESToRequest72(indata, outdata);
}
if(indata.find("62") == 0)
{
_reqType = 62;
return RESToRequest62(indata, outdata);
}
if(indata.find("3") == 0)
{
_reqType = 3;
return RESToRequest3(indata, outdata);
......@@ -640,6 +1069,18 @@ bool JsonToRES(const string &indata, string &outdata)
return Response71ToRES(indata, outdata);
}
if(_reqType == 62)
{
_reqType = -1;
return Response62ToRES(indata, outdata);
}
if(_reqType == 72)
{
_reqType = -1;
return Response72ToRES(indata, outdata);
}
_reqType = -1;
return Response3ToRES(indata, outdata);
}
\ No newline at end of file
......@@ -34,6 +34,74 @@ typedef struct
typedef struct
{
string data[11];
////1
//string reqType;
////2
//string partnerId;
////3
//string storeId;
////4
//string posNo;
////5
//string optId;
////6
//string code;
////7
//string businessData;
////8
//string amount;
////9
//string unamount;
////10
//string tuiguangbh
////11
//string transid;
inline void init()
{
for(int i = 0; i < 11; i ++)
data[i].clear();
}
} Request_72;
typedef struct
{
string data[10];
////1
//string reqType;
////2
//string partnerId;
////3
//string storeId;
////4
//string posNo;
////5
//string optId;
////6
//string code;
////7
//string fmid;
////8
//string transid;
////9
//string businessdata;
////10
//string amount;
inline void init()
{
for(int i = 0; i < 10; i ++)
data[i].clear();
}
} Request_62;
typedef struct
{
string data[9];
////1
//string reqType;
......@@ -149,11 +217,92 @@ typedef struct
typedef struct
{
string data[2];
////1返回查询结果状态码
string data[14];
//1返回查询结果状态码
//string statusCode;
////2状态码描述
//string statusCodeMSG;
////3券类型
//string type;
////4支付账号
//string account;
////5第三方交易号
//string threadtransid;
////6非码交易号
//string fmid;
////7支付渠道号
//string payCode;
////8支付渠道名称
//string payCodeName;
////9总交易金额
//string amount;
////10积分兑换金额
//string jfdh;
////11商户补贴金额
//string shbtje;
////12平台补贴金额
//string ptbtje;
////13小票行数
//string num;
////14小票打印
//string message;
inline void init()
{
for(int i = 0; i < 14; i ++)
data[i].clear();
}
} Response_72;
typedef struct
{
string data[5];
//1返回查询结果状态码
//string statusCode;
////2状态码描述
//string statusCodeMSG;
////3非码交易号
//string fmid;
////4小票行数
//string num;
////5小票打印
//string message;
inline void init()
{
for(int i = 0; i < 5; i ++)
data[i].clear();
}
} Response_62;
typedef struct
{
string data[5];
////1商品数量
//string num;
////2商品编号
//string pid;
////3商品名称
//string prdname;
////4商品类型
//string type;
////5商品单价
//string price;
inline void init()
{
for(int i = 0; i < 5; i ++)
data[i].clear();
}
} Product;
typedef struct
{
string data[2];
inline void init()
{
......
......@@ -21,7 +21,7 @@
int _reqType = -1;
//#define FM_TEST
#define FM_TEST
//#define FM_TESTS
#include "testdataprocess.h"
......@@ -1242,10 +1242,10 @@ void testCheckRollbackData()
int main()
{
_reqType = 3;
_reqType = 62;
//TestRESToJson();
//TestJsonToRES();
TestJsonToRES();
char storeid[] = "12344";
char posno[] = "01";
......@@ -1263,7 +1263,7 @@ int main()
char b[MAX_BUF_LEN];
RESGetValue(ls1, b);
//RESGetValue(ls1, b);
//char c[MAX_BUF_LEN] = { 0 };
......
......@@ -13,19 +13,25 @@ char buf[] = "{\n \"ext\": {\n \"hint\": \"shiping85zheyouhuiquan 7310183410
static char ls[] = "0|1443|0001|FOE13|01|123456789987654321|END|";
static char ls1[] = "3|1443|0001|FOE13|01|123456789987654321|20170714||8888|END|";
static char ls2[] = "71|1443|0001|FOE13|01|123456789987654321|20170714||8888|END|";
static char ls3[] = "72|1443|0001|FOE13|01|123456789987654321|20170714|300|0|0|8888|1|123|dadawan|FREE|300|1||dasawan||300|END|";
static char ls4[] = "62|1443|0001|FOE13|01|123456789987654321|fm123123123123|8888|20170714|300|END|";
void TestRESToJson()
{
string str(ls);
string str1(ls1);
string str2(ls2);
string str3(ls3);
string str4(ls4);
string out;
RESToJson(str, out);
RESToJson(str1, out);
RESToJson(str2, out);
RESToJson(str3, out);
RESToJson(str4, out);
}
......
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