SAP調(diào)用阿里云發(fā)送短信

sap發(fā)送阿里云發(fā)送短信

完整程序引用

https://blog.csdn.net/xiefireworks/article/details/113037650


TYPES: BEGIN OF ty_parameter,

? ? ? ? key? TYPE string,

? ? ? ? value TYPE string,

? ? ? END OF ty_parameter.

DATA: lo_cl_abap_hmac TYPE REF TO cl_abap_hmac.

DATA: lv_signature? ? ? ? ? ? TYPE string,

? ? ? lv_sortquerystring? ? ? TYPE string,

? ? ? lv_sortquerystring_temp TYPE string.

DATA: lt_parameter TYPE TABLE OF ty_parameter,

? ? ? ls_parameter TYPE ty_parameter.

DATA: lv_timestampsap? ? TYPE timestamp,

? ? ? lv_timestampformat TYPE char30 VALUE '____-__-__T__:__:__Z',

? ? ? lv_timestampjava? TYPE char30,

? ? ? lv_uuid? ? ? ? ? ? TYPE char36.

DATA: lv_url TYPE string.

CONSTANTS: c_accesssecret TYPE string VALUE 'testSecret&',

? ? ? ? ? c_accesskeyid? TYPE string VALUE 'testId'.

*& 1. 填充參數(shù)

" 1.1 系統(tǒng)參數(shù)

GET TIME STAMP FIELD lv_timestampsap.

WRITE lv_timestampsap TO lv_timestampjava USING EDIT MASK lv_timestampformat TIME ZONE '0'.

TRY .

? ? lv_uuid = cl_system_uuid=>create_uuid_c32_static( ).

? CATCH cx_uuid_error.

ENDTRY.

APPEND VALUE #(? key = 'SignatureMethod'? ? ? value =? 'HMAC-SHA1'? ? ? ) TO lt_parameter.

APPEND VALUE #(? key = 'SignatureNonce'? ? ? value =? lv_uuid? ? ? ? ? ) TO lt_parameter.

APPEND VALUE #(? key = 'AccessKeyId'? ? ? ? ? value =? c_accesskeyid? ? ) TO lt_parameter.

APPEND VALUE #(? key = 'SignatureVersion'? ? value =? '1.0'? ? ? ? ? ? ) TO lt_parameter.

APPEND VALUE #(? key = 'Timestamp'? ? ? ? ? ? value =? lv_timestampjava? ) TO lt_parameter.

" 1.2 業(yè)務(wù)參數(shù)

APPEND VALUE #( key = 'Action'? ? ? ? ? value =? 'SendSms'? ? ? ? ? ) TO lt_parameter.

APPEND VALUE #( key = 'Version'? ? ? ? value =? '2017-05-25'? ? ? ? ) TO lt_parameter.

APPEND VALUE #( key = 'RegionId'? ? ? ? value =? 'cn-hangzhou'? ? ? ) TO lt_parameter.

APPEND VALUE #( key = 'PhoneNumbers'? ? value =? '15300000001'? ? ? ) TO lt_parameter.

APPEND VALUE #( key = 'SignName'? ? ? ? value =? '阿里云短信測試專用'? ) TO lt_parameter.

APPEND VALUE #( key = 'TemplateParam'? value =? '{"customer":"test"}') TO lt_parameter.

APPEND VALUE #( key = 'TemplateCode'? ? value =? 'SMS_71390007'? ? ? ) TO lt_parameter.

*& 2. 構(gòu)造待簽名的請求串

" 2.1 根據(jù)參數(shù)Key排序(順序)

SORT lt_parameter BY key.

" 2.2 拼接URL編碼后的參數(shù)值

LOOP AT lt_parameter INTO ls_parameter.

? lv_sortquerystring_temp = lv_sortquerystring_temp && '&' && escape( val = ls_parameter-key format = cl_abap_format=>e_uri_full )

? ? ? ? ? ? ? ? ? ? ? ? ? ? && '=' && escape( val =? ls_parameter-value format = cl_abap_format=>e_uri_full ).

ENDLOOP.

" 2.3 特殊URL編碼 POP特殊的一種規(guī)則,即在一般的URLEncode后再增加三種字符替換

"使用escap format cl_abap_format=>e_uri_full 時(shí)滿足最終條件不用如下轉(zhuǎn)換

*REPLACE ALL OCCURRENCES OF '+'? ? IN lv_sortquerystring_temp WITH '%20'.

*REPLACE ALL OCCURRENCES OF '*'? ? IN lv_sortquerystring_temp WITH '%2A'.

*REPLACE ALL OCCURRENCES OF '%7E'? IN lv_sortquerystring_temp WITH '~'.

lv_sortquerystring = lv_sortquerystring_temp.

SHIFT lv_sortquerystring LEFT DELETING LEADING '&'."移除第一個(gè)&

" 2.4. 按POP的簽名規(guī)則拼接成最終的待簽名串

lv_sortquerystring = 'GET' && '&' && escape( val = '/' format = cl_abap_format=>e_uri_full ) && '&'

? ? ? ? ? ? ? ? ? ? ? ? ? &&? escape( val =? lv_sortquerystring format = cl_abap_format=>e_uri_full ) .

*& 3. 生成簽名

" 3.1 設(shè)置簽名 key

lo_cl_abap_hmac = cl_abap_hmac=>get_instance( if_key = cl_abap_hmac=>string_to_xstring( if_input = c_accesssecret ) ).

" 3.2 生成簽名

" 3.2 生成簽名

TRY.

? ? lo_cl_abap_hmac->final( EXPORTING if_data = cl_abap_hmac=>string_to_xstring( if_input = lv_sortquerystring )

? ? ? ? ? ? ? ? ? ? ? ? ? ? IMPORTING ef_hmacb64string = lv_signature ) .

? CATCH cx_abap_message_digest .

ENDTRY.

" 3.2 最終生成的簽名也要做特殊URL編碼

lv_signature = escape( val = lv_signature format = cl_abap_format=>e_uri_full ).

*& 4. 生成最終請求url

lv_url = 'http://dysmsapi.aliyuncs.com/?Signature=' && lv_signature && lv_sortquerystring_temp.

DATA: lv_out_put TYPE string.

lv_out_put = lv_out_put && 'SignatureNonce:'? ? ? && cl_bcs_convert=>gc_crlf && lv_uuid? ? ? ? ? ? && cl_bcs_convert=>gc_crlf.

lv_out_put = lv_out_put && 'Timestamp:'? ? ? ? ? ? && cl_bcs_convert=>gc_crlf && lv_timestampjava? && cl_bcs_convert=>gc_crlf.

lv_out_put = lv_out_put && 'sortedQueryString:'? ? && cl_bcs_convert=>gc_crlf && lv_sortquerystring && cl_bcs_convert=>gc_crlf.

lv_out_put = lv_out_put && 'signature:'? ? ? ? ? ? && cl_bcs_convert=>gc_crlf && lv_signature? ? ? && cl_bcs_convert=>gc_crlf.

lv_out_put = lv_out_put && 'URL:'? ? ? ? ? ? ? ? ? && cl_bcs_convert=>gc_crlf && lv_url? ? ? ? ? ? && cl_bcs_convert=>gc_crlf.

cl_demo_text=>display_string( lv_out_put ).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容