企业在使用企业微信中,有时想批量推送员工日程信息。这里写了个接口工具分享给大家,供交流学习。

主入口程序:

# -*- coding: utf-8 -*-
import time as time

import pymysql as mdb
import getdbconn as dbconn
import renyrw

def Main_sendmsg_toUser():

conn=dbconn.dbconn()
cur = conn.cursor(mdb.cursors.DictCursor)
sql_getmsg="select *from wxmsg_rwb where status<>'Y' "
sql_up="update wxmsg_rwb set status='Y' where id=%s"
cur.execute(sql_getmsg)

rs=cur.fetchall()
for r in rs:
id=('%s' %r['id'])
touser=('%s' %r['username'])
msg=('%s' %r['msg'])
msgtitle=('%s' %r['msgtitle'])
url=('%s' %r['url'])
urltxt=('%s' %r['urltxt'])
renyrw.Api_upload_renyrw('1',touser,msg)

params=(id)
cur.execute(sql_up,params)
conn.commit()
cur.close()
conn.close()

if __name__ == '__main__':

Main_sendmsg_toUser()

-----------

发送方法,renyrw.py

# -*- coding: utf-8 -*-

import time as time
import requests
import json
import urllib.request as rq

#from appcomm import appcomm

##调用企业微信api 给员工发消息. touser --userid即通讯录员工账号,corpid--企业微信id,corpsecret--应用的密匙,每个应用的不一样;

def get_access_token(cmpid):
#corpid,apikey_txl,apikey_dk,apikey_rch=appcomm.getapiinfo(cmpid)
corpid=' '
apikey_rch=' '
url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (corpid,apikey_rch) #
#url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % ('wwcffccbc9b870f383','jZjHJeX-af1EcPLW3h8bMgrLXG9Y0TNkPwC7EWP_CgI') #
req = rq.Request(url)
result = rq.urlopen(req)
access_token = json.loads(result.read())

#print(access_token["access_token"])
return access_token["access_token"]

def Api_upload_renyrw(cmpid,userid,text):
#print(getUser(bm))

time_s=time.strftime('%Y-%m-%d',time.localtime(time.time()))+" 08:00:00"
time_e=time.strftime('%Y-%m-%d',time.localtime(time.time()))+" 23:00:00"
#time_s="2020-06-18 00:00:00"
#time_e="2020-06-18 23:00:00"
uix_stime = time.mktime(time.strptime(time_s, "%Y-%m-%d %H:%M:%S"))
uix_etime = time.mktime(time.strptime(time_e, "%Y-%m-%d %H:%M:%S"))
#print("3.把字符串转成时间戳形式:", time.mktime(time.strptime(time_s, "%Y-%m-%d %H:%M:%S")))
#print(time_s)
#print(time_e)
#print(uix_stime)
#print(uix_etime)
data={

"schedule": {
"organizer": userid,
"start_time": uix_stime,
"end_time": uix_etime,
"attendees": [
{
"userid": userid
}
],

"summary": text,
"description": "日程信息",
"reminders": {
"is_remind": 1,
"remind_before_event_secs": 3600,
"is_repeat": 0,
"repeat_type": 7
},
"location": "",
"cal_id": ""
}

}
print(data)
json_template=json.dumps(data,ensure_ascii=False)
access_token=get_access_token(cmpid)
print("access_token--",access_token)
#access_token='J3bOu0egcg0VWVQHd7IlbkpN_uZjrfD3EK32aw9qFwTzctTC2vikpwzJhd5jgDJAzBgVqOtZlHmS3MT1_PMk6ww-eeipv_04W2CGnT5sK43slQUNoZfMeE-5pyvFf2FBLad3berUuzb-3ysAKWchiQTXh9dGD13fEEmGxtxT9FwYKxRY_s-kVQurWHuckNNGnntkmCdpangWKwenw4Y6sw'
url="https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/add?access_token="+access_token
#https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/add?access_token=ACCESS_TOKEN

try:
respone=requests.post(url,data=json_template.encode('UTF-8'), timeout=50)
#拿到返回值
errcode=respone.json().get("errcode")
print("返回:--",respone.json())
if(errcode==0):
print("成功")
else:
print("失败")
except Exception as e:
print("异常----",e)

-----

数据库连接方法 getdbconn.py

import pymysql as mdb

def dbconn():
host='192.168.0.100'
user='user'
password='12345'
database='db1'
conn=mdb.connect(host,user,password,database)
return conn

-----日程信息接口数据表结构  mysql版

