CL_HTTP_CLIENT-> CREATE_BY_DESTINATION 403禁止

2020-09-14 11:23发布

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

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


大家好,

我一直在寻找答案,却多次看到这个问题,但是解决方案却不同。

我尝试过,但没有成功。

我向json api请求信用卡付款(六个saferpay json api)。

如果我在邮递员中建立请求并将其发送,那么我会得到带有六个付款页面网址的答案。

在SAP中,我首先使用凭证创建了目的地,但没有路径。

因为路径可能不同。

已在信任关系中下载并"安装"了SSL证书。

然后进行了Abap编码。

奇怪的是我被禁止了403回来。

我发现一个提示,可能是问题在于cookie属性,我现在设置了该属性,但仍然有问题。 有人提示吗?

非常感谢

亲切的问候

亚历克斯

这里是我的ABAP编码:

 cl_http_client => create_by_destination(
     出口
       destination ='SIX_PAYMENT'"逻辑目标(在函数调用中指定)
     输入
       client = lo_http_client" HTTP客户端抽象
     例外情况
       arguments_not_found = 1
       destination_not_found = 2
       destination_no_authority = 3
       plugin_not_active = 4
       internal_error = 5
       其他= 6
   )。
  
   创建对象lo_rest_client
      出口
        io_http_client = lo_http_client。
    lo_http_client-> request-> set_version(if_http_request => co_protocol_version_1_0)。
    如果lo_http_client是BOUND且lo_rest_client是BOUND。
      lv_url ='/api/Payment/v1/PaymentPage/Initialize'。
      cl_http_utility => set_request_uri(
        出口
          request = lo_http_client-> request" HTTP框架(iHTTP)HTTP请求
          uri = lv_url" URI字符串(以/path?query-string的形式)
      )。


      lo_http_client-> propertytype_accept_cookie = lo_http_client-> co_enabled。


 * ABAP到JSON
      数据:json_req类型zcm_oanml_req_header。


       json_req-REQUESTHEADER-SPECVERSION ='1.9'。
       json_req-REQUESTHEADER-CUSTOMERID ='XXXXXX'。
       json_req-REQUESTHEADER-REQUESTID ='1234567'。
       json_req-REQUESTHEADER-RETRYINDICATOR ='0'。

       json_req-TERMINALID ='XXXXXXXX'。
       json_req-PAYMENT-AMOUNT-value ='1'。
       json_req-PAYMENT-AMOUNT-currencycode ='CHF'。
       json_req-PAYMENT-ORDERID ='1234567'。
       json_req-PAYMENT-DESCRIPTION ='Studiengebühr'。

 数据lr_json_serializer类型参考cl_trex_json_serializer。


 创建对象lr_json_serializer导出数据= json_req。
 lr_json_serializer-> serialize()。
 lv_body = lr_json_serializer-> get_data()。


      数据:lo_json类型参考cl_clb_parse_json,
            lo_response类型参考if_rest_entity,
            lo_request类型参考if_rest_entity,
            lo_sql类型参考cx_sy_open_sql_db,
            状态TYPE字符串,
            原因TYPE字符串,
            响应TYPE字符串,
            content_length TYPE字符串,
            位置TYPE字符串,
            content_type TYPE字符串,
            lv_status TYPE i。
 *设置有效载荷或正文(JSON或XML)
      lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。
      lo_request-> set_content_type(iv_media_type = if_rest_media_type => gc_appl_json)。


      lo_request-> set_header_field(iv_name ='接受'
                                    iv_value ='application/json')。


      lo_request-> set_string_data(lv_body)。


 *开机自检
      lo_rest_client-> if_rest_resource〜post(lo_request)。
 *收集回应
      lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。
      http_status = lv_status = lo_response-> get_header_field('〜status_code')。
      原因= lo_response-> get_header_field('〜status_reason')。
      content_length = lo_response-> get_header_field('content-length')。
      location = lo_response-> get_header_field('location')。
      content_type = lo_response-> get_header_field('content-type')。
      响应= lo_response-> get_string_data()。
      万一。
 

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

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


大家好,

我一直在寻找答案,却多次看到这个问题,但是解决方案却不同。

我尝试过,但没有成功。

我向json api请求信用卡付款(六个saferpay json api)。

