点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)亲爱的社区, 如果能解决以下问...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供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)
嗨,托马斯
谢谢您的想法。
是的,我们的系统确实是unicode。 签名是相同的。 如果我将其从SAP复制到Postman,则该调用已在Postman中成功执行,但由于" ="符号,因此在SAP中引发了错误。
亲切的问候,
帕特里克
一周热门 更多>