SAP EPIC 银企直连
大部分银行用的是Http 接口,可以直接在SM59中创建 到外部服务器的HTTP连接即可与银行前置机通信,快速进行银企直连接口开发。

少部分银行用的是Socket (农业银行,南京银行等),这时有2种方式:

  • JAVA 把Socket 封装成Http,然后ABAP调用;
  • ABAP直接调用Socket;

可根据项目实际情况灵活选择。一般情况建议采用SAP标准的EPIC 银企直连解决方案,稳定可靠,开发工作量少,大大降低实施成本。

1.3.1关于通讯方式

ERP与ICT之间的交易数据包都采用TCP/IP协议的Socket同步短连接方式。
Socket 方式中报文结构为“包头+数据包”。包头固定为7个字节长,第1字节为是否加密标志(0-不加密,1-加密)。后6个字节是数据包的长度,即将报文长度直接转为字符串存储,长度不足6位则右边用空格补足,比如:“1234 ”。比如汇兑的长度为1234字节的数据包,其包头为“01234 ”共7位,其中数据包长度包含加密包标志位。由于加密需要双方约定专门的加密算法,因此一般ERP送的加密标志都为0-不加密。

WebSocket Communication with ABAP Push Channel using Text Messages

Open WebSocket

Send message to APC

Close WebSocket

If the form field amc of the URL contains "x", an opened WebSocket receives text messages from the ABAP Messaging Channel DEMO_AMC.
Such messages are then sent in the APC handler class but can also be sent by program DEMO_SEND_AMC.
The program DEMO_RECEIVE_AMC can receive text messages sent by the APC handler class.

If you send the message get handle, you will receive the connection attach handle of the APC-server.

