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的类型,并且还需要做其他处理,而表情也可以解析出来,图片上传那块也没出现问题。

### 使用微信公众号向指定用户推送消息 为了实现通过微信公众号向特定用户(如女友)发送个性化消息的功能,可以采用多种技术和方法来完成这一目标。以下是具体的技术方案和技术细节。 #### 技术选型与架构设计 后端服务可以选择使用 `Spring Boot` 结合 `RestTemplate` 来构建应用逻辑[^1]: ```java // 创建 RestTemplate 实例用于发起 HTTP 请求 @Bean public RestTemplate restTemplate() { return new RestTemplate(); } ``` 对于前端部分,则主要依赖于微信公众平台提供的接口和服务来进行交互。特别是针对订阅号类型的公众账号,开发者可以通过获取用户的 OpenID 并将其作为参数传递给 API 接口从而实现定向的信息推送功能。 另外一种方式是利用 Python 编程语言配合第三方库如 `requests` 或者框架比如 Flask/Django 进行开发,并借助 GitHub Actions 定时触发脚本执行或腾讯云函数提供更便捷的服务部署选项[^2]。 #### 数据源集成 无论是哪种编程环境的选择,在实际应用场景中往往还需要接入外部的数据源以增强用户体验感。例如,天气预报信息可以直接调用公开可用的API接口获得实时更新;而温馨的情话则可以从专门的情感语料数据库里随机抽取一条记录返回给接收方[^3]。 #### 自动化工具支持 考虑到手动配置和维护整个系统可能较为繁琐复杂,因此市场上也出现了不少专注于简化此类操作流程的产品——即所谓的“微信消息定时推送自动化平台”。这类服务平台通常允许用户无需深入了解底层技术原理就能轻松创建并管理自己的定制化内容推送计划。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值