点击此处---> 群内免费提供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()。 *返回值的进一步处理将在此处进行。
关于我的问题的更多信息,我正在尝试实现以下POST:
出于安全考虑,主机名已更改。
嗨,
另一个问题:
将在此示例中发布的变量" wf_string"。
此" wf_string"是否有限制?
如果是,那么POST请求的最大长度是多少?
感谢Joachim
嗨,
我没有使用HTTPS发布,但是在用于HTTP的测试程序中,我注意到有一个"〜request_protocol"头字段(值" HTTP/1.0")。
您也可以在发送/接收失败后尝试以下操作,以获得更多详细信息
呼叫方法http_client-> get_last_error
导入
消息= my_message。 "输入字符串
安德鲁
嗨,伍特
我正面临类似的问题。 您能再给我解释一下wf_string和主机如何填充??
预先感谢
今天愉快。
一周热门 更多>