python + 腾讯云函数 实现微信公众号开发

导读:本篇文章讲解 python + 腾讯云函数 实现微信公众号开发,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


前言

本章需创建好腾讯云账户 + 微信公众号 + python实现

并且如果想使用自己的服务器来配置微信公众号(必须要有域名不能使用ip地址)。

这里我们使用的是腾讯云函数(创建成功后自带域名)我们只要根据使用方法实现即可。

微信公众号文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

腾讯云函数使用文档:https://cloud.tencent.com/document/product/583

一、创建腾讯云函数

流程如下:
在这里插入图片描述
在这里插入图片描述
选择自定义创建->设置函数名称->往下拉到触发器配置

在这里插入图片描述
选择触发方式为aip网关触发->完成->跳转到云函数

在这里插入图片描述

日志查询用于查看服务器请求打印

在这里插入图片描述
这里用来写我们视图函数(可以把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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!