CPI 系列透传 REST 服务并获取令牌及签名

作者:ABAP技巧与实战 约 8 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, Software Engineering, 开发, 数据工程, 软件工程

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

REST服务是目前接口调用最通用的方式,通用性似乎都超过了WEBSERVICE. 大部分的互联网公司都是用REST方式发布自己的服务.

并且通过https(加密), token(令牌),sign(签名)等机制确保通讯安全.

**本文主要讲解怎么通过CPI透传REST服务,并且在CPI中实现获取token及按特定算法加密获取sign(签名)**

感谢黄顾问配置IFlow,给作者机会学习IFow中的脚本写法.

Token and Sign

百度了一下Token和Sign的定义.

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

获取token(令牌)

一般的系统会发布一个特定的地址,用来供外围系统调用获取token.

比如腾讯企业微信的API中就有一个获取token的服务, token 一般会有个有效期, 在有效期内,token可以重复使用.

在所有其它REST服务中, 都需要在http header 或者 报文中添加 access_token.

服务对接收的token执行验证,验证通过再继续后续的处理.

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

获取sign(签名)

签名是对本次调用内容的合法性验证.

一般的签名算法是通过把报文的内容按特定规则组合,进行一次或多次MD5加密.

服务器会按照相同的算法再次加密,并且把加密后获取的sign与传输的sign 进行对比,通过后才进入服务的后续处理逻辑

CPI透传REST

CPI透传JSON的配置非常简单, 相对复杂的是在这个过程中获取token及签名

该配置的大致逻辑

• 检查传入的JSON中是否存在token,如果存在,则直接进入签名逻辑.

• 如果不存在token,准备调用token的报文,调用服务,获取token,并把获取的token加入报文中

• 按服务提供方提供的签名算法,执行加密过程

• 把签名结果加入报文中,调用REST服务

• 在返回结果中补充token信息,返回给调用方

• 如果调用方传入标记(只获取token和sign),则直接返回获取的token和sign.

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**01** _

**IFlow runtime configuration**

在IFlow的空白处点击,拖出底部窗口, 可以修改 runtime configuration. 这里可以限制https 允许的抬头参数

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**02** _

**CHECK TOKEN**

该节点是个脚本节点.通过GROOVY脚本获取报文信息,判断是否传入了token. 并且把传入报文的通用参数写入消息属性, 以便后续使用(包括原始报文).

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**03** _

**with token**

如果传入了有效的token.(token的有效性在发出系统判断,根据token的失效时间判断),直接执行签名步骤

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**04** _

**准备获取token的报文**

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**05** _

**token sign**

对获取token的报文添加签名. 通过脚本添加签名

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**06** _

**调用token获取**

通过 request replay 节点 调用外部系统的token服务, 获取token信息

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**07** _

**process token**

处理令牌

脚本节点, 通过脚本处理获取的token .

获取原始报文,添加token节点,同时把token相关信息写入消息的属性.以便后续使用

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**08** _

**获取签名失败**

如果获取签名失败, 结束

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**09** _

**sign**

签名,脚本节点

对于补充了token的原始报文,添加签名信息

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**10** _

**仅返回签名**

如果调用方传递了抬头参数 get_token_sign. CPI获取token和签名后结束IFlow, 原报文添加token和签名后返回

这个参数的目的: 通过POSTMAN测试目标系统的服务比较麻烦, 所以可以通过CPI服务添加get_token_sign参数来获取该接口的 token

,sign 信息, 然后补充在posman中,以便测试接口

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**11** _

**调用外部系统的服务**

通过request reply 节点调用外部系统的正式服务, 传递的报文在原报文基础上补充了token 及sign 部分.

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

_**12** _

**return token**

脚本节点

把token补充到外部服务返回的信息中.

以便调用系统能够保存token并在下次调用时根据token的失效日期判断是否可以直接使用.以便提高接口的效率(不必每次都调用获取token的接口)

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

S4/ECC端的调用

> S4/ECC端调用CPI详见链接 无峰,公众号:ABAP 技巧与实战 [ CPI系列 通用接口-数据写入FTP服务器csv文件

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487765&idx=1&sn=9a6a32c1dcd4711fb450c9cbb98f5431&chksm=cf5dcc23f82a4535a26f8753c6bd8e22f98ae1bfc2fb7264f5eb6e5df2a63c36e51d6a904f2a&token=2075697913&lang=zh_CN#rd)

需补充token的存储及有效token的使用逻辑

总结

通过rest方式 传输json报文可以让系统设计一个通用接口, 通过报文的内容识别具体传递的内容及后续处理方式.

CPI对于这类接口只需要把发出系统的报文透传到目标系统(需要的话,补充token获取或sign获取逻辑,

把相关信息补充到源报文中,再调用目标系统的REST服务).

本文给出了一个CPI通用的处理方式. 其中SIGN签名算法依赖于目标系统给出的逻辑. 其它部分比较通用.

groovy 脚本在CPI中可以比较方便的处理传递的消息.

groovy脚本中通过对message 的抬头,属性及body 的处理,可以改变源系统传递的报文内容.

groovy脚本中通过message 的属性,可以在各脚本间传递变量内容

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

CPI 系列透传 REST 服务并获取令牌及签名 - 封面图
CPI 系列透传 REST 服务并获取令牌及签名 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

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

来源说明:本文内容由「CPI系列透传REST服务并获取令牌及签名.md」整理生成,仅用于内部技术分享与学习交流。