SAP HTTP调用其他系统接口
1业务说明
ABAP系统通过HTTP方式调用其他系统发布的接口
2代码实现
2.1认证接口
根据访问的URL创建HTTP客户端

设置访问方式,并调用SEND和接收函数

有时需要专门验证用户名密码

获取返回的HTTP访问状态和状态描述,并关闭接口

其中定义的接收内表需要按照JSON结构来定义


2.2具体接口
当获取TOKEN成功之后,就可以继续执行后续的某个业务功能接口了
仍然根据访问的接口URL创建HTTP客户端

设置传输格式,校验权限,访问方式

根据传入JSON,定义内表,并转换为JSON格式



同理,调用发送和接收函数,之后用相同方式获取返回的JSON数据,并将其转换为内表,做后续操作,方法和认证接口处理一致,不再赘述。
2.3源代码
"TOKEN的结构
TYPES: BEGIN OF TY_TOKEN,
ACCESS_TOKEN TYPE STRING,
TOKEN_TYPE TYPE STRING,
REFRESH_TOKEN TYPE STRING,
EXPIRES_IN TYPE STRING,
SCOPE TYPE STRING,
END OF TY_TOKEN.
"发送数据时的结构
DATA:BEGIN OF TY_DATILDATA OCCURS 0,
DATEFROM TYPE STRING,
DATETO TYPE STRING,
PAGE TYPE STRING,
SIZE TYPE STRING,
END OF TY_DATILDATA.
"编辑发送数据
DATA: BEGIN OF TY_SENDDATA,
PAYLOAD LIKE TY_DATILDATA,
END OF TY_SENDDATA.
"编辑接收数据
DATA: BEGIN OF TY_RECEIVEDATA,
PAYLOAD LIKE TY_DATILDATA,
DATA LIKE TABLE OF TY_DATILDATA,
END OF TY_RECEIVEDATA.
DATA:LS_TOKEN TYPE TY_TOKEN,
LS_SENDDATA LIKE TY_SENDDATA,
LS_RECDATA LIKE TY_RECEIVEDATA.
DATA: LV_LEN TYPE I, "发送报文长度
LV_URL TYPE STRING, "接口地址
LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT, "http客户端
LV_SEND_JSON TYPE STRING, "发送的JSON
LV_REC_JSON TYPE STRING, "接收的JSON
LV_AUTHORIZATION TYPE STRING,
LV_CODE TYPE I, "HTTP 返回状态
LV_REASON TYPE STRING. " HTTP 状态描述
START-OF-SELECTION.
CLEAR:LV_URL.
LV_URL = 'https://hostname/oauth/oauth/token'.
"创建http客户端
CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
EXPORTING
URL = LV_URL
IMPORTING
CLIENT = LO_HTTP_CLIENT
EXCEPTIONS
ARGUMENT_NOT_FOUND = 1
PLUGIN_NOT_ACTIVE = 2
INTERNAL_ERROR = 3
OTHERS = 4.
"不显示登录界面
LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.
"可以使用AUTHENTICATE方法专门验证用户名和密码,但本程序不适用
* DATA LV_USERNAME TYPE STRING.
* DATA LV_PASSWORD TYPE STRING.
* Lv_USERNAME = '1234567'.
* Lv_PASSWORD = '1234567'.
* CALL METHOD LO_HTTP_CLIENT->AUTHENTICATE
* EXPORTING
* USERNAME = Lv_USERNAME
* PASSWORD = Lv_PASSWORD.
"设置http method 为POST
LO_HTTP_CLIENT->REQUEST->SET_METHOD(
IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST
).
"IF_HTTP_ENTITY~CO_REQUEST_METHOD_GET
"发送
CALL METHOD LO_HTTP_CLIENT->SEND
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3
HTTP_INVALID_TIMEOUT = 4
OTHERS = 5.
"接收
CALL METHOD LO_HTTP_CLIENT->RECEIVE
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3.
"提取返回字符串
CLEAR:LV_CODE,LV_REASON.
CALL METHOD LO_HTTP_CLIENT->RESPONSE->GET_STATUS
IMPORTING
CODE = LV_CODE
REASON = LV_REASON.
"获取返回的JSON
CLEAR:LV_REC_JSON,LS_TOKEN.
LV_REC_JSON = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
/UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_REC_JSON
CHANGING DATA = LS_TOKEN ).
"关闭接口
CALL METHOD LO_HTTP_CLIENT->CLOSE.
"获取Token
CLEAR:LV_AUTHORIZATION.
LV_AUTHORIZATION = LS_TOKEN-ACCESS_TOKEN.
"如果有值,证明返回了正确的TOKEN,就可以继续
IF LS_TOKEN IS NOT INITIAL AND LV_CODE = '200'.
CLEAR:LV_URL.
LV_URL = 'https:// hostname/ssrc/v1/448/rgwd/price-library/list'.
"创建http客户端
CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL
EXPORTING
URL = LV_URL
IMPORTING
CLIENT = LO_HTTP_CLIENT
EXCEPTIONS
ARGUMENT_NOT_FOUND = 1
PLUGIN_NOT_ACTIVE = 2
INTERNAL_ERROR = 3
OTHERS = 4.
LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED.
"设定传输请求内容格式以及编码格式
LO_HTTP_CLIENT->REQUEST->SET_CONTENT_TYPE(
CONTENT_TYPE = 'application/json; charset=utf-8'
).
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
EXPORTING
NAME = 'Authorization'
VALUE = LV_AUTHORIZATION.
"设置http method 为POST
LO_HTTP_CLIENT->REQUEST->SET_METHOD(
IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST
).
"IF_HTTP_ENTITY~CO_REQUEST_METHOD_GET
CLEAR:LS_SENDDATA.
LS_SENDDATA-PAYLOAD-DATEFROM = '20191231 00:00:00'.
LS_SENDDATA-PAYLOAD-DATETO = '20191231 00:00:00'.
LS_SENDDATA-PAYLOAD-PAGE = 0.
LS_SENDDATA-PAYLOAD-SIZE = 50.
"SAP不区分大小写,JAVA/C会区分,
"一定让对方修改代码,不然只能SBB的拼接
CLEAR:LV_SEND_JSON.
LV_SEND_JSON = /UI2/CL_JSON=>SERIALIZE( LS_SENDDATA ).
"设置待传输内容长度
CLEAR:LV_LEN.
LV_LEN = STRLEN( LV_SEND_JSON ).
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
EXPORTING
DATA = LV_SEND_JSON
OFFSET = 0
LENGTH = LV_LEN.
"发送
CALL METHOD LO_HTTP_CLIENT->SEND
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3
HTTP_INVALID_TIMEOUT = 4
OTHERS = 5.
"接收
CALL METHOD LO_HTTP_CLIENT->RECEIVE
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3.
CLEAR:LV_REC_JSON.",LS_JSON.
LV_REC_JSON = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
"解析JSON串
CLEAR:LS_RECDATA.
/UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = LV_REC_JSON
PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
CHANGING DATA = LS_RECDATA ).
"关闭接口
CALL METHOD LO_HTTP_CLIENT->CLOSE.
IF LS_RECDATA IS NOT INITIAL.
"将获取到的数据做其他的操作
ELSE.
"报错
ENDIF.
ELSEIF LV_CODE <> '200'.
WRITE:LV_CODE.
WRITE:/ LV_REASON.
ENDIF.
SAP HTTP调用其他系统接口的更多相关文章
- Java 后台请求第三方系统接口详解
//调用第三方系统接口 PrintWriter out = null; BufferedReader in = null; JSONObject jsonObject = null; Closeabl ...
- SAP系统接口方式:
SAP系统接口方式: 1.PI - 信使中间件 (大公司多选择) 数据: SAP- PI- U8 U8- PI- SAPPI 底层用的还是webservice 技术优点:实时性高: 可处理大数据(在调 ...
- 【EWM系列】SAP EWM WCU和Non-SAP系统接口
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP EWM WCU和Non-SA ...
- Python OS模块标准库的系统接口及操作方法
Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...
- js调用百度地图接口
原文:js调用百度地图接口 这是前几天公司做的新项目,上面需要用到地图的数据.第一次做这类型的东西没啥思路,咱们经理说,这东西简单,截个图存文件夹里调整好尺寸,数据库里存上图片的地址动态调用就行了.心 ...
- UNIX系统接口
UNIX系统接口 8.1 文件描述符 UNIX操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件.系统通过文件描述符来标识文件:标准输入为0,标准输出为1,标准错误为2. 当程序 ...
- 调用支付宝第三方接口(沙箱环境) SpringMVC+Maven
一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登陆
- CAS 单点登录4.24版本 登录调用其它系统并且返回客户端用其它的用户信息改造
1.登录调用其它系统.修改deployerConfigContext.xml <?xml version="1.0" encoding="UTF-8"?& ...
- 调用微信JS-SDK接口上传图片
最近要在微信上做个问卷调查,有个上传图片功能,折腾找了半天资料,都不好弄,最终打算调用微信提供的上传图片接口,实现上传图片功能!此功能最大的好处是可以在微信服务器上暂存图片,减少本地服务器图片的缓存, ...
随机推荐
- vue的组件通讯
Vue的组件通讯又称组件传值 一.父子组件传值: 父组件: <子组件名 :动态变量名 (随便起)='你想要传递的数据' ></子组件名> 子组件: 利用 prop去接收父组 ...
- C - N皇后问题 DFS
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合法的放置方法. Inpu ...
- jdbctemplate打印sql
在logback.xml里加入如下配置即可: <include resource="org/springframework/boot/logging/logback/base.xml& ...
- Shell脚本日志关键字监控+告警
最近小张的爬虫程序越来越多,可当爬虫程序报错,不能及时的发现,从而造成某些重要信息不能及时获取的问题,更有甚者,遭到领导的批评.于是就在想有没有一种方法,当爬取信息报错的时候,可以通过邮件或者短信的方 ...
- C#开发BIMFACE系列32 服务端API之模型对比3:批量获取模型对比状态
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态>中介绍了根据对比ID,获取一笔记录的对比状态.由于模 ...
- 5. iphone 的:active样式
如果给按钮定义 :hover 样式,在 iPhone 上按钮点击一次是 hover 态,再点击一次 hover 态才会消失,这不是我们想要的,继而想通过定义 :active 样式来实现按钮按下时的效果 ...
- WinRAR代码执行漏洞复现
漏洞介绍 WinRAR 是一款流行的解压缩工具,据其官网上发布的数据,全球有超过5亿的用户在使用 2019年2月20日,安全厂商 checkpoint 发布了名为<Extracting a 19 ...
- Springboot:员工管理之首页(十(2))
访问首页可以通过两种方式: 1:编写controller 2:自定义扩展视图解析器(推荐使用) 1:编写Controller com\springboot\controller\IndexContro ...
- django基础(一) - 安装和配置文件
django介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C. <div style='color: red'> ...
- Jmeter与LoadRunner的比较
一.与Loadrunner的比较相似点 1.Jmeter的架构跟loadrunner原理一样, 都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务 ...