前言
本章需创建好腾讯云账户 + 微信公众号 + python实现
并且如果想使用自己的服务器来配置微信公众号(必须要有域名不能使用ip地址
)。
这里我们使用的是腾讯云函数(创建成功后自带域名
)我们只要根据使用方法实现即可。
微信公众号文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
腾讯云函数使用文档:https://cloud.tencent.com/document/product/583
一、创建腾讯云函数
流程如下:
选择自定义创建->设置函数名称->往下拉到触发器配置
日志查询用于查看服务器请求打印
这里用来写我们视图函数(可以把event当做request,main_handler当作主函数
)
触发管理->访问路径就是我们微信公众号的服务器url了。
二、微信公众号接收实现
代码如下(index.py):
import json, hashlib, time
import xml.etree.ElementTree as ET
from reply import TypeMsg
def main_handler(event, context):
print(event)
if event['httpMethod'] == 'GET':
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {"Content-Type": "plain/text"},
"body": event['queryString']['echostr']
}
if event['httpMethod'] == 'POST':
webData = event.get("body", None)
xmlData = ET.fromstring(webData)
recMsg = TypeMsg(xmlData)
result = recMsg.send()
return result
创建一个reply.py用于处理一些微信公众号返回参数(不要在主函数写的太复杂
)。
代码如下(reply.py):
class TypeMsg(object):
def __init__(self, xmlData):
# 私有对象,禁止外部访问
self.__dict = dict()
self.__dict['ToUserName'] = xmlData.find('ToUserName').text
self.__dict['FromUserName'] = xmlData.find('FromUserName').text
self.__dict['CreateTime'] = xmlData.find('CreateTime').text
self.__dict['MsgType'] = xmlData.find('MsgType').text
self.__dict['MsgId'] = xmlData.find('MsgId').text
if self.__dict['MsgType'] == 'text':
self.__dict['Content'] = xmlData.find('Content').text
elif self.__dict['MsgType'] == 'image':
self.__dict['PicUrl'] = xmlData.find('PicUrl').text
self.__dict['MediaId'] = xmlData.find('MediaId').text
print(self.__dict)
def send(self):
result = getattr(self, self.__dict['MsgType'])
return result
@property
def text(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{ToUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[{MsgType}]]></MsgType>
<Content><![CDATA[{Content}]]></Content>
<MsgId>{MsgId}</MsgId>
</xml>
"""
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {"Content-Type": "application/xml"},
"body": XmlForm.format(**self.__dict)
}
@property
def image(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{ToUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[{MsgType}]]></MsgType>
<Image>
<MediaId><![CDATA[{MediaId}]]></MediaId>
</Image>
</xml>
"""
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {"Content-Type": "application/xml"},
"body": XmlForm.format(**self.__dict)
}
该类主要做用户类型处理(其他都是类似的,这里以图片、消息的接收进行处理
),具体可以参考微信公众号文档。
三、配置微信公众号服务器
提交完成后,我们可以返回云函数->日志查询,在前面中我们有打印了event参数,所有的信息都可以在里面看到,比如token的加密参数echostr(通过hashlib加密来实现的,本次示例没有使用验证token,作用是判别是否为本人操作
)。
此时微信公众号配置就已经部署成功了,剩下的功能都可以通过官方文档进行了解。
四、展示效果
为方便本次通过电脑登录微信的方式、手机发信息模拟进行演示。
演示如下:
可以看到对于动画图片而言也是基于text的类型,并且还需要做其他处理,而表情也可以解析出来,图片上传那块也没出现问题。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66840.html