Python 发送企业微信消息

下方代码实现功能

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_absprint(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();  #获取tokenid = 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 + 1time.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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握未来设计趋势,开启AutoCAD2020创新之旅!

随着科技的不断发展&#xff0c;设计行业也在迅速演进&#xff0c;为满足设计师们日益增长的需求&#xff0c;Autodesk AutoCAD2020应运而生。作为一款全球领先的设计软件&#xff0c;AutoCAD2020不仅拥有更加强大的功能和更高效的性能&#xff0c;还融入了一系列的智能化设计工…

nrm安装以及常用命令

做为开发者&#xff0c;我们经常会使用到淘宝镜像去安装一些包。基本上设置的都是cnpm这种。但是这一长串其实很难记住。这时&#xff0c;我们可以用nrm进行镜像的切换更为方便。 npm install -g cnpm --registryhttps://registry.npm.taobao.org 安装方法 npm install nrm …

python实现多线程并发测试并生成excel报告

目录 一、技术背景 二、技术实现 1、设计思路步骤: 2、完成的代码如下:

vue给table组件添加合计

在 Vue 3 中&#xff0c;你可以使用 v-on:click 事件监听器来处理点击事件&#xff0c;并将数据添加到表格的第一行。假设你正在使用 Element UI 的表格组件&#xff0c;并且你想要在点击事件中添加一个合计行&#xff0c;你可以按照以下方式进行&#xff1a; <template>…

在java中如何读取数据库中的内容

1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月 20 22 25 28 30 33 35 34 32 28 24 21 -8 8 10 15 18 -22 -24 -24 -21 -16 -50 -20 package bbb;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;p…

Kotlin(十三) 延迟初始化和密封类

对变量延迟初始化 延迟初始化使用的是lateinit关键字&#xff0c;它可以告诉Kotlin编译器&#xff0c;我会在晚些时候对这个变量进行初始化&#xff0c;这样就不用在一开始的时候将它赋值为null了。示例如下&#xff1a; class MainActivity : AppCompatActivity() {private …

网页开发 JS基础

目录 JS概述 基本语法 数据类型内置方法 DOM对象 查找标签 绑定事件 操作标签 jQuery 查找标签 绑定事件 操作标签 Ajax请求 数据接口 前后端分离 ajax的使用 JS概述 一门弱类型的编程语言,属于基于对象和基于原型的脚本语言. 1 直接编写<script>console…

香港专才计划(输入内地人才计划)申请条件?附官网和申请攻略、利弊!

香港专才计划&#xff08;输入内地人才计划&#xff09;申请条件&#xff1f;附官网和申请攻略、利弊&#xff01; 输入内地人才计划&#xff08;英语&#xff1a;Admission Scheme for Mainland Talents and Professionals (ASMTP)&#xff09;&#xff0c;俗称专才计划&#…

element中el-input限制只输入正整数或保留两位小数

文章目录 一、前言二、实现2.1、HTML2.2、只输入正整数2.3、只能输入数字或小数点 三、最后 一、前言 常见的el-input可能会限制用户只能输入正整数或保留两位小数&#xff0c;达到输入金额的需求&#xff0c;点击【跳转】访问el-input的官方文档 element-ui是有el-input-numb…

九章量子计算机:探索量子世界的革命性工具

九章量子计算机:探索量子世界的革命性工具 一、引言 九章量子计算机的推出,是近年来科技界最为引人瞩目的成就之一。这款基于量子力学的计算机,以其独特的计算方式和潜在的应用前景,引发了全球范围内的关注和讨论。本文将深入探讨九章量子计算机的原理、技术特点、应用前景…

HarmonyOS 开发案例分享:万能卡片也能用来玩游戏

一、前言 作为一名开发爱好者&#xff0c;从大了讲&#xff0c;我学习并进行 HarmonyOS 相关开发是为了能为鸿蒙生态建设尽一份绵薄之力&#xff0c;从小了讲&#xff0c;就是为了自己的兴趣。而万能卡片是一个让我非常感兴趣的东西。 很多时候我跟别人解释什么是万能卡片&…

Linux-Linux安装JDK及配置环境 及 遇到的问题

下载linux环境对应的JDK的tar.gz包 配置JDK环境&#xff1a;编辑 sudo vim /etc/profile 在文件的最下方&#xff0c;填写 export JAVA_HOME/usr/local/src/software/jdk1.8 export CLASSPATH.:$JAVA_HOME/lib/tools.jar export PATH$JAVA_HOME/bin:$PATH 执行生效命令&…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷14

单选题 1、下列现象中有化学变化发生的是 A、蜡烛融化 B、冰块融化 C、电磁炉烧开水 D、铁生锈 答案&#xff1a;D 2、把左边的图形用剪刀剪开&#xff0c;拼成右边的正方形&#xff0c;至少剪几刀 A、1 B、2 C、3 D、4 答案&#xff1a;B 3、能够检验土壤中有沙和粘…

设计模式_策略模式 更改激光雷达类型

slam 设计模式_策略模式 1介绍1.1原始需求1.2 策略模式1.2.1策略模式介绍1.2.2 最终使用1.2.3 接口类&#xff08;策略定义&#xff09;1.2.4 使用类 1.3新激光雷达加入 2 其他实例 1介绍 slam中经常需要更改激光雷达适配算法&#xff0c;最近在学习设计模式&#xff0c;这里使…

熬夜会秃头——beta冲刺Day4

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…

算法题:求所需的最小的书包数量(拓展拓展再拓展~)

算法题&#xff1a;求所需的最小的书包数量 现在有一种书包&#xff0c;这种书包只有两个书槽&#xff08;即最多只能放下两本书。&#xff09;&#xff0c;并且一个这种书包只能装下N千克的书。现在有一个数组&#xff0c;数组元素是每本书的重量&#xff08;千克&#xff09…

基于 HarmonyOS 的用户登录界面实现

基于 HarmonyOS 的用户登录界面实现 HarmonyOS 是由华为推出的一种全场景分布式操作系统&#xff0c;该系统为不同类型的设备提供了统一的开发框架和一致的用户体验。本文将介绍如何使用 HarmonyOS 开发框架实现一个简单的用户登录界面。 在 HarmonyOS 开发中&#xff0c;使用…

JIRA 基本使用

该页面可以&#xff1a; 查看个人基本信息以及归属的邮件组修改常用参数配置查看指给自己的 Open 问题查看自己最近的活动记录等 权限管理 Project 权限管理 JIRA 项目有三种通用权限方案&#xff1a; 公开权限方案&#xff08;默认禁止使用此方案&#xff09;&#xff1a…

nodejs微信小程序+python+PHP学科建设管理信息系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Android adb:“more than one device/emulator“解决办法

文章目录 问题解决办法列出所有设备先选择设备&#xff0c;再进行命令 问题 adb.exe: more than one device/emulator原因就是当前已经连接多台设备。 解决办法 列出所有设备 adb devices如下&#xff1a;有多个设备 List of devices attached 2270000938 device 172…