IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> SAP EPIC 银企直连 农业银行 Socket 接口项目实践 -> 正文阅读

[网络协议]SAP EPIC 银企直连 农业银行 Socket 接口项目实践

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-不加密。

SAP SAP EPIC 银企直连 ABAP  SM59

SAP SAP EPIC 银企直连 查询银行

SAP SAP EPIC 银企直连 农业银行 查询交易明细

SAP SAP EPIC 银企直连 农业银行 查询项目付款状态

SAP SAP EPIC 银企直连 农业银行 查询项目付款状态 成功

SAP ABAP WebSocket

SAP WebSocket Communication with ABAP Push Channel

SAP WebSocket Communication with ABAP Push Channel

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.?

REPORT demo_apc_tcp_client.

CLASS apc_handler DEFINITION FINAL .
  PUBLIC SECTION.
    INTERFACES if_apc_wsp_event_handler.
    DATA       message TYPE string.
ENDCLASS.

CLASS apc_handler IMPLEMENTATION.
  METHOD if_apc_wsp_event_handler~on_open.
  ENDMETHOD.

  METHOD if_apc_wsp_event_handler~on_message.
    TRY.
        message = i_message->get_text( ).
      CATCH cx_apc_error INTO DATA(apc_error).
        message = apc_error->get_text( ).
    ENDTRY.
  ENDMETHOD.

  METHOD if_apc_wsp_event_handler~on_close.
    message = 'Connection closed!'.
  ENDMETHOD.

  METHOD if_apc_wsp_event_handler~on_error.
  ENDMETHOD.
ENDCLASS.

CLASS apc_demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main.
ENDCLASS.

CLASS apc_demo IMPLEMENTATION.
  METHOD main.
    DATA(tcp_server) = `C:\ncat\ncat.exe`.
    DATA(ip_adress)  = cl_gui_frontend_services=>get_ip_address( ).
    DATA(port)       = `12345`.
    DATA(terminator) = `0A`.
    DATA(msg)        = `Hello TCP, answer me!`.

    cl_demo_input=>new(
      )->add_text(
         `For the TCP server, download the freely available NCAT.EXE`
      )->add_field( CHANGING field = tcp_server
      )->add_field( CHANGING field = ip_adress
      )->add_field( CHANGING field = port
      )->add_field( CHANGING field = terminator
      )->add_field( CHANGING field = msg
      )->request( ).

    "Server
    IF cl_gui_frontend_services=>file_exist(
         file = tcp_server ) IS INITIAL.
      cl_demo_output=>display( 'TCP Server not found!' ).
      LEAVE PROGRAM.
    ENDIF.
    cl_gui_frontend_services=>execute(
    EXPORTING
      application = `cmd.exe`
      parameter  =  `/c ` && tcp_server &&
                   ` -l ` && ip_adress && ` -p ` && port ).
    WAIT UP TO 1 SECONDS.

    TRY.
        DATA(event_handler) = NEW apc_handler( ).

        "Client
        DATA(client) = cl_apc_tcp_client_manager=>create(
          i_host   = ip_adress
          i_port  = port
          i_frame = VALUE apc_tcp_frame(
            frame_type =
              if_apc_tcp_frame_types=>co_frame_type_terminator
            terminator =
              terminator )
          i_event_handler = event_handler ).

        client->connect( ).

        "Send mesasage from client
        DATA(message_manager) = CAST if_apc_wsp_message_manager(
          client->get_message_manager( ) ).
        DATA(message) = CAST if_apc_wsp_message(
          message_manager->create_message( ) ).
        DATA(binary_terminator) = CONV xstring( terminator ).
        DATA(binary_msg) =
          cl_abap_conv_codepage=>create_out( )->convert( msg ).
        CONCATENATE binary_msg binary_terminator
               INTO binary_msg IN BYTE MODE.
        message->set_binary( binary_msg ).
        message_manager->send( message ).

        "Wait for a message from server
        CLEAR event_handler->message.
        WAIT FOR PUSH CHANNELS
             UNTIL event_handler->message IS NOT INITIAL
             UP TO 10 SECONDS.
        IF sy-subrc = 4.
          cl_demo_output=>display(
            'No handler for APC messages registered!' ).
        ELSEIF sy-subrc = 8.
          cl_demo_output=>display(
            'Timeout occurred!' ).
        ELSE.
          cl_demo_output=>display(
            |TCP client received:\n\n{ event_handler->message }| ).
        ENDIF.

        client->close(
          i_reason = 'Application closed connection!' ).

      CATCH cx_apc_error INTO DATA(apc_error).
        cl_demo_output=>display( apc_error->get_text( ) ).
    ENDTRY.

  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  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>                                                                                                                                                                                                                                                              

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 20:05:15  更:2021-07-04 20:05:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 13:51:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计