是的,你没听错,这一次我来带大家直接上手运营微信公众号。
本文来自 Serverless 社区用户「乂乂又又」供稿
震惊,Awesome,哼,我才不信捏,所谓无图无真相 ~
效果展示
更多的体验,可以关注我的微信公众号: 乂乂又又 (仅供测试,不要乱搞哈~)
嗯,这次我信了,快点教一下我吧,嘤嘤嘤~
操作步骤
在上一篇《万物皆可Serverless之使用SCF+COS快速开发全栈应用》教程中,
我们用腾讯云无服务器云函数 SCF 和对象存储实现了一个后端云函数,这个云函数可以根据我们的请求返回对应的结果。
现在我们将尝试在这个云函数的基础上解析微信 XML 消息,实现公众号消息的自动回复,关键词回复,文字菜单等功能。
第一步:添加相关依赖
为了快速完成开发,这里我们选择 python 第三方开源库 wechatpy 来接入微信公众平台。
wechatpy 支持以下功能
- 普通公众平台被动响应和主动调用 API
- 企业微信 API
- 微信支付 API
- 第三方平台代公众号调用接口 API
- 小程序云开发 API
可见功能是十分完整的,不仅支持普通公众平台主被动调用,企业微信和微信支付,甚至还支持第三方平台代公众号调用接口,拿来运营微信公众号是十分绰绰有余的~
由于腾讯云函数的运行环境中缺少第三方库,需要我们自己手动上传添加依赖,这里我们需要添加的第三方依赖有:wechatpy
、otionaldict
、xmltodict
以及 timeout\_decorator
其中 wechatpy
需要依赖 otionaldict
、xmltodict
,timeout\_decorator
是用来限制函数运行时长的,具体的依赖文件可以自行 pip 安装后 copy 到云函数项目根目录,如上图。
第二步:接入微信公众号
这里需要记下自己的 AppID、Token 和 EncodingAESKey,消息加密方式建议选为安全模式。这个页面先不要关,一会儿上线发布好云函数还需要过来再次修改配置。
第三步:编写云函数解析并回复微信公众号消息
这一步可以直接参考 wechatpy 的官方文档
Life is short, show me the code.
这里我就直接上代码了(原始业务代码已略去,可以按照自己的需求开发)
import json
import timeout_decorator
from wechatpy.replies import ArticlesReply
from wechatpy.utils import check_signature
from wechatpy.crypto import WeChatCrypto
from wechatpy import parse_message, create_reply
from wechatpy.exceptions import InvalidSignatureException, InvalidAppIdException
# 是否开启本地debug模式
debug = False
# 腾讯云对象存储依赖
if debug:
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from qcloud_cos import CosServiceError
from qcloud_cos import CosClientError
else:
from qcloud_cos_v5 import CosConfig
from qcloud_cos_v5 import CosS3Client
from qcloud_cos_v5 import CosServiceError
from qcloud_cos_v5 import CosClientError
# 配置存储桶
appid = '66666666666'
secret_id = u'xxxxxxxxxxxxxxx'
secret_key = u'xxxxxxxxxxxxxxx'
region = u'ap-chongqing'
bucket = 'name'+'-'+appid
# 对象存储实例
config = CosConfig(Secret_id=secret_id, Secret_key=secret_key, Region=region)
client = CosS3Client(config)
# cos 文件读写
def cosRead(key):
try:
response = client.get_object(Bucket=bucket, Key=key)
txtBytes = response['Body'].get_raw_stream()
return txtBytes.read().decode()
except CosServiceError as e:
return ""
def cosWrite(key, txt):
try:
response = client.put_object(
Bucket=bucket,
Body=txt.encode(encoding="utf-8"),