sap原因代码配置路径_利用 SAP 云平台集成 S/4HANA 与企业微信审批方案 (上)

当前的互联网行业高速发展,各种社交软件,网络服务层出不穷,极大的丰富和便利了人们的生产和生活,SAP 作为传统的 ERP 软件,需要跟随时代的脚步,充分利用互联网的开放自由,多元化等优势,不再拘泥于企业内网限制,与多元化的互联网软件和服务相结合,实现 SAP Anywhere。
SAP 云平台 (SAP Cloud Platform 或 SCP) 是 SAP 当前和未来战略上主推的云产品解决方案,在未来,所有的客户应用程序都将依赖于云平台,部署在其上。SCP 底层使用当前市场上主流且成熟稳定的 Cloud Foundry 开源云平台作为其托管平台,能够做到应用程序的全生命周期管理,并支持多种框架、语言和运行时环境,如: GO、Ruby、Python、Nodejs、Java、ABAP、PHP 等,可以实现应用程序的快速部署。
今天我们以国内主流的企业微信为例,讲讲 SAP ERP 如何通过 SAP Cloud Platform 与企业微信相结合,实现采购订单的移动化审批,为企业的数字化之路添砖加瓦

在这篇文章中,我们将逐步为大家讲解具体的实现细节。鉴于篇幅受限,上篇主要涵盖创建自定义审批模板、验证回调服务器、编写回调验证 API、编写订单审批状态接收 API、安装 SCC 5 个步骤,其余操作我们将在下篇中再为您细细道来。

318ea5b5b5715c591d5dc195b37db218.pngSCP 云平台与企业微信集成的架构图

2d29d8013ae3e1b8208477b2ed999616.png

创建自定义审批模板

9519fa06ba00538f23706182a56eef74.png

