• 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]).

  • 相关阅读:
    074孤荷凌寒从零开始学区块链第74天DAPP029
    073孤荷凌寒从零开始学区块链第73天DAPP028
    iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用
    iOS开发——UI进阶篇(十六)Quartz2D实战小例子
    iOS开发——UI进阶篇(十五)Quartz2D介绍
    iOS开发——UI进阶篇(十四)modal
    iOS开发——UI进阶篇(十三)UITabBarController简单使用,qq主流框架
    iOS开发——UI进阶篇(十二)事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
    iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
    iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
  • 原文地址:https://www.cnblogs.com/weidongprefer/p/6637881.html
Copyright © 2020-2023  润新知