写点什么

SAP 系统和微信集成的系列教程之二:如何通过微信公众号消费 API

作者:Jerry Wang
  • 2022 年 9 月 06 日
    四川
  • 本文字数:1988 字

    阅读完需:约 7 分钟

SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API

系列目录


(1) 微信开发环境的搭建


(2) 如何通过微信公众号消费 API(本文)


(3) 微信用户关注公众号之后,自动在 SAP C4C 系统创建客户主数据


(4) 如何将 SAP C4C 主数据变化推送给微信公众号


(5) 如何将 SAP UI5 应用嵌入到微信公众号菜单中


(6) 如何通过 OAuth2 获取微信用户信息并显示在 SAP UI5 应用中


(7) 使用 Redis 存储微信用户和公众号的对话记录


(8) 微信公众号的地图集成


(9) 如何将微信用户发送到微信公众号的消息保存到 SAP C4C 系统


(10) 如何在 SAP C4C 系统直接回复消息给微信公众号的订阅者


最近有不少朋友在社区上向笔者咨询 SAP 系统和微信公众号集成的问题,因此笔者把以前自己做过的系统集成项目的一些经验,分享到 InfoQ 社区上,希望对相关从业者有所帮助。


和微信公众号集成的 SAP 系统,我三年前选择的是 SAP Cloud for Customer.


始终牢记我们这个系列的目标是学会如何用微信公众号同 SAP 系统(SAP Cloud for Customer,以下简称 C4C)集成。要实现这个目标,就得通过微信公众号消费 SAP C4C 的 OData API.


作为学习的第一步,我们首先学习如何在微信公众号调用普通的 API,而非 SAP C4C OData API.


假设这样一个简单的场景:用户关注微信公众号之后,通过微信 app 给公众号发送一些文字信息。公众号收到这些文字信息,会转发给我们在本系列第一篇文章 微信开发环境的搭建 里提到的微信消息服务器。此时微信消息服务器接收到转发过来的文字信息后,调用一些具有人工智能的 API,将 API 的响应通过微信 app 回复给用户。



绑定了微信消息服务器的微信公众号,在这个场景里扮演的其实就是一个简单的聊天机器人的角色。用户和微信公众号通过一问一答的方式进行交互。



Jerry 还记得上大学的时候,学习《Unix 网络编程》这门专业课,一个练习就是,通过套接字自行实现一对客户端和服务器,客户端发送一个字符串给服务器,服务器接收后原封不动地将其返回,即所谓的 Echo Server.


在动手实现微信聊天机器人之前,我们先降低难度,实现一个简单的微信 echo 服务,即无论用户发送任何信息给公众号,都会收到信息本身,再加上"Add by Jerry"的前缀。



本文用到的项目完整源代码,在我的Github能够下载。


首先在 server.js 里,利用 nodejs express 库启动一个 web 服务器:



上图第二行 routesEngine 的实现,位于 index.js 里。微信 app 收到用户通过微信 app 发送的文本消息时,会通过一个 HTTP POST 请求转发给微信消息服务器。微信消息服务器接收到该请求后,调用第五行的 echoService 处理:



echoService 的实现位于文件 echo.js 中:首先从变量 req 包含的 HTTP 请求中,将用户输入的文本信息解析出来(第 11 行),然后加上"Add by Jerry: "的前缀,并将结果存储在变量 content 里(第 13 行), 最后调用自己开发的工具方法 replyMessage,将加上前缀的文本信息返回给用户。



上图第 15 行的 replyMessage 工具方法,需要从微信 app 转发给微信消息服务器的 HTTP POST 请求里, 解析出发送消息的微信用户 id,然后再将拼接了"Add by Jerry: "前缀的内容发送给该 id 标识的微信用户。


replyMessage 的实现位于replyMessage.js中:



var getXMLNodeValue = require("./xmlparse.js");
module.exports = function(originalBody, contentToReply){
var ToUserName = getXMLNodeValue('ToUserName', originalBody); var FromUserName = getXMLNodeValue('FromUserName',originalBody); var CreateTime = getXMLNodeValue('CreateTime',originalBody); // var MsgType = getXMLNodeValue('MsgType',originalBody); var MsgType = "<![CDATA[text]]>"; // only support text reply for the moment 2017-12-10 9:57PM var Content = contentToReply; var MsgId = getXMLNodeValue('MsgId', originalBody); var xml = '<xml><ToUserName>'+FromUserName+'</ToUserName><FromUserName>'+ToUserName+'</FromUserName><CreateTime>'+CreateTime+'</CreateTime><MsgType>' + MsgType + '</MsgType><Content>'+Content+'</Content></xml>'; console.log("xml to be sent: " + xml); return xml;};
复制代码

有了 Echo Service 的实现经验之后,再实现微信聊天机器人就没有什么难度了。


只需要把 index.js 里接收到 HTTP Post 请求之后的操作,从调用 echoService 改成调用新的实现,tuningService 即可。



调用图灵 API 的 tuningService 函数的实现源代码在这里下载。


笔者当年做项目的时候,使用的图灵 API 是如下网站提供的:



申请一个 API key, 粘贴到下图第 6 行的 url 里:



将用户输入的文本信息解析出来,存储到第 20 行的 body 变量里,使用 encodeURI 处理之后,直接拼接到图灵 API url 尾部,然后第 27 行使用 request 函数调用图灵 API. 在匿名回调函数里获得 API 的响应,最后调用工具方法 replyMessage 将响应通过微信消息服务器发送给微信 app.


本系列的下一篇文章,我们会真正开始和 SAP 系统的集成:每当新的微信用户关注微信公众号时,我们会自动为该微信用户在 SAP C4C 系统创建一个客户主数据。


感谢阅读。

发布于: 刚刚阅读数: 4
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API_API_Jerry Wang_InfoQ写作社区