zoukankan      html  css  js  c++  java
  • SAP HTTP调用其他系统接口

    1业务说明

    ABAP系统通过HTTP方式调用其他系统发布的接口

    2代码实现

    2.1认证接口

    根据访问的URL创建HTTP客户端

    设置访问方式,并调用SEND和接收函数

    有时需要专门验证用户名密码

    获取返回的HTTP访问状态和状态描述,并关闭接口

    其中定义的接收内表需要按照JSON结构来定义

    2.2具体接口

    当获取TOKEN成功之后,就可以继续执行后续的某个业务功能接口了

    仍然根据访问的接口URL创建HTTP客户端

    设置传输格式,校验权限,访问方式

    根据传入JSON,定义内表,并转换为JSON格式

    同理,调用发送和接收函数,之后用相同方式获取返回的JSON数据,并将其转换为内表,做后续操作,方法和认证接口处理一致,不再赘述。

    2.3源代码

    "TOKEN的结构
    TYPES: BEGIN OF TY_TOKEN,
             ACCESS_TOKEN  TYPE STRING,
             TOKEN_TYPE    TYPE STRING,
             REFRESH_TOKEN TYPE STRING,
             EXPIRES_IN    TYPE STRING,
             SCOPE         TYPE STRING,
           END OF TY_TOKEN.

    "发送数据时的结构
    DATA:BEGIN OF TY_DATILDATA OCCURS 0,
           DATEFROM TYPE STRING,
           DATETO   TYPE STRING,
           PAGE     TYPE STRING,
           SIZE     TYPE STRING,
         END OF TY_DATILDATA.

    "编辑发送数据
    DATA: BEGIN OF TY_SENDDATA,
            PAYLOAD LIKE TY_DATILDATA,
          END OF TY_SENDDATA.

    "编辑接收数据
    DATA: BEGIN OF TY_RECEIVEDATA,
            PAYLOAD LIKE TY_DATILDATA,
            DATA    LIKE TABLE OF TY_DATILDATA,
          END OF TY_RECEIVEDATA.

    DATA:LS_TOKEN    TYPE TY_TOKEN,
         LS_SENDDATA LIKE TY_SENDDATA,
         LS_RECDATA  LIKE TY_RECEIVEDATA.

    DATA: LV_LEN           TYPE I, "发送报文长度
          LV_URL           TYPE STRING, "接口地址
          LO_HTTP_CLIENT   TYPE REF TO IF_HTTP_CLIENT, "http客户端
          LV_SEND_JSON     TYPE STRING, "发送的JSON
          LV_REC_JSON      TYPE STRING, "接收的JSON
          LV_AUTHORIZATION TYPE STRING,
          LV_CODE          TYPE I, "HTTP 返回状态
          LV_REASON        TYPE  STRING. " HTTP 状态描述

    START-OF-SELECTION.

      CLEAR:LV_URL.
      LV_URL = 'https://hostname/oauth/oauth/token'.

      "创建http客户端
      CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
        EXPORTING
          URL                = LV_URL
        IMPORTING
          CLIENT             = LO_HTTP_CLIENT
        EXCEPTIONS
          ARGUMENT_NOT_FOUND = 1
          PLUGIN_NOT_ACTIVE  = 2
          INTERNAL_ERROR     = 3
          OTHERS             = 4.

      "不显示登录界面
      LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.

      "可以使用AUTHENTICATE方法专门验证用户名和密码,但本程序不适用
    *