├── README.md ├── demo.py └── img ├── 1.png ├── 2.png ├── 3.png ├── 4.jpg └── 5.png /README.md: -------------------------------------------------------------------------------- 1 | ## 搭建属于自己的微信推送服务,完美替代server酱、wxpusher等。保护隐私 2 | 3 | 4 | + 注册企业微信:参考教程,这里不再赘述 5 | 6 | >https://jingyan.baidu.com/article/2c8c281d65dc670009252a57.html 7 | 8 | 9 | 10 | + 注册好企业微信(https://work.weixin.qq.com/) 11 | 12 | + 进入管理后台-->选择应用管理-->选择创建应用-->填写应用名称 13 | 14 | + 创建好后,得到 AgentId 和 Secret 两个值 15 | 16 | + 回到企业微信后台,选择我的企业,翻到最底下,得到企业 ID 17 | 18 | 这些参数后面会用到! 19 | 20 | 21 | 22 | ``` 23 | 参考了官方文档:https://work.weixin.qq.com/api/doc/90001/90143/90372 24 | 里面列出了所有类型的消息发送请求类型以及参数 25 | ``` 26 | 27 | 28 | 29 | **以文本消息为例:** 30 | 31 | ``` 32 | 请求方式:POST(HTTPS) 33 | 请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN 34 | ``` 35 | 36 | 参数: 37 | 38 | { 39 | "touser" : "UserID1|UserID2|UserID3", 40 | "toparty" : "PartyID1|PartyID2", 41 | "totag" : "TagID1 | TagID2", 42 | "msgtype" : "text", 43 | "agentid" : 1, 44 | "text" : { 45 | "content" : "你的快递已到,请携带工卡前往邮件中心领取。/n出发前可查看邮件中心视频实况,聪明避开排队。" 46 | }, 47 | "safe":0, 48 | "enable_id_trans": 0, 49 | "enable_duplicate_check": 0, 50 | "duplicate_check_interval": 1800 51 | } 52 | 53 | 参数说明: 54 | 55 | ![1](/img/1.png) 56 | 57 | > touser、toparty、totag不能同时为空,后面不再强调。 58 | 59 | 60 | 61 | **哪些是发送消息方法需要的“变量”?** 62 | 63 | | 参数 | 说明 | 64 | | :----------: | :----------------------------------------------------------- | 65 | | access_token | 调用接口凭证 | 66 | | agentid | 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值 | 67 | 68 | 69 | ​ ![2](/img/2.png) 70 | 71 | 72 | 73 | 至此,我们就可以利用写一个Python函数: 74 | 75 | def wxpush(msg,usr): 76 | base_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?' 77 | req_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' 78 | corpid = '上面提到的你的企业ID,' 79 | corpsecret = '上图的Secret' 80 | 81 | #获取access_token,每次的access_token都不一样,所以需要运行一次请求一次 82 | def get_access_token(base_url, corpid, corpsecret): 83 | urls = base_url + 'corpid=' + corpid + '8&corpsecret=' + corpsecret 84 | resp = requests.get(urls).json() 85 | access_token = resp['access_token'] 86 | return access_token 87 | 88 | def send_message(msg, usr): 89 | data = get_message(msg, usr) 90 | req_urls = req_url + get_access_token(base_url, corpid, corpsecret) 91 | res = requests.post(url=req_urls, data=data) 92 | print(res.text) 93 | 94 | def get_message(msg, usr): 95 | data = { 96 | "touser": usr, 97 | "toparty": "@all", 98 | "totag": "@all", 99 | "msgtype": "text", 100 | "agentid": 填写你的企业ID,不加引号,是个整型常数,就是上图的AgentId 101 | "text": { 102 | "content": msg 103 | }, 104 | "safe": 0, 105 | "enable_id_trans": 0, 106 | "enable_duplicate_check": 0, 107 | "duplicate_check_interval": 1800 108 | } 109 | data = json.dumps(data) 110 | return data 111 | 112 | msg = msg 113 | usr = usr 114 | send_message(msg, usr) 115 | 116 | 117 | ​ 118 | #测试 119 | wxpush('test','@all') 120 | 121 | 返回参数: 122 | 123 | ![3](/img/3.png) 124 | 125 | 126 | 127 | 手机界面: 128 | 129 | 130 | 131 | ![4](/img/4.jpg) 132 | 133 | 134 | 135 | 136 | 137 | 图5: 138 | 139 | ![5](/img/5.png) 140 | 141 | 教程至此结束,完整demo代码见demo.py,代码很粗糙,你可以进照猫画虎,开发图文、卡片等诸多类型的消息 -------------------------------------------------------------------------------- /demo.py: -------------------------------------------------------------------------------- 1 | # -*- codeing = utf-8 -*- 2 | # @Author: Angious 3 | # @Time : 2020/5/6 21:05 4 | # @File : demo.py 5 | # @Software : PyCharm 6 | 7 | import requests 8 | import json 9 | 10 | 11 | class WXPusher: 12 | def __init__(self, usr, msg): 13 | self.base_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?' 14 | self.req_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' 15 | self.corpid = 'xxxxxxxxx' # 上面提到的你的企业ID 16 | self.corpsecret = '_61bxxxxxxxxxxxxxx' # 上图的Secret 17 | self.agentid = 123456 # 填写你的企业ID,不加引号,是个整型常数,就是上图的AgentId 18 | self.usr = usr 19 | self.msg = msg 20 | 21 | def get_access_token(self): 22 | urls = self.base_url + 'corpid=' + self.corpid + '&corpsecret=' + self.corpsecret 23 | resp = requests.get(urls).json() 24 | access_token = resp['access_token'] 25 | return access_token 26 | 27 | def send_message(self): 28 | data = self.get_message() 29 | req_urls = self.req_url + self.get_access_token() 30 | res = requests.post(url=req_urls, data=data) 31 | print(res.text) 32 | 33 | def get_message(self): 34 | data = { 35 | "touser": self.usr, 36 | "toparty": "@all", 37 | "totag": "@all", 38 | "msgtype": "text", 39 | "agentid": self.agentid, 40 | "text": { 41 | "content": self.msg 42 | }, 43 | "safe": 0, 44 | "enable_id_trans": 0, 45 | "enable_duplicate_check": 0, 46 | "duplicate_check_interval": 1800 47 | } 48 | data = json.dumps(data) 49 | return data 50 | 51 | 52 | if __name__ == '__main__': 53 | test = WXPusher(usr='Chenxxx', msg="test") # usr参数为推送用户名,msg为消息文本 54 | test.send_message() 55 | 56 | 57 | -------------------------------------------------------------------------------- /img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Angious/wxpush/d5147b40365e6784908c1c04dea2adb815d5f73f/img/1.png -------------------------------------------------------------------------------- /img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Angious/wxpush/d5147b40365e6784908c1c04dea2adb815d5f73f/img/2.png -------------------------------------------------------------------------------- /img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Angious/wxpush/d5147b40365e6784908c1c04dea2adb815d5f73f/img/3.png -------------------------------------------------------------------------------- /img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Angious/wxpush/d5147b40365e6784908c1c04dea2adb815d5f73f/img/4.jpg -------------------------------------------------------------------------------- /img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Angious/wxpush/d5147b40365e6784908c1c04dea2adb815d5f73f/img/5.png --------------------------------------------------------------------------------