REST API调用无效字符

2020-09-08 08:46发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)亲爱的社区, 如果能解决以下问...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的社区,

如果能解决以下问题,我将不胜感激:

我正在尝试直接从Autodesk提供的ABAP中使用REST API,以自动创建订单。
如果我使用Postman之类的程序调用Web服务,则POST请求会成功通过。

问题:

从ABAP调用REST API时,收到一条与无效字符'='相关的奇怪错误消息,这是必需的,因为该调用包含HMACSHA256和Base64编码参数。

我在邮递员中的工作电话

ABAP中的错误响应:

ABAP代码:

我正在使用SM59目标(HTTP1.1)。

此外,我在公司内部方法(用于Web服务的z-helper类)中使用类" CL_HTTP_CLIENT"。
但是当我尝试使用默认值"香草/SAP"使用" CL_HTTP_CLIENT"时,我收到相同的错误。

请求必须具有方法" POST"和内容类型" application/json; charset = UTF-8"。

 IF createbyrfc ='X'。

     lv_destination ='Z_AUTODESK_STAGEING'。
     cl_http_client => create_by_destination(
       出口
         目的地= lv_destination
       输入
         客户= lo_client
       例外情况
         arguments_not_found = 1
         destination_not_found = 2
         destination_no_authority = 3
         plugin_not_active = 4
         internal_error = 5
         其他= 6
     )。
     lo_client-> propertytype_logon_popup = if_http_client => co_disabled。
   其他。  " .....

  lo_client-> request-> set_content_type(content_type)。
  lo_client-> request-> set_header_field(导出名称='〜request_method'值=方法)。

 LOOP AT标头INTO ls_val。
       lo_client-> request-> set_header_field(name = ls_val-value value = ls_val-text)。
 结局。

 lo_client->发送(
     出口
       超时=超时
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3
       其他= 4)。

   lo_client-> receive(
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3
       其他= 4)。

   result-body = lo_client-> response-> get_cdata()。
   lo_client->响应-> get_status(导入代码= lv_status原因=结果原因)。
   结果状态= lv_状态。

   案例lv_status。
     时200。
       result-statust ="确定"。
     "什么时候 ...
   结束。

   lo_client-> close()。
 

创建错误的值是这样创建的:

清除ls_headers。
 ls_headers-text ='签名'。
 DATA(lv_signature_raw)= lv_callbackurl && lv_client_id && lv_time_utc。
 DATA(lv_binary_secret)= cl_abap_hmac => string_to_xstring(lv_client_secret)。

 cl_abap_hmac => calculate_hmac_for_char(
   出口
     if_algorithm ='SHA256'"哈希算法
     if_key = lv_binary_secret" HMAC密钥
     if_data = lv_signature_raw"数据
   输入
     ef_hmacb64string = lv_signature_final" HMAC值作为base64编码的字符串
 )。

 ls_headers-value = lv_signature_final。
 将ls_headers附加到lt_headers。

该值本身是正确的,因为它在邮递员中工作,但是某些内容不接受格式/'='字符。
起初,我对另一个包含空格的参数具有相同的含义,但是我能够"解决 "(或很有可能)通过使用不易碎的空格符号...

非常感谢您的帮助!
如果我忘记了一些东西,很抱歉,第一次来这里...

您真诚的,
帕特里克

(21.7 kB)