/*
Navicat MySQL Data Transfer

Source Server :
Source Server Version : 50717
Source Host :
Source Database :

Target Server Type : MYSQL
Target Server Version : 50717
File Encoding : 65001

Date: 2020-08-19 10:13:16
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for wxmsg_rwb
-- ----------------------------
DROP TABLE IF EXISTS `wxmsg_rwb`;
CREATE TABLE `wxmsg_rwb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(500) DEFAULT NULL,
`msg` varchar(2000) DEFAULT NULL,
`status` char(10) DEFAULT NULL,
`msgtitle` varchar(200) DEFAULT NULL,
`url` varchar(400) DEFAULT NULL,
`ontime` varchar(40) DEFAULT NULL,
`urltxt` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20861 DEFAULT CHARSET=utf8;

-----使用方法,对接企业内部系统如ERP等,把日程相关数据写入表wxmsg_rwb中,定时执行接口程序即可推送日程信息到人员企业微信,如下形式展示:

企业微信人员日程推送接口(python版)的更多相关文章

  1. ios远程推送和python版push server相关笔记

    今天研究了下ios的远程推送,网上的相关教程很多,做了一遍下来记录一下遇到的问题和注意事项(转载请注明) 1.证书及乱七八糟的配置 公钥:app id管理那儿的“Development Push SS ...

  2. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  3. $Django 支付宝支付,微信服务号推送消息 (测试需要把应用程序部署到服务器上)

    一 支付宝支付 大概 支付宝支付 正式环境:需要用营业执照去申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.ht ...

  4. java开发微信模板消息推送

    发布时间:2018-12-12   技术:springboot+maven   概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...

  7. .NET之微信消息模板推送

    最近在项目中使用到了微信消息模板推送的功能,也就是将对应的消息推送到对应的用户微信上去,前提是你必须要有一个微信公众号并且是付费了的才会有这个功能,还有就是要推送的用户必须是的关注了你的微信公众号的. ...

  8. 如何使用Postman调试HMS Core推送接口?

    HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端.Postman是一款接口测试工具,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果.Postma ...

  9. 关于调用三方平台接口与推送接口的总结<二>(2020.7.27)

    前言:本篇博客是接着上篇总结写的,想了解怎么对接第三方平台接口的同学可以看我上一篇博客,地址是  https://www.cnblogs.com/alanturingson/p/13377500.ht ...

随机推荐

  1. python爬虫入门(5)----- 阿里巴巴供应商爬虫

    阿里巴巴供应商爬虫# 起因## 学了爬虫入门之后,打算找一个有难度的网站来实践,一开始打算找淘宝或者天猫(业界老大)来实践,但后续发现网上已经有很多这方面的项目,于是瞄上了阿里的国际网站阿里巴巴.开始 ...

  2. 干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动

    摘要:该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,用户可以在控制台或通过应用侧接口创建设备联动规则,把设备上报的属性转发,通过物联网平台规则引擎转变成命令下发给其他指定设备. 场 ...

  3. DJANGO-天天生鲜项目从0到1-009-搜索功能实现(django-haystack+whoosh+jieba)

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  4. 面试题六十:n个骰子的点数

    把n个骰子扔在地上,求出现和为s的概率 可得n<=s<=6n 方法:定义6n-n+1长度的数组,然后对所有可能出现的组合进行计算,把结果进行计数存进数组:递归 方法二:动态规划,大问题小化 ...

  5. xctf-pwn hello_pwn

    走流程,看看文件类型 64位,开了NX 直接丢IDA分析 查看sub_400686() 是个给flag的函数,可以看到,只要满足if语句的条件使dword_60106C == 1853186401就可 ...

  6. 手写IOC容器

    IOC(控制翻转)是程序设计的一种思想,其本质就是上端对象不能直接依赖于下端对象,要是依赖的话就要通过抽象来依赖.这是什么意思呢?意思就是上端对象如BLL层中,需要调用下端对象的DAL层时不能直接调用 ...

  7. Nodejs同步和异步编程

    同步API:只有当前API执行完成后,才能继续执行下一个API:异步API:当前API的执行不会阻塞后续代码的执行. 同步异步代码执行顺序 同步:从上到下依次执行,前面代码会阻塞后面代码的执行.异步: ...

  8. Django学习路37_request属性

      打印元信息,基本上都会打印出来 类字典结构的 key 键 允许重复   get 请求可以传参,但是长度有限制 最大不能超过 2K post 文件上传使用 get 参数 默认放在网址中 post 在 ...

  9. abs,all,any函数的使用

    ''' abs函数:如果参数为实数,则返回绝对值 如果参数为复数,则返回复数的模 ''' a = 6 b = -6 c = 0 # print("a = {0} , b = {1} , c ...

  10. list 和 [ ] 的功能不相同

    对于一个对象: list(对象) 可以进行强制转换 [对象] 不能够进行强制转换,只是在外围加上 [ ] 列表推导式中相同   2020-05-06