从ABAP调用https Web服务POST方法

2020-08-23 19:51发布

         点击此处--->   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()。

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

         点击此处--->   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()。

 *返回值的进一步处理将在此处进行。
 
付费偷看设置
发送
4条回答
绿领巾童鞋
1楼-- · 2020-08-23 20:51

关于我的问题的更多信息,我正在尝试实现以下POST:

 POST/post/CreditCardAPIReceiver HTTPS/1.0
 内容类型:application/x-www-form-urlencoded;  charset =" UTF-8"
 内容长度:315
 主持人:api.somewhere.com:80

 order.type = capture&customer.username = COMPANYA&customer.pas
 sword = insurance&customer.merchant = companya&card.PAN = 424242
 4242424242&card.CVN = 564&card.expiryYear = 10&card.expiryMont
 h = 06&order.amount = 3400&customer.orderNumber = AB1322退款&c
 ard.currency = AUD&order.ECI = IVR&customer.captureOrderNumber
 = AB1322&order.priority = 1&message.end = null
 

出于安全考虑,主机名已更改。

樱桃小丸子0093
2楼-- · 2020-08-23 20:34

嗨,

另一个问题:

将在此示例中发布的变量" wf_string"。

此" wf_string"是否有限制?

如果是,那么POST请求的最大长度是多少?

感谢Joachim

SAP小菜
3楼-- · 2020-08-23 20:53

嗨,

我没有使用HTTPS发布,但是在用于HTTP的测试程序中,我注意到有一个"〜request_protocol"头字段(值" HTTP/1.0")。

您也可以在发送/接收失败后尝试以下操作,以获得更多详细信息

呼叫方法http_client-> get_last_error

导入

消息= my_message。 "输入字符串

安德鲁

SC_Yao
4楼-- · 2020-08-23 20:40

嗨,伍特

我正面临类似的问题。 您能再给我解释一下wf_string和主机如何填充??

预先感谢

今天愉快。

一周热门 更多>