亚马逊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)。然后点击创建消息模版,这里已经为大家准备好了模版(请复制以下斜体内容,):

{{first.DATA}}

商品明细

名称: {{keyword1.DATA}}

价格:{{keyword2.DATA}}

交易时间:{{keyword3.DATA}}

{{remark.DATA}}



新增测试模版之后,复制您的模版ID,如下图红框所示:

到这里为止您已经配置好了微信公众平台端,此时您应该已经关注了自己的微信公众号,并记录了以下参数(请注意替换成您的参数):

appid = ‘wx12345ab3cd4ef53’

appsecret = ‘

openid = ‘opvZu1WamXXXXXXXXXSR_5AXXXXCE’

templateId = ‘fTjKg-CDFxV5ZemUSR241mAKehXXXXXbSYoGCe3lb4’

创建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。其他可以根据需要修改对应的值,或者默认即可。):

{

"templateId": " fTjKg-CDFxV5ZemUSR241mAKehXXXXXbSYoGCe3lb4",

"url": "z.cn",

"openid":" opvZu1WamXXXXXXXXXSR_5AXXXXCE",

"first":"跨境交易提醒!",

"keyword1":"海淘...",

"keyword2":"$100.00",

"keyword3":"2019年03月18日",

"remark":"点击查看详情"

}




3.点击发送后您可以在微信中看到如下提醒,您可以尝试点击,会跳转到对应的超链接。这个链接就是在上一个步骤中填写的url。

 

到这里您就完成了基于AWS Serverless 的微信开发。

总结

在本文中主要简述了使用SNS + Lambda 方式发送微信通知,在生产系统中,我们可以通过把不同系统产生的通知消息发送到SNS,然后由lambda自动化处理消息通知。整套架构用到的服务都会按次触发,既降低运维难度又节约成本。

 

参考链接

带您玩转Lambda,轻松构建Serverless后台!

AWS SNS服务介绍

Wechat API

 

本篇作者

谢佰臻

亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案的架构设计,在 AWS IoT , Serverless 方向有丰富部署实践经验。