1 method request_signature_json. 2 data: lv_json_md5 type string. 3 data: lv_param type string, 4 lv_param_out type xstring, 5 lv_json_sha type string. 6 7 try. 8 9 "JSON报文通过MD5加密:JSON+KEY -> MD5 10 try. 11 call method cl_abap_hmac=>calculate_hmac_for_char 12 exporting 13 if_algorithm = 'MD5' 14 if_key = lv_param_out 15 if_data = iv_json 16 importing 17 ef_hmacstring = lv_json_md5 18 . 19 20 translate lv_json_md5 to lower case. 21 22 catch cx_abap_message_digest into data(lr_digest). 23 raise exception type zcx_root 24 exporting 25 textid = value #( msgid = lr_digest->if_t100_message~t100key-msgid 26 msgno = lr_digest->if_t100_message~t100key-msgid 27 attr1 = lr_digest->if_t100_message~t100key-attr1 28 attr2 = lr_digest->if_t100_message~t100key-attr2 29 attr3 = lr_digest->if_t100_message~t100key-attr3 30 attr4 = lr_digest->if_t100_message~t100key-attr4 31 ). 32 endtry. 33 34 "key 35 select single * 36 into @data(ls_2005) 37 from ztap2005 38 where repid = @gv_repid. 39 40 "时间戳:SAP日期时间转JAVA时间戳 41 call method cl_pco_utility=>convert_abap_timestamp_to_java 42 exporting 43 iv_date = sy-datum 44 iv_time = sy-uzeit 45 iv_msec = 000 46 importing 47 ev_timestamp = data(lv_timestamp) . 48 49 "Post/ + MD5加密Body报文 + uuid唯一值 + timestamp时间戳 + API key固定值 50 lv_param = 'param=post/' && 51 lv_json_md5 && 52 '&uuid=' && iv_uuid && 53 '&timeSpan=' && lv_timestamp && 54 '&key=' && ls_2005-zprikey. 55 56 "签名加密 57 try. 58 "需要Token(zpubkey)转XSTRING 59 lv_json_sha = ls_2005-zpubkey. 60 call method cl_abap_hmac=>string_to_xstring 61 exporting 62 if_input = lv_json_sha 63 receiving 64 er_output = lv_param_out 65 . 66 catch cx_abap_message_digest into lr_digest. 67 raise exception type zcx_root 68 exporting 69 textid = value #( msgid = lr_digest->if_t100_message~t100key-msgid 70 msgno = lr_digest->if_t100_message~t100key-msgid 71 attr1 = lr_digest->if_t100_message~t100key-attr1 72 attr2 = lr_digest->if_t100_message~t100key-attr2 73 attr3 = lr_digest->if_t100_message~t100key-attr3 74 attr4 = lr_digest->if_t100_message~t100key-attr4 75 ). 76 endtry. 77 78 try. 79 "通过SHA256加密算法签名 80 clear:lv_json_sha. 81 call method cl_abap_hmac=>calculate_hmac_for_char 82 exporting 83 if_algorithm = 'SHA256' 84 if_key = lv_param_out 85 if_data = lv_param 86 importing 87 ef_hmacstring = lv_json_sha 88 . 89 translate lv_json_sha to lower case. 90 catch cx_abap_message_digest into lr_digest. 91 raise exception type zcx_root 92 exporting 93 textid = value #( msgid = lr_digest->if_t100_message~t100key-msgid 94 msgno = lr_digest->if_t100_message~t100key-msgid 95 attr1 = lr_digest->if_t100_message~t100key-attr1 96 attr2 = lr_digest->if_t100_message~t100key-attr2 97 attr3 = lr_digest->if_t100_message~t100key-attr3 98 attr4 = lr_digest->if_t100_message~t100key-attr4 99 ). 100 endtry. 101 102 "签名 103 ev_signature = 'sign=' && lv_json_sha && 104 '&uuid=' && iv_uuid && 105 '&timeSpan=' && lv_timestamp && 106 '&key=' && ls_2005-zprikey. 107 108 109 catch cx_root into data(lr_root). 110 er_root = lr_root. 111 endtry. 112 endmethod.