Step1:脚本注释
/*
- 脚本编写信息描述:
- 项目名称:
- 脚本功能:
- 版 本 号:
- 交易路径:
- 编码语言:
- 开发协议:
- 作 者:
- 时 间:
*/
#include “lrs.h”
Step1定义变量
Action()
{
int result = -1; // 存放建立连接的结果
char mystr[8]; // 存放socket连接句柄名称的字符数组
char ESBsendbuf[960]; // 存放整个报文数组
char *ReturnData = NULL; // 存放返回报文的指针
char sendlen[9]; // 存放发送报文长度的字符串数组
// 初始化字符数组
memset(mystr, 0 , sizeof(mystr));
memset(ESBsendbuf, 0, sizeof(ESBsendbuf));
memset(sendlen, 0, sizeof(sendlen));
// 组报文
sprintf(ESBsendbuf, "%s", lr_eval_string("00000825"
"{\"BODY\": "
"{\"TERMINAL_ID\": \"20000007\", " // ATM终端号
"\"TRAN_CCY\": \"CNY\", "
"\"BOP_INLAND_OFFSHORE\": \"1\", "
"\"BASE_ACCT_NO\": \"<P_AcctNo>\", " // 卡号
"\"PASSWORD\": \"111111\", "
"\"CHANNEL\": \"02\", "
"\"CHECK_OPTION\": \"10010\", "
"\"TRAN_AMT\": \"0.01\", "
"\"CUP_DATE\": \"<P_Date>\", "
"\"TRACK2\": \"6231207640110165474=28072202960000000\", " // 二磁道信息
"\"TRAN_TYPE\": \"AC01\", "
"\"CUP_AREA_CODE\": \"05438716\"}, " // 受理方标识码
"\"LOCAL_HEAD\": {}, "
"\"APP_HEAD\": "
"{\"TOTAL_FLAG\": \"E\", "
"\"PGUP_OR_PGDN\": \"1\", "
"\"TOTAL_NUM\": \"-1\", "
"\"CURRENT_NUM\": \"0\"}, "
"\"SYS_HEAD\": {\"USER_LANG\": \"CHINESE\", "
"\"SERVICE_CODE\": \"MbsdCore\", "
"\"SOURCE_TYPE\": \"40\", "
"\"SEQ_NO\": \"UPY<P_DateTime><P_VuserId><P_Rand6><P_IterationNum>\", "
"\"MESSAGE_TYPE\": \"1000\", "
"\"BRANCH_ID\": \"<P_telBranchId>\", " // 柜员机构号
"\"USER_ID\": \"<P_VmUserId>\", " // 虚拟柜员号
"\"PROGRAM_ID\": \"CD\", "
"\"MESSAGE_CODE\": \"6009\", "
"\"TRAN_TIMESTAMP\": \"<P_Time>\", "
"\"TRAN_MODE\": \"ONLINE\", "
"\"SOURCE_BRANCH_NO\": \"AGREEAFE.nodeafe.RZPK\", "
"\"TRAN_DATE\": \"<P_Date>\"}}"));
sprintf(sendlen, "%008d", strlen(ESBsendbuf)-8);
memcpy(ESBsendbuf, sendlen, 8);
sprintf(mystr, "%s", lr_eval_string("ESB<P_SockID>"));
Step3 创建连接
result = lrs_create_socket(mystr, "TCP", "RemoteHost=7.0.6.55:20005", LrsLastArg); // 建立socket长连接
lr_start_transaction("ESB_核心_ATM本行取款");
Step4将报文放到缓存中
if( 0 == result){
lrs_set_send_buffer(mystr, ESBsendbuf, strlen(ESBsendbuf));
Step5发送报文
lrs_send(mystr, "buf1" , LrsLastArg); // 发送报文
lrs_set_recv_timeout(10,0); // 设置接受报文的超时时间
Step6接收返回报文
lrs_receive(mystr, "buf2", "Flags=MSG_PEEK", LrsLastArg); // 接受返回报文
ReturnData = lrs_get_received_buffer(mystr, 0, -1, NULL); // 获取返回报文
Step7检查点判断
if( strlen(ReturnData) < 8 ){
lr_end_transaction("ESB_核心_ATM本行取款",LR_STOP); // 没有接受到报文返回,事务结束,标记为STOP
}else{
lrs_save_searched_string(mystr, NULL, "ReturnCode", "LB/BIN=RET_CODE\":\"", "RB/BIN=\"", 1, 0 ,-1); // 获取返回的ReturnCode码
if( strcmp( "000000", lr_eval_string("<ReturnCode>") ) == 0 ){
lr_end_transaction("ESB_核心_ATM本行取款",LR_PASS); // 事务结束,返回PASS
}else{
lr_end_transaction("ESB_核心_ATM本行取款",LR_FAIL); // 事务结束,返回FAIL
lrs_save_searched_string(mystr, NULL, "ReturnMsg", "LB/BIN=RET_MSG\":\"", "RB/BIN=\"", 1, 0 ,-1); // 获取返回的ReturnCode码
lr_convert_string_encoding(lr_eval_string("<ReturnMsg>"), LR_ENC_UTF8, NULL,"ErrorMsg");
lr_error_message("交易失败,错误信息【%s】,错误码【%s】,卡号【%s】",lr_eval_string("<ErrorMsg>"),lr_eval_string("<ReturnCode>"), lr_eval_string("<P_AcctNo>"));
}
}
Step8关闭socket
lrs_close_socket( mystr ); // 关闭socket
ReturnData = NULL; // 释放ReturnData空间变量
}else{
lr_error_message("创建socket连接失败,错误代码[%d]", result ); // 创建socket失败
lr_end_transaction("ESB_核心_ATM本行取款", LR_STOP); // 事务结束返回STOP
}
return 0;
}