IT干货网

ABAP-MD5加密方式

lxf 2022年03月09日 SAP 286 0
  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.

评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

ABAP-错误 C+704