亚马逊AWS官方博客
轻松使用 Serverless 架构实现微信公众号后台开发
背景介绍
随着微信公众平台发展,越来越多的商户选择使用微信公众号向客户发送一些重要的通知,例如商品购买通知,订单状态异常通知,信用卡刷卡通知等。
本文主要根据以上场景,使用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,其他默认即可。
测试发送微信消息通知
2.您可以在消息处选择发送以下内容(请注意替换您的templateId,以及openid。其他可以根据需要修改对应的值,或者默认即可。):
3.点击发送后您可以在微信中看到如下提醒,您可以尝试点击,会跳转到对应的超链接。这个链接就是在上一个步骤中填写的url。
到这里您就完成了基于AWS Serverless 的微信开发。
总结
在本文中主要简述了使用SNS + Lambda 方式发送微信通知,在生产系统中,我们可以通过把不同系统产生的通知消息发送到SNS,然后由lambda自动化处理消息通知。整套架构用到的服务都会按次触发,既降低运维难度又节约成本。
参考链接