下方代码实现功能
1、联接Sqlserver数据库,取出发送消息清单
2、根据appid,secret获取企业微信token
3、根据消息清单类型决定发送客户消息还是内部员工消息
4、更新发送消标记
5、创建发送定时任务
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()