網(wǎng)站首頁 編程語言 正文
現(xiàn)在通過發(fā)微信公眾號(hào)信息來做消息通知和告警已經(jīng)很普遍了。最常見的就是運(yùn)維通過zabbix調(diào)用shell腳本給微信發(fā)消息,起到告警的作用。當(dāng)要發(fā)送的信息較多,而且希望按照指定格式顯示的好看一點(diǎn)的時(shí)候,shell處理起來,個(gè)人感覺不太方便。于是我用python重寫了發(fā)微信的功能。
#coding:utf-8 import urllib2 import json import sys def getMsg(): #為了避免發(fā)送中文消息報(bào)錯(cuò),使用utf8方式編碼 reload(sys) sys.setdefaultencoding('utf8') #這個(gè)方法生成想要發(fā)送的消息 msg = ''' 要發(fā)送的消息1 要發(fā)送的消息2 要發(fā)送的消息3 ... ''' return msg if __name__ == '__main__': #微信公眾號(hào)上應(yīng)用的CropID和Secret CropID='xxxxxxxxxxxxxxxxxx' Secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #獲取access_token GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (CropID,Secret) result=urllib2.urlopen(urllib2.Request(GURL)).read() dict_result = json.loads(result) Gtoken=dict_result['access_token'] #生成通過post請(qǐng)求發(fā)送消息的url PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Gtoken #企業(yè)號(hào)中的應(yīng)用id AppID=1 #部門成員id,微信接收者 UserID=1 #部門id,定義可接收消息的成員范圍 PartyID=1 #生成post請(qǐng)求信息 post_data = {} msg_content = {} msg_content['content'] = getMsg() post_data['touser'] = UserID post_data['toparty'] = PartyID post_data['msgtype'] = 'text' post_data['agentid'] = AppID post_data['text'] = msg_content post_data['safe'] = '0' #由于字典格式不能被識(shí)別,需要轉(zhuǎn)換成json然后在作post請(qǐng)求 #注:如果要發(fā)送的消息內(nèi)容有中文的話,第三個(gè)參數(shù)一定要設(shè)為False json_post_data = json.dumps(post_data,False,False) #通過urllib2.urlopen()方法發(fā)送post請(qǐng)求 request_post = urllib2.urlopen(PURL, json_post_data) #read()方法查看請(qǐng)求的返回結(jié)果 print request_post.read()
追加:企業(yè)公眾號(hào)]升級(jí)到[企業(yè)微信]之后發(fā)送消息失敗
最近,看到消息,說是微信把企業(yè)公眾號(hào)升級(jí)到企業(yè)微信。當(dāng)時(shí)并沒有在意,但是后來發(fā)現(xiàn)之前用企業(yè)公眾號(hào)的接口來發(fā)通知消息的程序發(fā)不出去消息了。
于是,我又打開升級(jí)消息,仔細(xì)的讀了一下:企業(yè)號(hào)將遷移至企業(yè)微信管理后臺(tái)(work.weixin.qq.com/login)進(jìn)行統(tǒng)一管理。之前企業(yè)公眾號(hào)的管理后臺(tái)地址是qy.weixin.qq.com,發(fā)不了消息難道是接口地址也變了嗎。
登到新后臺(tái)看了下,發(fā)現(xiàn)應(yīng)用的Secret值變了,相比之前位數(shù)要少一些。將代碼中的Secret值替換成新的之后,發(fā)現(xiàn)還是不行。debug看了下,在用post請(qǐng)求調(diào)用接口發(fā)消息的時(shí)候報(bào)錯(cuò):{“errcode”:-1,”errmsg”:”Invalid input”}。分析原因可能有兩個(gè):調(diào)用的發(fā)消息接口地址不對(duì)了;或者,傳的post參數(shù)的格式不對(duì)了。
還好,在其官網(wǎng)上找到了企業(yè)微信的API說明文檔:https://work.weixin.qq.com/api/doc ,上面有較詳細(xì)的使用說明。經(jīng)確認(rèn),調(diào)用接口的url地址并沒有變(發(fā)送消息還是用https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN)。但是發(fā)現(xiàn)文本消息的格式有點(diǎn)不一樣,官網(wǎng)示例如下:
{ "touser" : "UserID1|UserID2|UserID3", "toparty" : " PartyID1|PartyID2 ", "totag" : " TagID1 | TagID2 ", "msgtype" : "text", "agentid" : 1, "text" : { "content" : "你的快遞已到,請(qǐng)攜帶工卡前往郵件中心領(lǐng)取。\n出發(fā)前可查看<a href=\"http://work.weixin.qq.com\">郵件中心視頻實(shí)況</a>,聰明避開排隊(duì)。" } }
上面的UserID、PartyID這些應(yīng)該我之前都是當(dāng)數(shù)值傳的,但示例上是放在引號(hào)里面的,那就是被當(dāng)做字符串了。于是,我把代碼也改成按字符串的方式試了下,結(jié)果可以了。。。
總結(jié)
原文鏈接:https://blog.csdn.net/felix_yujing/article/details/52094915
相關(guān)推薦
- 2022-09-01 基于MFC實(shí)現(xiàn)類的序列化詳解_C 語言
- 2022-06-21 .NET?Core?API之格式化輸出對(duì)象OutputFormatter_實(shí)用技巧
- 2022-12-13 Python按天實(shí)現(xiàn)生成時(shí)間范圍序列的方法詳解_python
- 2022-05-19 Python學(xué)習(xí)之異常斷言詳解_python
- 2022-08-13 element-ui 動(dòng)態(tài)級(jí)聯(lián)選擇器Cascader
- 2023-01-23 redis實(shí)現(xiàn)多級(jí)緩存同步方案詳解_Redis
- 2024-02-16 springboot開啟mybatis二級(jí)緩存
- 2023-01-01 C++?Boost?Flyweight庫使用介紹_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支