SAP 浅谈 Rest 接口应用接收篇

作者:郑德鼎 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

** 1 安全认证方式:token **

一般第三方基于 restful 的 api 接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做 token 的东西。

申请成功后,后面其他的支付请求都要带上这个token,服务端通过这个 token 验证请求的合法性。这个 token 通常都有一个有效期,一般就是几个小时。

** 2 要求对方提供:接口地址、接口示例、以及获取token所需参数(如使用token的话)。 **

以汇税通接口为例

**① token相关**

SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

**② 正式请求**

SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

** 3 程序开发 **

**① 获取token**

①-1 * 设置TOKEN地址

LV_URL = GS_URL-TOKEN_URL."此处地址可通过配置表维护并获取

①-2 * 创建token的http连接

CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL

EXPORTING

URL = LV_URL

IMPORTING

CLIENT = LO_HTTP_CLIENT_TOKEN

EXCEPTIONS

ARGUMENT_NOT_FOUND = 1

PLUGIN_NOT_ACTIVE = 2

INTERNAL_ERROR = 3

OTHERS = 4.

IF SY-SUBRC <> 0\.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH

SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

EXIT .

ENDIF.

① -3 * 设置获取token的参数,此处参数由对方系统提供

SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

①-4 * 设置请求方式 --根据第三方系统要求来

LO_HTTP_CLIENT_TOKEN->REQUEST->SET_METHOD( 'POST' ).

①-5 * 请求发送

LO_HTTP_CLIENT_TOKEN->SEND(

EXCEPTIONS

HTTP_COMMUNICATION_FAILURE = 1

HTTP_INVALID_STATE = 2

HTTP_PROCESSING_FAILED = 3

HTTP_INVALID_TIMEOUT = 4

OTHERS = 5 ).

①-6 * 获取返回值

LO_HTTP_CLIENT_TOKEN->RECEIVE(

EXCEPTIONS

HTTP_COMMUNICATION_FAILURE = 1

HTTP_INVALID_STATE = 2

HTTP_PROCESSING_FAILED = 3

OTHERS = 4 ).

①-7 * JSON转ABAP 反序列化拿到返回结构

CALL METHOD /UI2/CL_JSON=>DESERIALIZE

EXPORTING

JSON = LV_RESPONSE

CHANGING

DATA = LS_TOKEN. "

• 拿到token

GV_TOKEN = LS_TOKEN-ACCESS_TOKEN.

①-8 * 关闭http连接 -- 此步很重要,尤其对于程序内存在多次调用时。因sap服务器http最大连接数有限制,超出就会dump。

LO_HTTP_CLIENT_TOKEN->CLOSE( ).

**② 成功获取token后,调用正式请求地址** 其http总体调用框架跟token一致,不同点在于请求发送之前多出一步body的设置

②-1 维护字段映射关系

BEGIN OF TY_NAME_MAPPING,

ABAP TYPE ABAP_COMPNAME,

JSON TYPE STRING,

END OF TY_NAME_MAPPING ,

GTT_NAME_MAPPINGS TYPE HASHED TABLE OF TY_NAME_MAPPING WITH

UNIQUE KEY ABAP,

GT_MAPPING TYPE GTT_NAME_MAPPINGS.

SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

②-2 * 维护当前接口所需body部分字段值,将编辑好的数据内表LT_PAYLOAD转换成符合示例要求的json字符串

LV_BODY = /UI2/CL_JSON=>SERIALIZE( DATA = LT_PAYLOAD NAME_MAPPINGS =

GT_MAPPING COMPRESS = '' PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-NONE

NUMC_AS_STRING = 'X').

②-3 具体调用过程和token类似,以下为区别点

正式调用参数设置

LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD(

EXPORTING

NAME = 'Authorization'

VALUE = GV_TOKEN ).

LO_HTTP_CLIENT->REQUEST->SET_CONTENT_TYPE(

EXPORTING

CONTENT_TYPE = 'application/json' ).

在请求发送之前维护BODY数据

LV_LEN = STRLEN( LV_BODY ).

CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA

EXPORTING

DATA = LV_BODY

OFFSET = 0

LENGTH = LV_LEN.

SAP 浅谈 Rest 接口应用接收篇 - 封面图
SAP 浅谈 Rest 接口应用接收篇 - 封面图

作者:孔 倩

审核:郑 浩

编辑:王 锐

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP浅谈Rest接口应用接收篇.md」整理生成,仅用于内部技术分享与学习交流。