背景介绍
随着微信公众平台发展,越来越多的商户选择使用微信公众号向客户发送一些重要的通知,例如商品购买通知,订单状态异常通知,信用卡刷卡通知等。
本文主要根据以上场景,使用 AWS Serverless (无服务器)架构实现微信交易通知,这样对于开发者来说就无需烦恼底层服务器的构建和运维等事宜,并且 Serverless 架构会随着需要发送的通知数量进行自适应的扩展,实现实时通知发送。
整体架构
本文介绍的消息通知系统使用目前流行的无服务器架构,实现步骤如下:
1.把需要通知的内容发送到 AWS SNS
2.然后通过 AWS Lambda 订阅 SNS 中的内容,实现简明的业务逻辑
3.使用 AWS Lambda 调用微信公众平台 API,把消息发到指定客户的微信
应用场景业务逻辑分析
在常见消息推送中,一般有几个要素:
1.需要推送给哪个客户
2.确认推送内容(本文指的是微信消息模版)
首先需要配置一个微信公众号测试账号,获取到相关通知要素以及对应的微信 API 接口。
准备工作
在开始之前,如果您还没有微信认证过的公众号,可以先申请一个微信公众号测试账号,申请链接:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 。点开后,使用个人微信号扫一扫确认就可以获取一个测试账号了,这个测试账号具有需要用到的微信高级接口权限。
完成申请操作之后,查看管理页面,并使用微信扫描关注测试公众号,页面如下:
您可以在上述测试号管理页面获取到测试号信息,以及用户关注列表。我们需要用到上述画红框的三个地方,分别是 appID,appsecret,以及微信号(下文称为 openid)。然后点击创建消息模版,这里已经为大家准备好了模版(请复制以下斜体内容,):
新增测试模版之后,复制您的模版 ID,如下图红框所示:
到这里为止您已经配置好了微信公众平台端,此时您应该已经关注了自己的微信公众号,并记录了以下参数(请注意替换成您的参数):
创建 AWS 资源
上一章节中,我们完成了微信公众号端的设置并拿到对应的开发者权限,那么又如何使用 AWS Serverless 的服务发送微信通知呢?
1.首先登陆 AWS 控制台并打开 Lambda 控制页面。例如北京区域 Lambda 配置页面是https://console.amazonaws.cn/lambda/home?region=cn-north-1#/,点击页面“创建函数”,输入函数名称,设置运行语言为 js8.10,在执行权限一部分,您可以,具体配置如下:
2.创建完 Lambda 之后,首先下载代码部署包,https://github.com/cncoder/awsinit/blob/master/lambdaLabs/sns2wechat.zip,然后如下图在lambda 页面选择上传代码,选择刚刚下载的 zip 代码包,并修改处理程序为“sns2wechatinlambda/index.handler”,再点击右上角保存。
3.部署 Lambda 代码之后,在当前 Lambda 页面修改第 6 和第 7 行代码(下图红框), 替换您在准备工作一节中从微信测试号获取的 appID 以及 appsecret,最后点击右上角保存。
4.配置完 lambda 之后,再设置 SNS 服务,例如北京区域 SNS 控制台页面是https://console.amazonaws.cn/sns/v2/home?region=cn-north-1#/home,打开之后点击页面“创建主题”,并输入主题名称,如下图所示:
5.创建完成会跳到主题详细信息页面,点击页面的“创建订阅”。
6.协议一项选择“AWS Lambda”,终端节点选择在第一步创建的 Lambda,其他默认即可。
测试发送微信消息通知
1.打开上述创建的 SNS 主题,并点击页面“发布到主题”
2.您可以在消息处选择发送以下内容(请注意替换您的 templateId,以及 openid。其他可以根据需要修改对应的值,或者默认即可。):
3.点击发送后您可以在微信中看到如下提醒,您可以尝试点击,会跳转到对应的超链接。这个链接就是在上一个步骤中填写的 url。
到这里您就完成了基于 AWS Serverless 的微信开发。
总结
在本文中主要简述了使用 SNS + Lambda 方式发送微信通知,在生产系统中,我们可以通过把不同系统产生的通知消息发送到 SNS,然后由 lambda 自动化处理消息通知。整套架构用到的服务都会按次触发,既降低运维难度又节约成本。
作者介绍:
谢佰臻
亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案的架构设计,在 AWS IoT , Serverless 方向有丰富部署实践经验。
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/easytouse-serverless-wechat-official-account-development/
评论