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请求的更多相关文章

  1. Socket的UDP协议在erlang中的实现

    现在我们看看UDP协议(User Datagram Protocol,用户数据报协议).使用UDP,互联网上的机器之间可以互相发送小段的数据,叫做数据报.UDP数据报是不可靠的,这意味着如果客户端发送 ...

  2. charles 抓取eclipse中的请求

    charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...

  3. web过滤器中获取请求的参数(content-type:multipart/form-data)

    1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; ...

  4. 在内核中异步请求设备固件firmware的测试代码

    在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...

  5. struts中的请求数据自动封装

    Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...

  6. 关于struts2中action请求会执行两次的问题

    关于struts2中action请求会执行两次的问题     在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...

  7. Python中http请求方法库汇总

    最近在使用python做接口测试,发现python中http请求方法有许多种,今天抽点时间把相关内容整理,分享给大家,具体内容如下所示: 一.python自带库----urllib2 python自带 ...

  8. AJAX中的请求方式以及同步异步的区别

    AJAX中的请求方式以及同步异步的区别请求方式,分为GET与POST: GET 最为常见的HTTP请求,普通上网浏览页面就是GET.GET方式的参数请求直接跟在URL后,以问号开始.(JS中用wind ...

  9. jenkins 执行可执行jar包测试中,请求乱码解决办法

    自动化脚本在eclipse中执行,没有问题.jenkins构建打包自动化脚本,在执行脚本时,遇到了脚本中发送的请求的参数为乱码,实现了如下一些解决办法: 1.设置操作系统环境JAVA_TOOL_OPT ...

随机推荐

  1. selenium 文件上传

    一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方 ...

  2. JS及相关控件

    1.radio 1)不选中任何值 2)获取选中的值 3)让某个选项选中 4)发生改变时的事件 5)让某个选项不能选 2.CheckBox 1)选中 2)取消 3.select 1)获取下拉框选中项的显 ...

  3. Descriptio Resource Path LocationType Archive for required library: 'D:/apache-maven/apache-maven-3.6.0/mavenrepository/org/springframework/spring-aspects/4.3.7.RELEASE/spring-aspects-4.3.7.RELEASE.

    eclipse创建了一个maven项目后,在导入依赖包后返现项目有个红色刺眼的感叹号,再看控制台有个Problem提示 Descriptio Resource Path LocationType Ar ...

  4. vivo 1805的usb调试模式在哪里,开启vivo 1805usb调试模式的流程

    经常我们使用安卓手机通过数据线连接上PC的时候,如果手机没有开启usb调试模式,PC则没办法成功识别我们的手机,部分软件也没办法正常使用,此情况我们需要找方法将手机的usb调试模式打开,下面我们讲解v ...

  5. lua调用不同lua文件中的函数

    a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...

  6. (详细)华为V9 DUK-AL20的usb调试模式在哪里打开的方法

    当我们使用PC通过数据线链接到安卓手机的时候,如果手机没有开启USB开发者调试模式,PC则没办法成功识别我们的手机,有时我们使用的一些功能较好的软件好比以前我们使用的一个软件引号精灵,老版本就需要打开 ...

  7. cron定时任务

    1.确认系统安装了cron rpm -aq | grep crontabs 2.认识cron时间格式 3.生成定时任务 crontab -e #进入任务命令编辑模式 30 7,12,20 * * * ...

  8. 蓝桥杯第九届省赛 sscanf(),str.c_str()函数的使用

    标题:航班时间 [问题背景]小h前往美国参加了蓝桥杯国际赛.小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”. 小h对超音速飞行感到十分恐惧.仔 ...

  9. Java集合框架相关知识整理

    1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口    Collection接口的子接口包括:Set接口和List接口    Map接口的实现类主要有:HashMap ...

  10. javascript高级程序设计第3版——第3章 基本概念