Python使用企業(yè)微信api文本消息推送到微信
如何使用Python實現企業(yè)微信發(fā)送文件
?
第一步:登錄企業(yè)微信后臺,需要用有管理員權限的微信進行掃碼登錄。
第二步:獲取AgentId和Secret,獲取路徑:應用管理-創(chuàng)建應用,創(chuàng)建應用后即可看到。
第三步:確認需要接收信息的userid,獲取路徑:通訊錄-選擇需要發(fā)送的人員-賬號。
第四步:獲取公司ID,獲取路徑:我的企業(yè)-公司ID。
?
通過上面四步即可獲取到:
CORPID # 企業(yè)ID
CORPSECRET # 應用Secret
AGENTID # 應用Agentid
TOUSER # 接收消息的UserID多個ID需要用“|”分割
?
import requests
import time
import json
?
?
class WeChat():
??? def __init__(self):
??????? """
??????? 配置初始信息
??????? """
??????? self.CORPID = "xxx"? # 企業(yè)ID
??????? self.CORPSECRET = "xxx"? # 應用Secret
??????? self.AGENTID = "xxx"? # 應用Agentid
??????? self.TOUSER = "xxx1|xxx2|xxx3" # 接收消息的userid
??????? self.ACCESS_TOKEN_PATH = "access_token.conf" # 存放access_token的路徑
?
??? def _get_access_token(self):
??????? """
??????? 調用接口返回登錄信息access_token
??????? """
??????? url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.CORPID}&corpsecret={self.CORPSECRET}"
??????? res = requests.get(url=url)
??????? return json.loads(res.text)['access_token']
?
??? def _save_access_token(self, cur_time):
??????? """
??????? 將獲取到的access_token保存到本地
??????? """
??????? with open(self.ACCESS_TOKEN_PATH, "w")as f:
??????????? access_token = self._get_access_token()
??????????? # 保存獲取時間以及access_token
??????????? f.write("\t".join([str(cur_time), access_token]))
??????? return access_token
?
??? def get_access_token(self):
??????? cur_time = time.time()
??????? try:
??????????? with open(self.ACCESS_TOKEN_PATH, "r")as f:
??????????????? t, access_token = f.read().split()
??????????????? # 判斷access_token是否有效
??????????????? if 0 < cur_time-float(t) < 7200:
??????????????????? return access_token
??????????????? else:
??????????????????? return self._save_access_token(cur_time)
??????? except:
??????????? return self._save_access_token(cur_time)
?
??? def send_message(self, message):
??????? """
??????? 發(fā)送文本消息
??????? """
??????? url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.get_access_token()}"
??????? send_values = {
??????????? "touser": self.TOUSER,
??????????? "msgtype": "text",
??????????? "agentid": self.AGENTID,
??????????? "text": {
?????????????? ?"content": message
??????????? },
??????? }
??????? send_message = (bytes(json.dumps(send_values), 'utf-8'))
??????? res = requests.post(url, send_message)
??????? return res.json()['errmsg']
?
??? def _upload_file(self, file):
??????? """
??????? 先將文件上傳到臨時媒體庫
??????? """
??????? url = f"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={self.get_access_token()}&type=file"
??????? data = {"file": open(file, "rb")}
??????? res = requests.post(url, files=data)
??????? return res.json()['media_id']
?
??? def send_file(self, file):
??????? """
??????? 發(fā)送文件
??????? """
??????? media_id = self._upload_file(file) # 先將文件上傳至臨時媒體庫
??????? url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.get_access_token()}"
??????? send_values = {
??????????? "touser": self.TOUSER,
??????????? "msgtype": "file",
??????????? "agentid": self.AGENTID,
??????????? "file": {
??????????????? "media_id": media_id
??????????? },
??????? }
??????? send_message = (bytes(json.dumps(send_values), 'utf-8'))
??????? res = requests.post(url, send_message)
??????? return res.json()['errmsg']
?
?
?
wx = WeChat()
# 發(fā)送信息"test"
wx.send_message("test")
?
?
?
wx = WeChat()
# 發(fā)送文件
wx.send_file("1.xlsx")
?
?