接口案例推送WMS进行加密

本文详细描述了一个ABAP程序中调用ZFM_WMS_004_FRSAP函数的过程,涉及本地接口的导入导出、参数设置、JSON序列化、HTTPPOST请求以及错误处理机制。
摘要由CSDN通过智能技术生成

函数:ZFM_WMS_004_FRSAP

FUNCTION zfm_wms_004_frsap .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT) TYPE  ZSMM_0015
*"  EXPORTING
*"     VALUE(OUTPUT) TYPE  ZSMM_0017
*"----------------------------------------------------------------------

  DATA: lv_errmsg TYPE string.
  DATA: lv_errflag TYPE abap_bool.
  DATA: ls_ifsort TYPE zsall_iflog_zfield.
  DATA: lt_ztmm0013 TYPE TABLE OF ztmm0013.
  DATA: lv_ifsnr TYPE ze_ifsnr.
  DATA: lv_params TYPE string,
        ls_params TYPE zswms_http_params.
  CLEAR:lt_ztmm0013,ls_params,lv_params.
  lv_ifsnr = 'WMS003'.
  SELECT * FROM ztmm0013 INTO TABLE @lt_ztmm0013
    WHERE ifsnr = @lv_ifsnr
    AND sysid = @sy-sysid.
  SORT lt_ztmm0013 BY zkey.
  LOOP AT lt_ztmm0013 INTO DATA(ls_ztmm0013).
    ASSIGN COMPONENT ls_ztmm0013-zkey OF STRUCTURE ls_params TO FIELD-SYMBOL(<fs_value>).
    IF sy-subrc = 0 AND <fs_value> IS ASSIGNED.
      <fs_value> = ls_ztmm0013-value.
    ENDIF.
  ENDLOOP.


*-----------------------------------------------------------------------
* 启用接口日志
  /log/start. output-uuid = /log/data-uuid.
*-----------------------------------------------------------------------

  DATA:lv_request_json TYPE string.
  DATA:lv_response_json TYPE string.
  DATA:lv_ev_type TYPE bapi_mtype.
  DATA:lv_ev_msg TYPE bapi_msg.
*  DATA:BEGIN OF ls_response,
*         zh_statu TYPE char1,
*         zh_mesg  TYPE char255,
*       END OF ls_response.

  IF input IS NOT INITIAL.
    CALL METHOD /ui2/cl_json=>serialize
      EXPORTING
        data        = input
        pretty_name = /ui2/cl_json=>pretty_mode-camel_case
      RECEIVING
        r_json      = lv_request_json.

*    DATA: lv_params TYPE string,
*          ls_params TYPE zswms_http_params.
*    ls_params-secretkey = 'b27f10e3bfb8f598849f7d4182f0de6b'.
*    ls_params-app_key = 'CSHZ20240103'.
*    ls_params-customer_id = 'CSHZ'.
*    ls_params-format = 'json'.
*    ls_params-method = 'openapi.stockout.create'.
*    ls_params-sign_method = 'md5'.
*    ls_params-v = '2.0'.

    DATA: lv_timestamp TYPE tzonref-tstamps.
    CLEAR: lv_timestamp.
    CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
      EXPORTING
        i_datlo     = sy-datum
        i_timlo     = sy-uzeit
        i_tzone     = sy-zonlo
      IMPORTING
        e_timestamp = lv_timestamp.

    ls_params-timestamp = lv_timestamp.
    CONDENSE ls_params-timestamp.



    DATA: lv_string TYPE string,
          lv_md5    TYPE char32.
    ls_params-method = to_lower( ls_params-method ).
    ls_params-format = to_lower( ls_params-format ).
    ls_params-secretkey = to_lower( ls_params-secretkey ).
    ls_params-sign_method = to_lower( ls_params-sign_method ).
    lv_string = ls_params-secretkey
                && 'app_key' && ls_params-app_key
                && 'customerId' && ls_params-customer_id
                && 'format' && ls_params-format
                && 'method' && ls_params-method
                && 'sign_method' && ls_params-sign_method
                && 'timestamp' && ls_params-timestamp
                && 'v' && ls_params-v
                && lv_request_json
                && ls_params-secretkey.

    CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
      EXPORTING
        data           = lv_string
*       LENGTH         = 0
*       VERSION        = 1
      IMPORTING
        hash           = lv_md5
*   TABLES
*       DATA_TAB       =
      EXCEPTIONS
        no_data        = 1
        internal_error = 2
        OTHERS         = 3.

    lv_params ='?method=' && ls_params-method
                && '&timestamp=' && ls_params-timestamp
                && '&format=' && ls_params-format
                && '&app_key=' && ls_params-app_key
                && '&v=' && ls_params-v
                && '&sign=' && lv_md5
                && '&sign_method=' && ls_params-sign_method
                && '&customerId=' && ls_params-customer_id.


    CALL FUNCTION 'ZFM_HTTPPOST_WMS'
      EXPORTING
        i_ifsnr         = lv_ifsnr
        i_json          = lv_request_json
        i_params        = lv_params
*        i_proxy_host    = '147.204.152.42'
        i_proxy_host    = 'Proxy'
        i_proxy_service = '3128'
      IMPORTING
        ev_json         = lv_response_json
        ev_type         = lv_ev_type
        ev_msg          = lv_ev_msg.

    /log/req_res lv_request_json lv_response_json.

    IF lv_ev_type = 'S'.
      CALL METHOD /ui2/cl_json=>deserialize
        EXPORTING
          json        = lv_response_json
          pretty_name = /ui2/cl_json=>pretty_mode-camel_case
        CHANGING
          data        = output.
      IF output IS INITIAL.
        output-status = 'E'.
        output-message = '解析失败'.
      ENDIF.
    ELSEIF lv_ev_type = 'E'.
      output-status = 'E'.
      output-message = lv_ev_msg.
    ENDIF.
  ENDIF.

  IF output-response IS NOT INITIAL.
    IF output-response-flag = 'success'.
      output-status = 'S'.
      output-message = '推送成功!'.
    ELSE.
      output-status = 'E'.
      output-message = output-response-message.
    ENDIF.
  ENDIF.
  "可为不同

*-----------------------------------------------------------------------
* 结束接口日志 &1状态码 &2消息 &3搜索项 &4反写UUID
  /log/end output-status output-message ls_ifsort.
*-----------------------------------------------------------------------



ENDFUNCTION.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值