Python 发送企业微信消息

下方代码实现功能

1、联接Sqlserver数据库,取出发送消息清单

2、根据appid,secret获取企业微信token

3、根据消息清单类型决定发送客户消息还是内部员工消息

4、更新发送消标记

5、创建发送定时任务

python 复制代码
from datetime import datetime
import time
import threading
from queue import Queue
from queue import Empty
import pymssql
from http_utils import *

class UserMsgServer(object):


    def init(self):
        self.connect = pymssql.connect('xxxxxx:6229', 'user_name', 'pass', 'HD_Common')  #建立连接
        if self.connect:
            print("连接成功!")
        self.appid = None;
        self.secret_abs = None;
        self.secret_kh = None;
        self.agentid = None;
        self.token_abs = None;
        self.token_kh = None;


    def getToken(self):
        url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.appid}&corpsecret={self.secret_abs}"
        result = httpGet(url)
        self.token_abs = result["access_token"]
        print(self.token_abs)
        url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.appid}&corpsecret={self.secret_kh}"
        result = httpGet(url)
        self.token_kh = result["access_token"]
        print(self.token_kh)
        pass


    #发送给内部员工
    def send(self, userId, conent):

        url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + self.token_abs
        print(url)
        data = {
            "touser" : userId,
            "toparty" : "",
            "totag" : "",
            "msgtype" : "text",
            "agentid" : self.agentid,
            "text" : {
                "content" : conent
            },
            "safe":0,
            "enable_id_trans": 0,
            "enable_duplicate_check": 0,
            "duplicate_check_interval": 1800
        }
        result = httpPost(url, data)
        print(result)
        return result["errcode"]
        pass

    #发送给客户
    def send1(self, userId, sender, conent):

        url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_msg_template?access_token=" + self.token_kh + "&debug=1"
        print(url)
        data = {
            "chat_type": "single",
            "external_userid": [
                userId
            ],
            "sender": sender,
            "text": {
                "content": conent
            }
        }
        result = httpPost(url, data)
        print(result)
        return result["errcode"]
        pass    

    def sendMsg(self):
        cursor = self.connect.cursor()   #创建一个游标对象,python里的sql语句都要通过cursor来执行
        sql = "select IndexId,UserId,Content,UserType from W_UserMessage where state = 0 and (ISNULL(PlanFlag,0)= 0 or (ISNULL(PlanFlag,0)= 1 and PlanTime <= GETDATE()))"
        cursor.execute(sql)   #执行sql语句
        row = cursor.fetchone()  #读取查询结果,            
        index = 1    
        while row:            #循环读取所有结果
            if index == 1:
                self.getToken();  #获取token

            id = row[0]
            userId = row[1]
            content = row[2]
            userType = row[3]
            
            print("发送消息给"+ userId +",content=" + content)
            if userType == "guest":
                users = userId.split('|');
                sender = "";
                if len(users) > 1:
                    userId = users[0];
                    sender =  users[1];
                    
                result = self.send1(userId, sender, content)
                self.updateMsg(id, result)

            else:    
                result = self.send(userId,content)
                self.updateMsg(id, result)
                
                           
            row = cursor.fetchone()
            index = index + 1
            time.sleep(1)
            
        
    def updateMsg(self,id, result):

        print("result")
        print(result);
        cursor = self.connect.cursor()
        if result == 0:
             cursor.execute(f"update W_UserMessage set state=1 where IndexId={id}")
        else:
             cursor.execute(f"update W_UserMessage set state=-1 where IndexId={id}")
             
        self.connect.commit()  #提交
        

    # 每n秒执行一次
    def job(self):
        while True:
            #print(datetime.now().strftime("%Y-%m-%d  %H:%M:%S"))
            try:
                self.sendMsg()
                time.sleep(3)      
            except Exception as reason:
                print(reason)
                

        
userMsgServer = UserMsgServer()
userMsgServer.init()
userMsgServer.appid = "wwe72868b229a****"
userMsgServer.secret_abs = "sGbP3HiG2e4ciZFuqyiHlAxnHvmY_Xlku8B7******"
userMsgServer.secret_kh = "Xw24GyBQCDj_IEJL7Sv1Sd1eSRGUJLo*******"
userMsgServer.agentid = 1000012
userMsgServer.job()
相关推荐
北冥有鱼被烹4 分钟前
砷化镓与磷化铟:光模块的地基——从化学键到AI缺货潮的底层逻辑
人工智能·python
for_ever_love__1 小时前
线性回归与梯度下降——从零手写一个模型
python·机器学习·线性回归·梯度下降
code_whiter2 小时前
7.自动化测试常用函数
python·功能测试
小园子的小菜2 小时前
Python协程深度解析:从原理演进到实战避坑
后端·python
砚底藏山河2 小时前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven
GitFun3 小时前
给策略加了条-8%止损线,11年只触发1次
python·股票·量化交易
马六六i3 小时前
市面上正规的IP驱动产业新场景新工具有哪些
大数据·网络·python·tcp/ip
I Am a robert girl4 小时前
稀有事件估计的迭代去对齐:从源码视角拆解重要性采样新范式
开发语言·python·机器学习·重要性采样·蒙特卡洛方法·稀有事件估计
天若有情6734 小时前
开源|Comfort Lang v1.0.1,一款主打清爽交互的新型命令式编程语言
python·开源·交互·编程语言·项目分享·repl·comfort lang
打工仔折腾 AI5 小时前
System Prompt 替代 Few-shot:用规则约束大模型输出的省钱实践
java·人工智能·python·spring·langchain·prompt·ai agent 实战