erlang中http请求
1..app文件中
{application,backend,[
{description,"ebank backend"},
{vsn,1.0},
{modules,[]},
{applications,[kernel,stdlib,yaws]},
{registered,[backend]},
{env,[{env,development}]},
{mod,backend_bootstrap},
{controllers,[ {{"backend","mbu"},{backend, mbu},[{decrypt, false}, {verify, false}]}
]},
{plugins,[]}]}.
2.erl文件中
handle_xmlResult(Xml_Res)->
{dict,_,_,_,_,_,_,_,Context} = Xml_Res,
io:format("==Xml_Res==========~p~n",[Xml_Res]),
{{[],[],[],[],[],[],[],[],[],[Context1],[],[],[],[],[],[]}} = Context,
Context2 = Context1 -- ["<?xml version"],
Context3 = "<?xml version = " ++ Context2,
Context3.
%%人到人被扫MBU004 C2B附加处理
mbu(Arg) ->
Xml_Res = ewp_params:from_yaws_arg(Arg),
try
Context3 = handle_xmlResult(Xml_Res),
Msg1 = list_to_binary([Context3]) ,
log4erl:info(wailian_client, Msg1),
Xml_ResUT0 = backend_msg:utf8_to_gbk(Context3),
Xml_ResUT = backend_msg:gbk_to_utf8(Xml_ResUT0),
Rx = erlang:binary_to_list(Xml_ResUT),
Res = xml_eng:xml_to_term(Rx),
Xml_ResBody = proplists:get_value('Body', proplists:get_value('Agw', Res)),
ReqType = proplists:get_value('reqType', Xml_ResBody,undefined),
case ReqType of
"0230000903" ->
mbu004(Xml_ResBody);
"0250000903" ->
mbu005(Xml_ResBody);
%% "0000000903" -> mbu006(Xml_ResBody);
_ ->
no_result end
catch
_A:_B ->
?ewp_err("=======REQUEST_SAOF_FAIL===========================~p~n~p~n",[_A,_B]),
throw(?REQUEST_SAOF_FAIL)
end.
mbu004(Xml_ResBody) ->
QrNo = proplists:get_value('qrNo', Xml_ResBody),
%%Xml_lists = proplists:get_value('currencyCode', Xml_ResBody),
TxnAmt0 = proplists:get_value('txnAmt', Xml_ResBody),
TxnAmt = list_to_integer(TxnAmt0)/100,
VOUCHERNUM = proplists:get_value('voucherNum', Xml_ResBody),
backend_db:update("update MY_PEOPLECODE_STATUSLOGS set money = :1, status = : 2, VOUCHERNUM = : 3 where qrNo = : 4 and tran_time = to_date(sysdate) ",[TxnAmt, "01", VOUCHERNUM, QrNo]),
Res = "<?xml version='1.0' encoding='utf-8'?><Agw><Head direction='response'><Trade>MBU004</Trade><Channel>05095</Channel><KeyGenerator>001234</KeyGenerator><ErrorCode>00</ErrorCode><ErrorMsg>成功</ErrorMsg></Head><Body><version>1.0.0</version><reqType>0230000903</reqType><respCode></respCode><respMsg></respMsg></Body></Agw>",
ewp_render_util:render_xml(Res).
mbu005(Xml_ResBody) ->
OrigReqType = proplists:get_value('origReqType', Xml_ResBody),
OrigRespCode = proplists:get_value('origRespCode', Xml_ResBody),
OrigRespMsg = proplists:get_value('origRespMsg', Xml_ResBody),
MerName = proplists:get_value('merName', Xml_ResBody),
VoucherNum = proplists:get_value('voucherNum', Xml_ResBody),
QrNo = proplists:get_value('qrNo', Xml_ResBody),
%%交易
case OrigReqType of
"0310000903" -> %%消费交易
case OrigRespCode of
"00" ->
backend_db:update("update MY_PEOPLECODE_STATUSLOGS set merName = : 1, VoucherNum = : 2 , status = : 3, OrigRespCode = : 4, OrigRespMsg = : 5, OrigReqType = : 6 where qrNo = : 7 and tran_time = to_date(sysdate)", [MerName,VoucherNum,"05",OrigRespCode,OrigRespMsg,OrigReqType,QrNo]);
_ ->
backend_db:update("update MY_PEOPLECODE_STATUSLOGS set merName = : 1, VoucherNum = : 2 , status = : 3, OrigRespCode = : 4, OrigRespMsg = : 5, OrigReqType = : 6 where qrNo = : 7 and tran_time = to_date(sysdate)", [MerName,VoucherNum,"09",OrigRespCode,OrigRespMsg,OrigReqType,QrNo])
end;
_ -> %%消费冲正交易0320000903、消费撤销交易0330000903、退货交易0340000903等
backend_db:update("update MY_PEOPLECODE_STATUSLOGS set merName = : 1, VoucherNum = : 2 , status = : 3, OrigRespCode = : 4, OrigRespMsg = : 5, OrigReqType = : 6 where qrNo = : 7 and tran_time = to_date(sysdate)", [MerName,VoucherNum,"09",OrigRespCode,OrigRespMsg,OrigReqType,QrNo])
end,
%%取值如果是报错,存数据库应该是错误码
Res = "<?xml version='1.0' encoding='utf-8'?><Agw><Head direction='response'><Trade>MBU005</Trade><Channel>05095</Channel><KeyGenerator>001234</KeyGenerator><ErrorCode>00</ErrorCode><ErrorMsg>成功</ErrorMsg></Head><Body><version>1.0.0</version><reqType>0250000903</reqType><respCode></respCode><respMsg></respMsg></Body></Agw>",
ewp_render_util:render_xml(Res).
%% Created: 2017-3-3
%% Description: http请求对外接口测试
test_interface(RequestBody,Interface) ->
Host = "127.0.0.1",
Port = "4003",
try
Url = "http://" ++ Host ++ ":" ++ Port ++ "/backend/" ++ Interface,
Request = {Url, "", "", RequestBody},
ewp_http_client:request({post, Request, [{timeout, 75000}],[{body_format, binary}]}),
ok
catch
_:_->
?ewp_err("request error:~p~n",["Error to delete file."])
end.
%% Created: 2017-3-3
%% Description: 异步http请求我方接口,测试方法 backend_controller:test_mbu().
test_mbu()->
%%QrNoTest= "123456", %%lists:flatten(io_lib:format("~6.10.0B",[random:uniform(999999)])),
%%RequestBody1 = "<?xml version='1.0' encoding='utf-8'?><Agw><Head direction='response'><Trade>MBU004</Trade><Channel>05095</Channel><KeyGenerator>001234</KeyGenerator><ErrorCode>0000</ErrorCode><ErrorMsg>交易成功</ErrorMsg></Head><Body><version>1.0.0</version><reqType>0230000903</reqType><qrNo>" ++ QrNoTest ++ "</qrNo><currencyCode></currencyCode><txnAmt>299</txnAmt><payerInfo></payerInfo><transAddnInfo></transAddnInfo><reqReserved></reqReserved><voucherNum></voucherNum><upReserved></upReserved><encryptCertId></encryptCertId></Body></Agw>",
RequestBody2 = "<?xml version='1.0' encoding='UTF-8'?><Agw><Head direction='request'><Trade>MBU005</Trade><ErrorMsg></ErrorMsg></Head><Body><version>1.0.0</version><signature>rrOGNTufHIwmo15Anh94xI7EZ UMMpp/mr6w4Q72ugAYurVp/xgKXzc9SZquYFMYNvZfhGtQ IhknD OW/PV5kbEHPhIgkWipH2u5nMQpQQV5YcpYtCQqvulRFb/EAsd6ObH2oQQXfVduQbihZYm6VzAHJYrvD1cnh3r9/14RBWU6jBCOTCv0NBOAluQxXFvLxJtIVqLzFWqUkngKoY4RJG2b7lqI2fkQCFDmRnOi 7THZoQkEHp4LuI/JHtCFcj/E9 5GU8KZYj0RWE8fmBBb9ner/6lQTUTJ5yL0KVobVdjyNWb1k1nnLEna542W6lZoOHCSXBbCJK6z7R3yigUQ</signature><certId>68759585097</certId><reqType>0250000903</reqType><qrNo>6222806305983432309</qrNo><currencyCode>156</currencyCode><txnAmt>30000</txnAmt><origRespCode>61</origRespCode><origRespMsg>输入的卡号无效,请确认后输入</origRespMsg><merId>777290058135880</merId><merCatCode>5811</merCatCode><merName>商户名称</merName><termId>49000002</termId><voucherNum>20170314381647956089</voucherNum><settleKey></settleKey><settleDate></settleDate><reqReserved>01</reqReserved></Body></Agw>",
_A = test_interface(RequestBody2,"mbu").
%%RequestBody2 = "<?xml version='1.0' encoding='utf-8'?><Agw><Head direction='response'><Trade>MBU005</Trade><Channel>05095</Channel><KeyGenerator>001234</KeyGenerator><ErrorCode>0000</ErrorCode><ErrorMsg>交易成功</ErrorMsg></Head><Body><version>1.0.0</version><reqType>0250000903</reqType><origReqType></origReqType><qrNo>" ++ QrNoTest ++ "</qrNo><currencyCode></currencyCode><txnAmt></txnAmt><origRespCode></origRespCode><origRespMsg></origRespMsg><merId></merId><merCatCode></merCatCode>okname<merName></merName><termId></termId><voucherNum>123456</voucherNum><settleKey></settleKey><settleDate></settleDate><reqReserved></reqReserved></Body></Agw>",
%%B = test_interface(RequestBody2,"mbu"),
%%io:format("B=============~p~n",[B]).
erlang中http请求的更多相关文章
- Socket的UDP协议在erlang中的实现
现在我们看看UDP协议(User Datagram Protocol,用户数据报协议).使用UDP,互联网上的机器之间可以互相发送小段的数据,叫做数据报.UDP数据报是不可靠的,这意味着如果客户端发送 ...
- charles 抓取eclipse中的请求
charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...
- web过滤器中获取请求的参数(content-type:multipart/form-data)
1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; ...
- 在内核中异步请求设备固件firmware的测试代码
在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...
- struts中的请求数据自动封装
Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
- Python中http请求方法库汇总
最近在使用python做接口测试,发现python中http请求方法有许多种,今天抽点时间把相关内容整理,分享给大家,具体内容如下所示: 一.python自带库----urllib2 python自带 ...
- AJAX中的请求方式以及同步异步的区别
AJAX中的请求方式以及同步异步的区别请求方式,分为GET与POST: GET 最为常见的HTTP请求,普通上网浏览页面就是GET.GET方式的参数请求直接跟在URL后,以问号开始.(JS中用wind ...
- jenkins 执行可执行jar包测试中,请求乱码解决办法
自动化脚本在eclipse中执行,没有问题.jenkins构建打包自动化脚本,在执行脚本时,遇到了脚本中发送的请求的参数为乱码,实现了如下一些解决办法: 1.设置操作系统环境JAVA_TOOL_OPT ...
随机推荐
- snmp模拟器snmpsid使用
snmpsim使用 安装 pip install snmpsim 简单使用 生成snmpwalk文件: snmpwalk -v2c -c 'password' -ObentU 218.200.x.15 ...
- 每天一套题打卡|河南省第十届ACM/ICPC
A.谍报分析 题意:请你编程,快速统计出频率高的前十个单词. 思路:字符串输入,map哈希表map<string,int >记录每个单词出现的次数,pair重载优先级 #include&l ...
- js的eval代码快速解密
有一段js代码内容如下: eval(function(E,I,A,D,J,K,L,H){function C(A)后面内容省略... 解密可以采用如下方法: 方法一: 打开谷歌浏览器,按F12,在Co ...
- Docker Swarm Mode 学习笔记(聊聊 replicas)
在 Swarm 集群中, 创建服务时可以通过设置 --replicas 参数来指定此服务在工作节点上运行的任务数. 示例 这里我们来创建一个 nginx 服务作为示例: version: '3' se ...
- ng/cli new skip install and do not create a folder
ng new myApp --skip-install --directory ./
- wireshark基础学习—第四部分wireshark过滤器总结
这两天一直在熟悉wireshark的过滤器语法规则,以前也接触过这个工具,但只是学校老师教的如何去选择一个接口进行抓取,以及如何去分析一个包的数据.可惜当时对此也没有过多深入.对于我当前,并未接触太多 ...
- memcached、cookie、session
Memcached(一个高性能的分布式的内存对象缓存系统) 可用来分担数据库的压力.通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像.视频.文件.以及数据库 ...
- Redis5.0+哨兵模式+Keepalived实现高可用
Redis主备配置 原理: 从服务器向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中.在数据持 ...
- Pycharm快捷键设置(鼠标滚动控制字体大小)
一.pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) ...
- 【Oracle】【9】阅读oracle执行计划
正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...