函数: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
&& '×tamp=' && 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.