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()
相关推荐
玄同76512 分钟前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
Yorlen_Zhang23 分钟前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
HAPPY酷1 小时前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python
gpfyyds6662 小时前
Python代码练习
开发语言·python
aiguangyuan3 小时前
使用LSTM进行情感分类:原理与实现剖析
人工智能·python·nlp
小小张说故事3 小时前
BeautifulSoup:Python网页解析的优雅利器
后端·爬虫·python
luoluoal3 小时前
基于python的医疗领域用户问答的意图识别算法研究(源码+文档)
python
Shi_haoliu3 小时前
python安装操作流程-FastAPI + PostgreSQL简单流程
python·postgresql·fastapi
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:API接口开发的实现
python·学习·flutter
小宋10213 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python