1 REPORTdemo_apc_tcp_client.2  
3 CLASS apc_handler DEFINITIONFINAL .4   PUBLIC SECTION.5     INTERFACESif_apc_wsp_event_handler.6     DATA       message TYPE string.7 ENDCLASS.8  
9 CLASS apc_handler IMPLEMENTATION.10   METHODif_apc_wsp_event_handler~on_open.11   ENDMETHOD.12  
13   METHODif_apc_wsp_event_handler~on_message.14     TRY.15         message = i_message->get_text( ).16       CATCH cx_apc_error INTO DATA(apc_error).17         message = apc_error->get_text( ).18     ENDTRY.19   ENDMETHOD.20  
21   METHODif_apc_wsp_event_handler~on_close.22     message = 'Connection closed!'.23   ENDMETHOD.24  
25   METHODif_apc_wsp_event_handler~on_error.26   ENDMETHOD.27 ENDCLASS.28  
29 CLASS apc_demo DEFINITION.30   PUBLIC SECTION.31     CLASS-METHODSmain.32 ENDCLASS.33  
34 CLASS apc_demo IMPLEMENTATION.35   METHODmain.36     DATA(tcp_server) = `C:\ncat\ncat.exe`.37     DATA(ip_adress)  = cl_gui_frontend_services=>get_ip_address( ).38     DATA(port)       = `12345`.39     DATA(terminator) =`0A`.40     DATA(msg)        = `Hello TCP, answer me!`.41  
42     cl_demo_input=>new(43       )->add_text(44 `For the TCP server, download the freely available NCAT.EXE`45       )->add_field( CHANGING field =tcp_server46       )->add_field( CHANGING field =ip_adress47       )->add_field( CHANGING field =port48       )->add_field( CHANGING field =terminator49       )->add_field( CHANGING field =msg50       )->request( ).51  
52     "Server
53     IF cl_gui_frontend_services=>file_exist(54          file = tcp_server ) IS INITIAL.55       cl_demo_output=>display( 'TCP Server not found!').56       LEAVE PROGRAM.57     ENDIF.58     cl_gui_frontend_services=>execute(59     EXPORTING
60       application =`cmd.exe`61       parameter  =  `/c ` && tcp_server &&
62                    ` -l ` && ip_adress && ` -p ` &&port ).63     WAIT UP TO 1SECONDS.64  
65     TRY.66         DATA(event_handler) = NEWapc_handler( ).67  
68         "Client
69         DATA(client) = cl_apc_tcp_client_manager=>create(70           i_host   =ip_adress71           i_port  =port72           i_frame =VALUE apc_tcp_frame(73             frame_type =
74               if_apc_tcp_frame_types=>co_frame_type_terminator75             terminator =
76 terminator )77           i_event_handler =event_handler ).78  
79         client->connect( ).80  
81         "Send mesasage from client
82         DATA(message_manager) =CAST if_apc_wsp_message_manager(83           client->get_message_manager( ) ).84         DATA(message) =CAST if_apc_wsp_message(85           message_manager->create_message( ) ).86         DATA(binary_terminator) =CONV xstring( terminator ).87         DATA(binary_msg) =
88           cl_abap_conv_codepage=>create_out( )->convert( msg ).89         CONCATENATEbinary_msg binary_terminator90                INTO binary_msg IN BYTEMODE.91         message->set_binary( binary_msg ).92         message_manager->send( message ).93  
94         "Wait for a message from server
95         CLEAR event_handler->message.96         WAIT FORPUSH CHANNELS97              UNTIL event_handler->message IS NOT INITIAL
98              UP TO 10SECONDS.99         IF sy-subrc = 4.100           cl_demo_output=>display(101             'No handler for APC messages registered!').102         ELSEIF sy-subrc = 8.103           cl_demo_output=>display(104             'Timeout occurred!').105         ELSE.106           cl_demo_output=>display(107             |TCP client received:\n\n{ event_handler->message }| ).108         ENDIF.109  
110         client->close(666666           i_reason = 'Application closed connection!').112  
113       CATCH cx_apc_error INTO DATA(apc_error).114         cl_demo_output=>display( apc_error->get_text( ) ).115     ENDTRY.116  
117   ENDMETHOD.118 ENDCLASS.119  
120 START-OF-SELECTION.121   apc_demo=>main( ).
<ap>
  <CCTransCode>交易代码</CCTransCode>
  <ProductID>产品标识</ProductID>
  <ChannelType>渠道标识</ChannelType>
  <CorpNo>企业技监局代码/客户号</CorpNo>
  <OpNo>企业操作员编号</OpNo>
  <AuthNo>认证码</AuthNo>
  <ReqSeqNo>请求方流水号</ReqSeqNo>
  <ReqDate>请求日期</ReqDate>
  <ReqTime>请求时间</ReqTime>
  <Sign>数字签名</Sign>
  <FileFlag>文件标识</FileFlag>
  <Corp>
    <StartDate>起始日期</StartDate>
    <EndDate>终止日期</EndDate>
  </Corp>
  <Channel>
    <LastJrnNo>0</LastJrnNo>
  </Channel>
  <Cmp>
    <DbAccNo>账号</DbAccNo>
    <DbProv>省市代码</DbProv>
    <DbCur>货币号</DbCur>
    <StartTime>末笔时间戳</StartTime>
  </Cmp>
</ap>
<ap>
  <CCTransCode>CQRA10</CCTransCode>
  <ProductID>ICC</ProductID>
  <ChannelType>ERP</ChannelType>
  <CorpNo>00000035</CorpNo>
  <OpNo>0011</OpNo>
  <AuthNo/>
  <ReqSeqNo>2021042211375856</ReqSeqNo>
  <ReqDate>20210422</ReqDate>
  <ReqTime>193758</ReqTime>
  <Sign/>
  <FileFlag/>
  <Corp>
    <StartDate>20210401</StartDate>
    <EndDate>20210421</EndDate>
  </Corp>
  <Channel>
    <LastJrnNo>0</LastJrnNo>
  </Channel>
  <Cmp>
    <DbAccNo>0023649</DbAccNo>
    <DbProv>15</DbProv>
    <DbCur>01</DbCur>
    <StartTime/>
  </Cmp>
</ap>                                                                                                                                                                                                                                                              

欢迎交流探讨

标签: none

添加新评论