如果我在邮递员中建立请求并将其发送,那么我会得到带有六个付款页面网址的答案。

在SAP中,我首先使用凭证创建了目的地,但没有路径。

因为路径可能不同。

已在信任关系中下载并"安装"了SSL证书。

然后进行了Abap编码。

奇怪的是我被禁止了403回来。

我发现一个提示,可能是问题在于cookie属性,我现在设置了该属性,但仍然有问题。 有人提示吗?

非常感谢

亲切的问候

亚历克斯

这里是我的ABAP编码:

 cl_http_client => create_by_destination(
     出口
       destination ='SIX_PAYMENT'"逻辑目标(在函数调用中指定)
     输入
       client = lo_http_client" HTTP客户端抽象
     例外情况
       arguments_not_found = 1
       destination_not_found = 2
       destination_no_authority = 3
       plugin_not_active = 4
       internal_error = 5
       其他= 6
   )。
  
   创建对象lo_rest_client
      出口
        io_http_client = lo_http_client。
    lo_http_client-> request-> set_version(if_http_request => co_protocol_version_1_0)。
    如果lo_http_client是BOUND且lo_rest_client是BOUND。
      lv_url ='/api/Payment/v1/PaymentPage/Initialize'。
      cl_http_utility => set_request_uri(
        出口
          request = lo_http_client-> request" HTTP框架(iHTTP)HTTP请求
          uri = lv_url" URI字符串(以/path?query-string的形式)
      )。


      lo_http_client-> propertytype_accept_cookie = lo_http_client-> co_enabled。


 * ABAP到JSON
      数据:json_req类型zcm_oanml_req_header。


       json_req-REQUESTHEADER-SPECVERSION ='1.9'。
       json_req-REQUESTHEADER-CUSTOMERID ='XXXXXX'。
       json_req-REQUESTHEADER-REQUESTID ='1234567'。
       json_req-REQUESTHEADER-RETRYINDICATOR ='0'。

       json_req-TERMINALID ='XXXXXXXX'。
       json_req-PAYMENT-AMOUNT-value ='1'。
       json_req-PAYMENT-AMOUNT-currencycode ='CHF'。
       json_req-PAYMENT-ORDERID ='1234567'。
       json_req-PAYMENT-DESCRIPTION ='Studiengebühr'。

 数据lr_json_serializer类型参考cl_trex_json_serializer。


 创建对象lr_json_serializer导出数据= json_req。
 lr_json_serializer-> serialize()。
 lv_body = lr_json_serializer-> get_data()。


      数据:lo_json类型参考cl_clb_parse_json,
            lo_response类型参考if_rest_entity,
            lo_request类型参考if_rest_entity,
            lo_sql类型参考cx_sy_open_sql_db,
            状态TYPE字符串,
            原因TYPE字符串,
            响应TYPE字符串,
            content_length TYPE字符串,
            位置TYPE字符串,
            content_type TYPE字符串,
            lv_status TYPE i。
 *设置有效载荷或正文(JSON或XML)
      lo_request = lo_rest_client-> if_rest_client〜create_request_entity()。
      lo_request-> set_content_type(iv_media_type = if_rest_media_type => gc_appl_json)。


      lo_request-> set_header_field(iv_name ='接受'
                                    iv_value ='application/json')。


      lo_request-> set_string_data(lv_body)。


 *开机自检
      lo_rest_client-> if_rest_resource〜post(lo_request)。
 *收集回应
      lo_response = lo_rest_client-> if_rest_client〜get_response_entity()。
      http_status = lv_status = lo_response-> get_header_field('〜status_code')。
      原因= lo_response-> get_header_field('〜status_reason')。
      content_length = lo_response-> get_header_field('content-length')。
      location = lo_response-> get_header_field('location')。
      content_type = lo_response-> get_header_field('content-type')。
      响应= lo_response-> get_string_data()。
      万一。
 

付费偷看设置
发送
1条回答
哎,真难
1楼 · 2020-09-14 12:24.采纳回答

问题出在SSL证书上。

您必须小心,在目标位置,您可以选择所需的ssl证书类型。

需要选择匿名ssl证书。

如果不这样做,来自sap的认证将作为身份验证发送,然后禁止六个返回403,在这种情况下,这是真的...

一周热门 更多>