SAP ABAP 主动调用外部系统的REST接口(x-www-form-urlencoded)

如何在SAP ECC中调用外部系统提供的REST接口地址?

Postman中使用Body中参数情况,使用链接的情况

x-www-form-urlencoded

POST成功调用样例如下:

SAP中实现如下:

1. 事务码STRUST,导入对方系统证书

2. 事务码SM59配置destination

外部系统提供的接口地址:

https://dev-api.jushuitan.com/open/jushuitan/otherinout/upload

测试连接

返回200表示成功

3. 代码实现:

*&---------------------------------------------------------------------*
*& Report  ZTEST_JST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT ztest_jst."发送
DATA: lo_http_client  TYPE REF TO if_http_client.
DATA: lv_respon TYPE string.
DATA: lv_ssl_id   TYPE ssfapplssl VALUE 'ANONYM'.
DATA: lv_string TYPE string.
DATA: lv_timestamp TYPE string.
DATA: lv_sign TYPE string.
DATA: lv_biz TYPE string.
DATA: lv_jason TYPE string.
DATA: lv_hashstring TYPE string.
DATA: message TYPE string.
DATA: msgtyp TYPE char1."请求时间,时间戳格式(Unix 纪元到当前时间的秒数),API服务端允许客户端请求最大时间误差为10分钟。
DATA: lv_sydatum TYPE sy-datum,lv_syuzeit TYPE sy-uzeit."创建客户端请求
CALL METHOD cl_http_client=>create_by_destinationEXPORTINGdestination              = 'JST'IMPORTINGclient                   = lo_http_clientEXCEPTIONSargument_not_found       = 1destination_not_found    = 2destination_no_authority = 3plugin_not_active        = 4internal_error           = 5OTHERS                   = 6.
IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITHsy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.EXIT.
ENDIF."设定传输请求内容格式以及编码格式
lo_http_client->request->set_content_type( content_type = 'application/x-www-form-urlencoded;charset=UTF-8' )."设定调用服务
lo_http_client->request->set_method( if_http_request=>co_request_method_post ).lo_http_client->propertytype_accept_cookie = lo_http_client->co_enabled.lv_sydatum = sy-datum.
lv_syuzeit = sy-uzeit.
cl_pco_utility=>convert_abap_timestamp_to_java(
EXPORTINGiv_date      = lv_sydatum  "sy-datumiv_time      = lv_syuzeit  "sy-uzeit
IMPORTINGev_timestamp = lv_timestamp ).lv_timestamp = lv_timestamp(10) - 8 * 60 * 60.
CONDENSE lv_timestamp.lv_biz = '{"external_id": "2023111311287","type": "in","is_confirm": true,"items": [{"batch_id": "","qty": 120,"sku_id": "YC.01.0001","remark": "测试","expiration_date": "","sale_price": 0,"produced_date": ""}]}'.
CONDENSE lv_biz.lv_string = '99c4cef262f34ca882975a7064de0b87' && 'access_token' && 'b7e3b1e24e174593af8ca5c397e53dad'&& 'app_key' && 'b0b7d1db226d4216a3d58df9ffa2dde5' && 'biz' && lv_biz&& 'charset' && 'utf-8' && 'timestamp' && lv_timestamp && 'version' && '2'.
CONDENSE lv_string.CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'EXPORTINGalg            = 'MD5'data           = lv_stringIMPORTINGhashstring     = lv_hashstringEXCEPTIONSunknown_alg    = 1param_error    = 2internal_error = 3OTHERS         = 4.
lv_sign = lv_hashstring.
TRANSLATE lv_sign TO LOWER CASE.lv_jason = 'app_key=' && 'b0b7d1db226d4216a3d58df9ffa2dde5' && '&access_token=' &&'b7e3b1e24e174593af8ca5c397e53dad' && '&timestamp=' && lv_timestamp&& '&charset=' && 'utf-8' && '&version=' && '2' && '&sign=' && lv_sign&& '&biz=' && lv_biz.*在POSTMAN中,调用时自动将参数进行urlencode转换,调用如果需要,可以如上使用方法转换
*lv_time_64 = cl_http_utility=>escape_url( timestamp ).  "escape_url"设置待传输内容
lo_http_client->request->set_data( cl_abap_codepage=>convert_to( source = lv_jason ) )."发送请求
lo_http_client->send(  EXCEPTIONS http_communication_failure = 1http_invalid_state         = 2 ).IF sy-subrc <> 0."操作失败,获取失败原因lo_http_client->get_last_error( IMPORTING message = message ).msgtyp = 'E'.
ENDIF."读取远程服务返回的处理过结果。
lo_http_client->receive( EXCEPTIONS http_communication_failure = 1http_invalid_state         = 2http_processing_failed     = 3 ).
IF sy-subrc <> 0 ."lv_subrc = sy-subrc.lo_http_client->get_last_error( IMPORTING message = message ).msgtyp = 'E'.
ELSE."读取返回返回内容CLEAR lv_respon.lv_respon = lo_http_client->response->get_cdata( ).*  DATA: lv_xmldata TYPE xstring .
*  DATA: lt_result_xml TYPE STANDARD TABLE OF smum_xmltb,
*        ls_result_xml TYPE smum_xmltb.
*  DATA: lt_return TYPE STANDARD TABLE OF bapiret2 .*  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
*    EXPORTING
*      text   = lv_respon
*    IMPORTING
*      buffer = lv_xmldata.
*
*  CALL FUNCTION 'SMUM_XML_PARSE'
*    EXPORTING
*      xml_input = lv_xmldata
*    TABLES
*      xml_table = lt_result_xml
*      return    = lt_return."解析JSON串TYPES: BEGIN OF lty_recdata,msg TYPE string,code TYPE i,END OF lty_recdata.DATA:  ls_recdata TYPE lty_recdata.CLEAR:ls_recdata./ui2/cl_json=>deserialize( EXPORTING json = lv_responpretty_name = 'X'CHANGING data = ls_recdata ).ENDIF.
"关闭接口
CALL METHOD lo_http_client->close.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174751.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和