为了实现企业微信的审批调用,我们首先需要通过企业微信官网 (https://work.weixin.qq.com/) 注册一个企业微信公司账号,之后根据公司的实际需求,创建一个自定义的审批模板,依次点击 “应用管理”->“应用”->“审批” 进入审批应用程序管理页面,如下图:

5c1a759b399bb9d73f9fc31c4e615be1.png

在管理页面启用审批功能并添加自定义模板,如下图:

315c2aa609c857ac819a552ebaf4c957.png自定义模板样例如下图:

99ae0e5cf9325d55fceebe2ec5fa4b30.png

2d29d8013ae3e1b8208477b2ed999616.png

验证回调服务器

9519fa06ba00538f23706182a56eef74.png

创建自定义审批模板之后,为了使企业微信能够与 SCP 进行交互,我们需要开启企业微信审批应用的 API 功能并配置接收审批事件的服 (SCP 上的应用程序),当模板审批申请状态发生变化时,企业微信将以事件形式推送相关信息到该服务,这是企业微信与 SCP 集成的桥梁。
在管理页面点击 API 图标,可以展开 API 配置页面 (请记住 AgentId 和 Secret,以备后续使用)。

7b36c28893ae19a28db74f393c4b6b98.png

对于第一次注册接收审批事件服务器的情况,企业微信要求对我们的服务进行验证,以确认我们的服务是可以状态,同时可以正确解析企业微信传递的信息。

2d29d8013ae3e1b8208477b2ed999616.png

编写回调验证 API

9519fa06ba00538f23706182a56eef74.png


按照以下步骤在 SCP 上创建我们的回调验证 API 服务:

第一步:在本机安装 Nodejs 库和 Cloud Foundry CLI 命令行工具;我们的整个应用使用 Nodejs 进行开发,使用 CLI 进行部署;


第二步:在本地新建一个名为 workwx 的文件夹,这是我们的项目目录;ffc83f972dd0e85c8392cfe6c7d6c7d5.png


第三步:命令行进入我们的项目目录,执行 npm init 命令初始化我们的项目 (使用默认选项);8dcac03fc66c7b00e80b90eaf25082c3.png


第四步:默认情况下我们的 Nodejs 项目入口文件为 index.js,在项目目录下创建一个 index.js 文件并打开,准备编写代码。

企业微信回调验证规则如下:

  • 企业微信使用 HTTPS Get 方法对回调 API 进行验证

  • Get 方法包含以下参数
    Msg_signature: 加密消息的 SHA1校验码
    Timestamp: 时间戳
    Nonce: 言值
    Echostr: 加密消息

  • 将参数 timestamp、nonce、echostr 和企业微信管理页面中预留的 Token 组成数组,并对其进行排序,排序后对结果进行 SHA1 加密,将加密后的结果与参数校验码 msg_signature 进行比较,如果相同,这说明加密消息完整,没有被篡改,如果不同,说明加密消息可能被解惑更改了。

    72b7df5bed8ec5511ab712f3bfaeff5a.png

  • 在消息未被篡改的前提下,对在企业微信管理页面中预留的 EncodingAESKey 进行 Base64 解码,在此之后通过将解码结果作为密钥,对 echostr 加密字串进行 AES 对称加密算法的解码工作,企业微信 AES 使用 CBC 模式,PKCS7 填充。

    a5025b9425a3d80e4ba71c49898e33cf.png

  • 将解密后的字符串结果去除多余无用的字符后响应给HTTPS Get请求完成回调 验证工作

在了解了上述验证规则后,使用 npm install 命令为我们的项目下载安装必要的功能库文件,并在 index.js 中引用它们:

804ac815fc3e083ad0e1d636fcb60ac8.png


之后按照企业微信的要求完成回调验证 API 的编写 (代码如下):

c1069d123b336a6f0edb9322fd5d3ce0.png

cee1f408906062d7a9969cebcad02e00.png

00416002faa630889b9fc01691389229.png

a4f78ffb84af8f782176a8a838d68869.png

第五步:API 编写完成后,在项目目录的上一层目录创建 manifest.yaml 文件,内容如下:

679b9ee1f15159fb511715c728658c4f.png

Memory 和 disk_quota 表示为项目分配的资源,buildpacks 表示项目使用的运行时环境包,command 对应项目的启动命令,routes 下则是用来为项目分配网络服务地址 (Url)。保存文件,在当前目录使用 cf login 命令登录 SCP 云平台:

39025041a9ac83dbb1410111e55a420d.png


登录成功后,使用 cf push 命令将 workwx 项目推送并部署到云平台:

25016854432ed04a8d3bb0e1e069b065.png


成功之后我们即可在 SCP 云平台上看到部署的应用程序:

5b197f3e80faeabe0fe3e60bc1b84158.png


回到企业微信审批 API 配置页面,点击接收事件服务器后的 “设置”,会进入到具体服务器地址的配置页面:

7983b7acfe11e457e077d7ec9e3cecb8.png

39e8c1eb063515824a73c3e6ae6852b2.png

在点击保存按钮之前,我们需要维护 URL 地址,可以将刚刚编写的 manifest.yaml 文件中 routes 下分配的网络地址和回调 API 的服务路径 (例子中的服务路径为/callback) 组合填写到 URL 框内,然后点击保存,如果一切正常,企业微信 API 会发起验证请求来验证我们的服务,一旦成功返回解密后的字符串,则企业微信验证成功,可以允许保存当前页面信息。

2d29d8013ae3e1b8208477b2ed999616.png

编写订单审批状态接收 API

9519fa06ba00538f23706182a56eef74.png

应用程序已编写的 HTTP Get 方法只是完成了对回调服务的验证,而真正需要接收处理审批状态变化信息的是 HTTP Post 方法,当企业微信端的任意审批申请发生状态变化时(新建,承认,拒绝等),企业微信将通过 HTTP Post 请求将状态信息以 XML 的格式发送到与验证服务相同的服务路径,对于其中敏感的数据部分将进行加密。了解了以上信息后,我们将完善我们的应用程序,为其添加 Post 方法来接收状态数据,同时对其进行解密,具体代码如下,完成后暂时不要重新部署该项目:

8422dfb053bae926c9ccda205b1c47b5.png


Aprmessage 函数用于接收,校验和解密消息:

6566652b5fe9cea69b7d9899ce482fdd.png

2d29d8013ae3e1b8208477b2ed999616.png

安装 SCC

9519fa06ba00538f23706182a56eef74.png

归根结底,我们的应用程序是为后端 ERP 系统服务的,每次接收到审批状态的变化信息而不将其同步到后端 ERP 系统,则失去了应用程序存在的意义,所以我们需要再为应用程序增加一个功能,当接收到审批状态信息的时候将其发送给后端 ERP 系统,更新对应的业务单据。
由于我们的 SCP 云平台在公网,而后端的 ERP 系统在局域网,在企业的网关和防火墙的限制下,它们是互不通信的,为了解决这个问题,我们需要通过一个叫做 SAP Cloud Connector (简称SCC) 的产品将两者联系起来,SCC 是一个由 SAP 开发的反向代理服务器 (通过Java虚拟机执行),需要安装在一台可以面向公网也能够连接后端 ERP 的机器上,通过它我们的 SCP 云平台可以主动使用加密通道访问后端 ERP 暴露的服务,将信息推送给后端系统,搭建系统间的桥梁。
要使用 SCC 首先需要在 SAP 工具网站上 (https://tools.hana.ondemand.com/#cloud) 找到适合自己的 SCC 版本进行下载:

532e8747bb688a05291d014618507b29.png


下载完成后,安装 (或解压) SCC,在程序目录中通过 go.bat 文件启动服务器,如果一切顺利我们将在控制台看到服务器的入口地址:

46707d535bd8fb5dffaa9ef19e16692e.png

通过浏览器访问该地址,会看到以下初始页面:

efac20f330298ac69a4bc55a5988b442.png


初始的用户名/密码为: Administrator/manage 登录后需要修改密码,之后进入主操作页面,在该页面将 SCC 绑定到指定地区的 SCP 平台和账号。

4b61e75c6b28b89cc280af6be8e320d2.png

Region: SCP云平台的地区
Subaccount: 子账号的 ID,可以在云平台上查看获取

52f5f16fb77eda083978e17c6c5e6ead.png

Login E-Mail: 登录 SCP 云平台的账号
Password: 登录 SCP 云平台的密码
保存后如果没有其它已经部署的 SCC 的话,页面会提示以下信息表示成功。

e8c4d345f605ddefed8681d690933ecd.png


目前我们已经成功的将 SCC 与云平台连接,下面我们需要将 SCC 与本地 ERP 系统进行连接,在 “Cloud To On-Premise” 页签下选择添加按钮并做以下设置:

525ffdd5654aa19e20a4f112db7fbc1a.png

fa902446c85bfadf8cc76397017bf816.png

b78eece32765ec89598a674fc36c577e.png

c23d483010d16de8cd416ddda4cc9df5.png

Internal Host 为后端 ERP 系统的地址。
Internal Port 为后端系统网络服务的端口号,HTTP 协议下的默认端口号为 “80+实例编号”。

ede76fc2d517af5aba8b8cbabeb19f16.png

Virtual Host 为在云平台上显示和使用的后端系统别名 (安全考虑)。
Virtual Port 为在云平台上显示和使用的后端端口别名 (安全考虑)。

82eb243b67224b860561a1e359f8da01.png

3e0f40080e848651ca7ef3ed25fd981e.png

42f2a75dba62ca70947d0b85c5c1a594.png

完成后我们可以看到 SCC 已经成功与后端 ERP 系统连接,但是出于安全考虑,此时的 SCC 并不能访问后端的系统资源,为了能够正常访问资源我们需要为 SCC 指定可以访问的后端资源路径,点击添加按钮并进行资源路径配置。

066e538d65548d51d0300ddbf1090cd8.png

781ec23c70c8bcbb37098c5631614c92.png

保存后我们的前后端系统就都已经可以正常连接了,SCC 的配置至此告一段落。

6a30d1467eab7b1623eb90280e1eb591.png

关于更详细的 SCC 配置和操作可以访问下面地址:
https://help.sap.com/viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/en-US/e6c7616abb5710148cfcf3e75d96d596.html
至此,我们已经完成了 SCC 的配置工作,我们将在《SAP 云平台与企业微信审批集成方案 (下)》一文中与您分享接下来的实现细节,包括: 编写推送订单状态信息到本地 ERP 系统函数、编写 ERP 端 OData 服务处理后端与 SCP 的信息交互、ERP 端通过增强抓取订单状态变化信息、编写抽取 ERP 系统订单状态信息到 SCP 的 API、编写作业调度服务用于周期抽取 ERP 系统订单状态信息,敬请期待。‍

✎ 作者简介 

罗斯
埃森哲大中华区企业创新技术事业部 
项目副经理

如果您或者您身边的技术大牛也想要分享与 SAP 云平台有关的开发内容和实用技巧,欢迎您积极投稿或者推荐。我们会进行适当筛选,并随后与作者沟通联系。投稿邮箱:gavin.du@sap.com

jiahui.zou01@sap.comkate.shen02@sap.com

往期回顾

  • SAP 云平台实用技巧之 Cloud Connector 篇
  • 通过 SAP CPI 实现 SAC 与 Ariba 的数据连接
  • 使用 SAP 云平台 Runtime 集成 Ariba 与企业微信
  • 基于 SAP 云平台的云应用授权管理 (上)
  • 使用 SAP Cloud Platform Custom Domain Service 设置个性化域名
  • 基于 SAP Cloud Application Programming Model 快速构建 MTA 工程
  • SCP 开发技巧 | 使用 SAP 云平台 Mobile Service 开发移动应用
  • SCP 技术干货 | 使用 SAP Cloud Platform IAS 安全策略做权限管理
  • 基于 SAP 云平台的云应用授权管理 (下)
  • 利用 SAP XSUAA 安全模块快速实现 Python 应用的认证和授权

8cdb6cbe25304a47bc2526ed27f5381f.png

ab48af475eb4ca5d5e8394d39a2e2948.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值