** 1 , REST HTTP**
** 2, JSON**
** 1 , REST HTTP**
FUNCTION zssf_get_bz_token.
*“----------------------------------------------------------------------
"“本地接口:
*” EXPORTING
*” VALUE(EV_TOKEN) TYPE STRING
*"----------------------------------------------------------------------
--------------------------------------------------------------------
-
RFC(SSF->BZ):获取报账Token
--------------------------------------------------------------------"接口返回字段结构
TYPES:BEGIN OF ty_return_msg,
access_token TYPE string,
token_type TYPE string,
expires_in TYPE int4,
scope TYPE string,
END OF ty_return_msg.DATA:lv_url TYPE string,
lr_http_client TYPE REF TO if_http_client,
lt_form_fields TYPE tihttpnvp,
ls_form_fields LIKE LINE OF lt_form_fields,
lv_result TYPE string,
lr_result TYPE REF TO data,
ls_return_msg TYPE ty_return_msg.CLEAR:lv_url,lr_http_client,lt_form_fields,ls_form_fields,lv_result,lr_result,ls_return_msg.
加粗样式 base64 加密格式: user_no:password
DATA(lv_passw) = CL_HTTP_UTILITY=>ENCODE_BASE64(‘rest:12345678’) .**SELECT SINGLE
url
INTO lv_url
FROM ztssf_032
WHERE fm_name = ‘ZSSF_GET_BZ_TOKEN’ AND
sys_id = sy-sysid.CHECK lv_url IS NOT INITIAL.
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lr_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).lr_http_client->propertytype_logon_popup = lr_http_client->co_disabled.
*&—header
lr_http_client->request->set_header_field(
EXPORTING
name = ‘Authorization’
value = ‘Basic c3lzc3NmOjEyMzQ1Ng’
).
-
lr_http_client->request->set_header_field(
-
EXPORTING
-
name = 'Content-Type'
-
value = 'application/x-www-form-urlencoded'
-
).
-
lr_http_client->request->set_header_field(
-
EXPORTING
-
name = 'Accept'
-
value = 'application/json, application/x-www-form-urlencoded'
-
).
lr_http_client->request->set_method( ‘POST’ ).
*&—body
ls_form_fields-name = ‘grant_type’.
ls_form_fields-value = ‘client_credentials’.
APPEND ls_form_fields TO lt_form_fields.
-
ls_form_fields-name = ‘client_id’.
-
ls_form_fields-value = ‘sysssf’.
-
APPEND ls_form_fields TO lt_form_fields.
-
ls_form_fields-name = ‘client_secret’.
-
ls_form_fields-value = ‘$2a 10 10 10UByUvns5kgBFDbH2FMK0aOqq5yDYEXshfMxPJCoq85XMlc0ZeYuzW’.
-
APPEND ls_form_fields TO lt_form_fields.
lr_http_client->request->set_form_fields(
EXPORTING
fields = lt_form_fields
).
lr_http_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2 ).
lr_http_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
lv_result = lr_http_client->response->get_cdata( ).
CALL METHOD lr_http_client->close.
*&—解析PM返回的数据
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_result
CHANGING
data = lr_result
).
IF lr_result IS BOUND.
ASSIGN lr_result->* TO FIELD-SYMBOL(<fs_out>).
IF <fs_out> IS ASSIGNED.
ASSIGN COMPONENT ‘access_token’ OF STRUCTURE <fs_out> TO FIELD-SYMBOL(<fs_access_token_ref>).
ASSIGN COMPONENT ‘token_type’ OF STRUCTURE <fs_out> TO FIELD-SYMBOL(<fs_token_type_ref>).
ASSIGN COMPONENT ‘expires_in’ OF STRUCTURE <fs_out> TO FIELD-SYMBOL(<fs_expires_in_ref>).
ASSIGN COMPONENT ‘scope’ OF STRUCTURE <fs_out> TO FIELD-SYMBOL(<fs_scope_ref>).
ENDIF.
IF <fs_access_token_ref> IS ASSIGNED.
ASSIGN <fs_access_token_ref>->* TO FIELD-SYMBOL(<fs_access_token>).
IF <fs_access_token> IS ASSIGNED.
ls_return_msg-access_token = <fs_access_token>.
ENDIF.
ENDIF.
IF <fs_token_type_ref> IS ASSIGNED.
ASSIGN <fs_token_type_ref>->* TO FIELD-SYMBOL(<fs_token_type>).
IF <fs_token_type> IS ASSIGNED.
ls_return_msg-token_type = <fs_token_type>.
ENDIF.
ENDIF.
IF <fs_expires_in_ref> IS ASSIGNED.
ASSIGN <fs_expires_in_ref>->* TO FIELD-SYMBOL(<fs_expires_in>).
IF <fs_expires_in> IS ASSIGNED.
ls_return_msg-expires_in = <fs_expires_in>.
ENDIF.
ENDIF.
IF <fs_scope_ref> IS ASSIGNED.
ASSIGN <fs_scope_ref>->* TO FIELD-SYMBOL(<fs_scope>).
IF <fs_scope> IS ASSIGNED.
ls_return_msg-scope = <fs_scope>.
ENDIF.
ENDIF.
ENDIF.
ev_token = ls_return_msg-access_token.
ENDFUNCTION.
2 , JSON
DATA: BEGIN OF LS_ZDATA ,
SOURCE_CODE TYPE STRING, " 单据 sourceCode
TOTAL_AMOUNT TYPE STRING, " 金额汇总 totalAmount
PREMIUM_FLAG TYPE STRING, " 是否溢价 premiumFlag
TRANSFER_INFORMATION LIKE TABLE OF LS_TRANSFER,
END OF LS_ZDATA .
解释 : CAMEL_CASE 为驼峰模式 ;
LV_JSON_IN = /UI2/CL_JSON=>SERIALIZE(
DATA = LS_ZDATA
COMPRESS = ABAP_FALSE
PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE ) .