楼阁台榭网

【Python】发送微信公众号消息(附完整代码)一一CSDN21天学习挑战赛

【Python】发送微信公众号消息(附完整代码)一一CSDN21天学习挑战赛


目录

  • 一、发送微信公众号注册
    • 注册测试号
    • 获取账号信息
    • 新增消息模板
  • 二、微信完整代码实现
    • 新建access_token.py文件
    • 新建send_message.py文件
    • 新建main.py文件
    • 运行main.py
  • 总结

本系列文章为参与【Python】CSDN21天学习挑战赛,公众成为更好的号消自己,根据自身的息附习挑学习进度并记录自己的学习过程。我也是代码Python纯小白,和大家一起学习,天学保持热爱学习的战赛好习惯😁

活动地址:CSDN21天学习挑战赛


一、微信公众号注册

微信公众号注册
微信公众号很多功能受限,发送需要开通微信认证
可以自动回复消息,微信完整但自动回复消息需要有自己的公众服务器对接(使用ngrok在本地也可以进行使用,但不稳定),号消就相当于是息附习挑我们发送消息给微信公众号平台,平台会把消息转给我们自己的代码服务器,我们服务器处理后提交给平台,天学平台再将消息发给用户。

微信公众号测试号
测试号基本功能全部都有,但是只能测试使用,我们使用测试号


注册测试号

点击登录
在这里插入图片描述
微信扫码登录就行
在这里插入图片描述


获取账号信息

登录成功后可以拿到appID和appsecret,这个稍后获取令牌需要用到
在这里插入图片描述
在用户列表可以拿到我们的微信号,稍后发送消息需要用到
在这里插入图片描述


新增消息模板

添加消息模板
在这里插入图片描述
填入模板内容
模板中的变量很好理解,{ { name.DATA}},那么我们post的json中就应该是{ "name":"小呆瓜"}
在这里插入图片描述
模板内容

尊敬的 { { name.DATA}}您的会员注册码是:{ { code.DATA}}请您保管好,打死不要告诉别人哦!

示例:
在这里插入图片描述
在这里插入图片描述


二、代码实现

项目结构
在这里插入图片描述


新建access_token.py文件

该文件主要负责获取access_token验证令牌
APPID需要填写自己的appID
APPSECRET需要填写自己的appsecret

#!/usr/bin/python# -*- coding: utf-8 -*-"""@Time :2022/8/19 10:20@Auth :小呆瓜@File :access_token.py@IDE :PyCharm@Description:获取access_token"""import requestsclass AccessToken(object):    # 微信公众测试号账号(填写自己的)    APPID = ""    # 微信公众测试号密钥(填写自己的)    APPSECRET = ""    def __init__(self, app_id=APPID, app_secret=APPSECRET) ->None:        self.app_id = app_id        self.app_secret = app_secret    def get_access_token(self) ->str:        """        获取access_token凭证        :return: access_token        """        url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={ self.app_secret}"        resp = requests.get(url)        result = resp.json()        if 'access_token' in result:            return result["access_token"]        else:            print(result)

新建send_message.py文件

TOUSER填写自己的微信号(是在测试号用户列表里的微信号)
TEMPLATE_ID填写自己的模板消息ID
CLICK_URL点击消息跳转的链接(可无)

#!/usr/bin/python# -*- coding: utf-8 -*-"""@Time :2022/8/19 10:20@Auth :小呆瓜@File :send_message.py@IDE :PyCharm@Description:发送微信公众号消息"""import jsonimport requestsfrom access_token import AccessTokenclass SendMessage(object):    # 消息接收者    TOUSER = ''    # 消息模板id    TEMPLATE_ID = ''    # 点击跳转链接(可无)    CLICK_URL = 'https://blog.csdn.net/sxdgy_?spm=1011.2415.3001.5349'    def __init__(self, touser=TOUSER, template_id=TEMPLATE_ID, click_url=CLICK_URL) ->None:        """        构造函数        :param touser: 消息接收者        :param template_id: 消息模板id        :param click_url: 点击跳转链接(可无)        """        self.access_token = AccessToken().get_access_token()        self.touser = touser        self.template_id = template_id        self.click_url = click_url    def get_send_data(self, json_data) ->object:        """        获取发送消息data        :param json_data: json数据对应模板        :return: 发送的消息体        """        return {             "touser": self.touser,            "template_id": self.template_id,            "url": self.click_url,            "topcolor": "#FF0000",            # json数据对应模板            "data": {                 "name": {                     "value": json_data["name"],                    # 字体颜色                    "color": "#173177"                },                "code": {                     "value": json_data["code"],                    "color": "#173177"                },            }        }    def send_message(self, json_data) ->None:        """        发送消息        :param json_data: json数据        :return:        """        # 模板消息请求地址        url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={ self.access_token}"        data = json.dumps(self.get_send_data(json_data))        resp = requests.post(url, data=data)        result = resp.json()        # 有关响应结果,我有整理成xml文档(官方全1833条),免费下载:https://download.csdn.net/download/sxdgy_/86263090        if result["errcode"] == 0:            print("消息发送成功")        else:            print(result)

新建main.py文件

#!/usr/bin/python# -*- coding: utf-8 -*-"""@Time :2022/8/19 10:20@Auth :小呆瓜@File :main.py@IDE :PyCharm@Description:微信公众号发送消息主文件"""from send_message import SendMessageclass Main(object):    def __init__(self) ->None:        """        构造函数        """        pass    def main(self) ->None:        # 实例SendMessage        sm = SendMessage()        # 获取接口返回数据        json_data = { "name": "小呆瓜", "code": "666666"}        # 发送消息        sm.send_message(json_data=json_data)if __name__ == '__main__':    main = Main()    main.main()

运行main.py

在这里插入图片描述
控制台打印成功,就接收到消息了
在这里插入图片描述


总结

这里只是用测试号演示,微信公众号需要认证才能发送客服消息和模板消息,普通消息只能对接自己服务器(发送消息给微信公众号->微信公众平台转发消息到配置的服务器地址->自己服务器处理消息->微信公众平台->微信公众号给用户回复消息),或者内网穿透使用本机也行,但这样不稳定。
我有个吃灰的树莓派4B 8G,后面捯饬捯饬要用起来了,把项目部署在树莓派上。


未经允许不得转载:楼阁台榭网 » 【Python】发送微信公众号消息(附完整代码)一一CSDN21天学习挑战赛