API调用传入TOKEN示例

FUNCTION ZFM_RESTFUL_PAK.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_URL_ID) TYPE  STRING DEFAULT 'IND_TO_WMS'
*"     VALUE(I_BODYDATA) TYPE  STRING DEFAULT '{}'
*"     VALUE(I_HTTP_METHOD) TYPE  STRING DEFAULT 'POST'
*"  EXPORTING
*"     REFERENCE(E_MSG) TYPE  STRING
*"     REFERENCE(E_CODE) TYPE  CHAR1
*"     REFERENCE(E_DATA) TYPE  STRING
*"     REFERENCE(E_HTTP_STATUS_CODE) TYPE  I
*"     REFERENCE(E_BIZ_CODE) TYPE  CHAR1
*"----------------------------------------------------------------------

  DATA OREF TYPE REF TO CX_ROOT.
  TRY .

      DATA LV_URL TYPE STRING .
      "获取URL接口地址
      SELECT SINGLE ZZURL FROM ZTPAKESBURL WHERE ZZURLID EQ @I_URL_ID AND ZZCLIENT EQ @SY-MANDT INTO @LV_URL.
      IF SY-SUBRC NE 0.
        E_CODE = 'E'.
        E_MSG  = '连接地址获取失败!'.
        RETURN.
      ENDIF.

      "获取TOKEN
      DATA LV_TOKEN TYPE STRING.
      SELECT SINGLE ZZURL FROM ZTPAKESBURL WHERE ZZURLID EQ 'ESB_TOKEN' INTO @LV_TOKEN.
      IF SY-SUBRC NE 0.
        E_CODE = 'E'.
        E_MSG  = 'TOKEN获取获取失败!'.
        RETURN.
      ENDIF.

      DATA: LO_HTTP_CLIENT  TYPE REF TO IF_HTTP_CLIENT.
      "实例化1个 IF_HTTP_CLIENT 的对象得到HTTP_CLIENT
      CL_HTTP_CLIENT=>CREATE_BY_URL(
                 EXPORTING URL    = LV_URL                "输入参数
                 IMPORTING CLIENT = LO_HTTP_CLIENT
                   ).

      LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.


      "设置某个特定的header field的值
      LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME  = 'identitytoken' VALUE = LV_TOKEN ). "TOKEN

      "设置某个特定的header field的值
      LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = '~SERVER_PROTOCOL' VALUE = 'HTTP/1.1').

      "设置某个特定的header field的值
      LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME  = 'CONTENT-TYPE' VALUE = 'APPLICATION/JSON').

      "设置某个特定的header field的值
      LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'ACCEPT' VALUE = '*/*' ).

      "设置http请求的方法GET 或者 POST,默认使用POST
      IF I_HTTP_METHOD IS NOT INITIAL.
        LO_HTTP_CLIENT->REQUEST->SET_METHOD( I_HTTP_METHOD ).
      ELSE.
        LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ).
      ENDIF.

      "设置http body
      CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
        EXPORTING
          DATA = I_BODYDATA.                             "输入参数

      "发送数据
      CALL METHOD LO_HTTP_CLIENT->SEND
        EXCEPTIONS
          HTTP_COMMUNICATION_FAILURE = 1
          HTTP_INVALID_STATE         = 2.

      "接收HTTP返回
      CALL METHOD LO_HTTP_CLIENT->RECEIVE
        EXCEPTIONS
          HTTP_COMMUNICATION_FAILURE = 1
          HTTP_INVALID_STATE         = 2
          HTTP_PROCESSING_FAILED     = 3.

      "返回状态校验
      LO_HTTP_CLIENT->RESPONSE->GET_STATUS( IMPORTING  CODE = E_HTTP_STATUS_CODE ).

      E_DATA = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).

      CASE E_HTTP_STATUS_CODE.
        WHEN 200.
          E_CODE = 'S'.
          E_MSG = '系统连接成功!请查看执行结果消息。'.
          "返回数据,"获取response中的http的body内容
          E_DATA = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).

        WHEN OTHERS.
          E_CODE = 'E'.
          E_MSG =  '接口访问失败,返回码:' &&  E_HTTP_STATUS_CODE && E_DATA.
      ENDCASE.

      "关闭http链接
      CALL METHOD LO_HTTP_CLIENT->CLOSE.

    CATCH  CX_ROOT INTO  OREF.
      E_CODE = 'E'.
      E_MSG = OREF->IF_MESSAGE~GET_TEXT( ).
      "关闭http链接
      IF LO_HTTP_CLIENT IS NOT INITIAL.
        CALL METHOD LO_HTTP_CLIENT->CLOSE.
      ENDIF.
  ENDTRY.

*业务状态识别
  IF E_CODE EQ 'S'.
*JSON数据转为内表数据
    TYPES : BEGIN OF TY_RESULTINFO,
              RETURNSTATUS TYPE CHAR1,
              RETURNMSG    TYPE STRING,
            END OF TY_RESULTINFO.
    DATA :LS_RESULTINFO TYPE TY_RESULTINFO.

    CALL METHOD /UI2/CL_JSON=>DESERIALIZE
      EXPORTING
        JSON = E_DATA
*       PRETTY_NAME = ABAP_FALSE
      CHANGING
        DATA = LS_RESULTINFO.
    IF LS_RESULTINFO-RETURNSTATUS EQ 'S'.
      E_BIZ_CODE = 'S'.
      E_MSG = '接口处理成功!'.
    ELSE.
      E_BIZ_CODE = 'E'.
      E_MSG = '接口处理失败!'.
    ENDIF.
    E_MSG = E_MSG && LS_RESULTINFO-RETURNMSG.
  ENDIF.

ENDFUNCTION.


关键词: ABAP

网友评论

发表评论