IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python + 腾讯云函数 实现微信公众号开发 -> 正文阅读

[Python知识库]python + 腾讯云函数 实现微信公众号开发


前言

本章需创建好腾讯云账户 + 微信公众号 + 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的类型,并且还需要做其他处理,而表情也可以解析出来,图片上传那块也没出现问题。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:07:15  更:2021-09-12 13:07:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:30:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码