Python发送微信模板消息

1、根据appid,secret获取token

2、查找粉丝

3、指定模板及粉丝id发送模板消息

4、链接SqlServer数据库获取消息任务

5、创建定时任务监听消息

python 复制代码
from logging import exception
import time
import pymysql
import datetime;
from utils.http_utils import *;
from model.msg_wx_model import *;
from threading import Timer

appid = "wx*****";
appsecret = "****";   
template_id = '9uWUl0evW9o5Q5KPbZaa4WxpXOsHN9V28vWPG2T**'     #模板id
token = "";


#查找公众号所有的粉丝
def findUser():
    url = f"https://api.weixin.qq.com/cgi-bin/user/get?access_token={token}&next_openid=";
    result = httpGet(url,"");
    print(result);
    for row in result["data"]["openid"]:
        print(row);
        url =  "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + token + "&openid=" + row;
        jsonText = httpGet(url,"");
        print(jsonText);
        pass;

#指定粉丝发送模板消息
def send(userId, content):

    list = content.split('|');
    first = list[0]
    k1=list[1];
    k2=list[2];
    k3=list[3];
    k4=list[4];
    k5=list[5];
    remark = list[6];

    jsonstr =  "{'first':{ "\
                f"    'value':'{first}',"\
                "    'color':'#173177'"\
                "},"\
                "'keyword1': {"\
                f"    'value':'{k1}',"\
                "    'color':'#173177'"\
                "},"\
                "'keyword2': {"\
                f"    'value':'{k2}',"\
                "    'color':'#173177'"\
                "},"\
                "'keyword3': {"\
                f"    'value':'{k3}',"\
                "    'color':'#173177'"\
                "},"\
                "'keyword4': {"\
                f"    'value':'{k4}',"\
                "    'color':'#173177'"\
                "},"\
                "'keyword5': {"\
                f"    'value':'{k5}',"\
                "    'color':'#173177'"\
                "},"\
                "'remark':{"\
                f"    'value':'{remark}',"\
                "    'color':'#173177'"\
                "}}";

    jsonstr = jsonstr.replace("'", "\"")
    body = "{" + f'"touser":"{userId}", "template_id": "{template_id}", "url":"#", "data":{jsonstr}' + "}";
    data = json.loads(body);

    url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
    result = httpPost(url, data , "");
    print(result);

def getToken():  
    print("获取token...")
    url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret;
    result = httpGet(url,"");
    print(result);
    global token;
    token = result["access_token"];
    #Timer(60*60, getToken).start()

def sendMsg():
    now = datetime.datetime.now()
    ts = now.strftime('%Y-%m-%d %H:%M:%S')
    conn1 = pymysql.connect(host="xx.xx.xx.xx",port=3306,user="root",passwd="xxx",db="sxty_data" )
    cursor1 = conn1.cursor()
    print(ts + " 获取消息任务")
    sql = "select to_user,content,id from msg_wx where state = 0 "
    #print(sql)
    cursor1.execute(sql)
    data1 = cursor1.fetchall()
    #print(data1);
    for row in data1:
        userId = row[0];
        content = row[1];
        msgId = row[2];
        send(userId,content);
        msg = MsgWxModel();
        msg.cursor = cursor1;
        msg.conn = conn1;
        msg.id = msgId;
        msg.state = 1;
        msg.send_date = ts;
        msg.update();
    cursor1.close();
    conn1.close();

#获取token
def job0():
    try:
        getToken();        
    except Exception as reason:
        print(reason)
        pass;

    Timer(60*60, job0).start();       

#发送消息
def job1():

    try:
        sendMsg();        
    except Exception as reason:
        getToken();
        print(reason)

    Timer(5, job1).start();



print("消息服务已启动...")
job0();
job1(); 
  
#findUser();








 
相关推荐
AC赳赳老秦22 分钟前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
程序员雷欧35 分钟前
AQS深度解析
开发语言·python
玩三国杀玩的1 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习
Albert Edison1 小时前
PyCharm 字体大小设置
ide·python·pycharm
叠层归一研究院1 小时前
如何用程序搭建一个 AGI 种子系统(一):从向量种子到无限生长引擎
人工智能·python·算法·机器学习·agi
l1258652 小时前
# RAG重排序实战:硅基流动bge-reranker-v2-m3在线API vs 本地CrossEncoder,一篇讲透两种方案
数据库·人工智能·python·深度学习·算法·机器学习·langchain
问天_观心2 小时前
零基础在windows环境下的WSL使用llamafactory(一)
人工智能·windows·python·神经网络·语言模型·github·模型蒸馏
今天你AiPy了吗3 小时前
AI桌面助手的隐私底线 数据可落本地不出域,还能一键切换云端,全能智能体
人工智能·python·ai·ai编程·智能体
2601_956319883 小时前
近期手工规则转量化:按学习、表达、开发、验证推进
人工智能·python
青 春 记 忆3 小时前
LeetCode 104. 二叉树的最大深度|Python 解法详解
python·算法·leetcode