LeetCode T1143 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 动规五部曲分析 1.确定dp数组的含义 这里dp数组的含义是结尾分别为i-1,j-1的text1和text2的最长公共子序列长度 至于为什么是i-1,j-1我之前已经说过了,这里再…

房产中介租房小程序系统开发搭建:详细指南教你如何构建

随着微信小程序的日益普及&#xff0c;越来越多的企业和个人开始尝试开发自己的小程序。以下是制作一个房地产微信小程序的详细教程&#xff0c;希望对大家有所帮助。 一、注册登录乔拓云平台&#xff0c;进入后台 首先&#xff0c;需要注册并登录乔拓云平台&#xff0c;该平台…

【极客时间-系列教程】Vim 实用技巧必知必会-更多常用命令:应对稍复杂的编辑任务

文章目录 更多常用命令&#xff1a;应对稍复杂的编辑任务光标移动文本修改文本对象选择 更多常用命令&#xff1a;应对稍复杂的编辑任务 几个基本的命令已经了解了&#xff0c;可以操作简单的任务&#xff0c;但一些很复杂的命令&#xff0c;并没有了解到&#xff0c;只知道几…

文件上传 [ACTF2020 新生赛]Upload1

打开题目&#xff0c;发现是一道文件上传题目 随便上传个一句话木马上去 发现网站前端有白名单限制&#xff0c;只能上传含有jpg&#xff0c;png&#xff0c;gif的后缀文件 那我们便传个2.jpg的一句话木马上去&#xff0c;bp抓包 我们改成php文件后缀试试&#xff0c;发现重发…

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于入侵杂草优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

将铜互连扩展到2nm的研究

晶体管尺寸在3nm时达到临界点&#xff0c;纳米片FET可能会取代finFET来满足性能、功耗、面积和成本目标。同样&#xff0c;正在评估2nm铜互连的重大架构变化&#xff0c;此举将重新配置向晶体管传输电力的方式。 芯片制造商也可能会在2nm节点开始用钌或钼在一定程度上取代铜。…

【系统安装】ubuntu20.04安装,正经教程,小白安装教程,百分百成功安装

1、安装的前提是有启动盘&#xff0c;这个比较好处理&#xff0c;清华源找到ubuntu20.04.iso镜像文件下载&#xff0c;然后用Rufus来制作启动盘就可以了&#xff0c;需要注意的是目标文件系统需要是UEFI&#xff0c;其他的话就没太多要求了&#xff0c;如果卡在这一步的话&…

Java学习之路 —— 异常、集合

文章目录 1. 异常2. 集合2.1 遍历2.1.1 迭代器2.1.2 增强for循环2.1.3 Lambda 2.2 List2.3 Set2.3.1 HashSet2.3.2 LinkedHashSet2.3.3 TreeSet 2.4 Map 1. 异常 Exception&#xff1a;叫异常&#xff0c;是程序员可以捕捉的。异常又分为了2类&#xff1a; 运行时异常&#x…

Web安全:Vulfocus 靶场搭建.(漏洞集成平台)

Web安全&#xff1a;Vulfocus 靶场搭建.&#xff08;漏洞集成平台&#xff09; Vulfocus 是一个包含了多种漏洞靶场的镜像。每个靶场都有具体的漏洞环境和攻击点。Vulfocus 的靶场包括了 Web 安全漏洞、系统安全漏洞、网络安全漏洞、密码学漏洞等多种类型。通关这个靶场我们可以…

IP-guard flexpaper远程命令执行漏洞复现 [附POC]

文章目录 IP-guard flexpaper RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 IP-guard flexpaper RCE漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测…

【EI会议征稿】第四届环境资源与能源工程国际学术会议(ICEREE 2024)

第四届环境资源与能源工程国际学术会议&#xff08;ICEREE 2024&#xff09; 2024 4th International Conference on Environment Resources and Energy Engineering ICEREE&#xff08;2020-2023&#xff09;大会先后在珠海&#xff0c;昆明&#xff0c;长沙成功召开。会议主…

Adobe premiere裁剪视频尺寸并转为GIF格式

第 1 步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“ProRes RAW” 第 2 步&#xff1a;设置背景色 需要设置“颜色遮罩”的大小和颜色&#xff0c;颜色遮罩放在下面。 第 3 步&#xff1…