从ABAP调用https Web服务POST方法

2020-08-23 19:51发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 在尝试从2004...

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

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


大家好,

在尝试从2004s SP11的ABAP调用信用卡https Web服务时遇到一些问题。 我没有使用代理服务器,并且本地计算机上的测试https页面上的通话正常。 该页面不需要证书。

我需要做一些特别的事情来使https工作吗? 我已经成功拨打了http服务,没有任何问题。 就我所知,从编程角度来看,唯一的区别是方案2而不是1,并且服务器协议已更改为HTTPS。

一切正常,直到我调用方法http_client-> receive,这时我得到的返回码为1,即http_communication_failure。

您的建议和贡献将不胜感激。

干杯

Wouter。

 报告zcreditcardtest。

 数据:wf_user类型字符串。
 数据:wf_password类型字符串。

 数据:rlength类型i,
       txlen类型的字符串。

 数据:http_client类型ref到if_http_client。

 数据:wf_string类型string。
 数据:wf_string1类型string。

 数据:wf_proxy类型字符串,
       wf_port类型字符串。

 选择屏幕:从a块开始于frame。
 参数:crcard(16)类型c小写字母默认值'4242424242424242',
             cvn(4)输入c小写字母默认值'564',
             year(2)类型c小写字母默认值'07',
             month(2)输入c小写字母默认值'11',
             amount(10)类型c小写字母默认值'100.00',
             cukey(4)输入c小写字母默认值'AUD',
             order(10)输入c小写字母默认值'AB1322-refund'。

 选择屏幕跳过1。
 参数:user(50)小写,
             密码(50)小写,
             p_proxy(100)小写字母默认值``,
             p_port(4)默认''。

 选择屏幕:块a的结尾。

 在选择屏幕输出。

   在屏幕上循环播放。
     如果screen-name ='PASSWORD'。
       屏幕不可见=" 1"。
       修改屏幕。
     万一。
   结束循环。

 选择开始。


   清除wf_string。

   连接

   'order.type = capture&customer.username = SOMEUSER'
   '&customer.password = SOMEPASSWORD'
   '&customer.merchant = SOMEMERCHANT'
   '&card.PAN ='crcard
   '&card.CVN ='cvn
   '&card.expiryYear ='年
   '&card.expiryMonth ='月
   "&order.amount ="金额
   '&customer.orderNumber ='订单
   '&card.currency ='cukey
   '&order.ECI = IVR'
   '&customer.captureOrderNumber ='订单
   '&order.priority = 1'
   '&message.end = null'

   进入wf_string。

   断点。

   清除:rlength,txlen。
   rlength = strlen(wf_string)。
   移动:rlength到txlen。

   清除:wf_proxy,wf_port。

   移动:p_proxy到wf_proxy,
         p_port到wf_port。

   调用方法cl_http_client => create
     出口
       主机='api.somewhere.com'
       服务='80'
       scheme ='2'" https
       proxy_host = wf_proxy
       proxy_service = wf_port
     输入
       客户端= http_client。

   http_client-> propertytype_logon_popup = http_client-> co_disabled。

   wf_user =用户。
   wf_password =密码。

 *代理服务器认证
   调用方法http_client-> authenticate
     出口
       proxy_authentication ='X'
       用户名= wf_user
       密码= wf_password。

   调用方法http_client-> request-> set_header_field
     出口
       名称='〜request_method'
       值=" POST"。

   调用方法http_client-> request-> set_header_field
     出口
       名称='〜server_protocol'
       值=" HTTPS/1.0"。

   调用方法http_client-> request-> set_header_field
     出口
       名称='〜request_uri'
       值='/post/CreditCardAPIReceiver'。

   调用方法http_client-> request-> set_header_field
     出口
       名称="内容类型"
       值='application/x-www-form-urlencoded;  charset = UTF-8'。

   调用方法http_client-> request-> set_header_field
     出口
       名称="内容长度"
       值= txlen。

   调用方法http_client-> request-> set_header_field
     出口
       名称="主机"
       值='api.somewhere.com:80'。

   调用方法http_client-> request-> set_cdata
     出口
       数据= wf_string
       偏移量= 0
       长度= rlength。

   调用方法http_client-> send
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2。

   调用方法http_client-> receive
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3。

   如果sy-subrc <> 0。
     消息e000(oo)带有"处理失败!"。
   万一。

   清除wf_string1。

   wf_string1 = http_client->响应-> get_cdata()。

 *返回值的进一步处理将在此处进行。