日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

如何利用python給微信公眾號發消息實例代碼_python

作者:felix_yujing ? 更新時間: 2022-05-31 編程語言

現在通過發微信公眾號信息來做消息通知和告警已經很普遍了。最常見的就是運維通過zabbix調用shell腳本給微信發消息,起到告警的作用。當要發送的信息較多,而且希望按照指定格式顯示的好看一點的時候,shell處理起來,個人感覺不太方便。于是我用python重寫了發微信的功能。

#coding:utf-8
import urllib2
import json
import sys

def getMsg():
    #為了避免發送中文消息報錯,使用utf8方式編碼
    reload(sys)
    sys.setdefaultencoding('utf8')
    #這個方法生成想要發送的消息
    msg = '''
要發送的消息1
要發送的消息2
要發送的消息3
...
'''
    return msg

if __name__ == '__main__':
    #微信公眾號上應用的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請求發送消息的url
    PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Gtoken

    #企業號中的應用id
    AppID=1
    #部門成員id,微信接收者
    UserID=1
    #部門id,定義可接收消息的成員范圍
    PartyID=1

    #生成post請求信息
    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'
    #由于字典格式不能被識別,需要轉換成json然后在作post請求
    #注:如果要發送的消息內容有中文的話,第三個參數一定要設為False
    json_post_data = json.dumps(post_data,False,False)

    #通過urllib2.urlopen()方法發送post請求
    request_post = urllib2.urlopen(PURL, json_post_data)
    #read()方法查看請求的返回結果
    print request_post.read()

追加:企業公眾號]升級到[企業微信]之后發送消息失敗

最近,看到消息,說是微信把企業公眾號升級到企業微信。當時并沒有在意,但是后來發現之前用企業公眾號的接口來發通知消息的程序發不出去消息了。

于是,我又打開升級消息,仔細的讀了一下:企業號將遷移至企業微信管理后臺(work.weixin.qq.com/login)進行統一管理。之前企業公眾號的管理后臺地址是qy.weixin.qq.com,發不了消息難道是接口地址也變了嗎。

登到新后臺看了下,發現應用的Secret值變了,相比之前位數要少一些。將代碼中的Secret值替換成新的之后,發現還是不行。debug看了下,在用post請求調用接口發消息的時候報錯:{“errcode”:-1,”errmsg”:”Invalid input”}。分析原因可能有兩個:調用的發消息接口地址不對了;或者,傳的post參數的格式不對了。

還好,在其官網上找到了企業微信的API說明文檔:https://work.weixin.qq.com/api/doc ,上面有較詳細的使用說明。經確認,調用接口的url地址并沒有變(發送消息還是用https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN)。但是發現文本消息的格式有點不一樣,官網示例如下:

    {
       "touser" : "UserID1|UserID2|UserID3",
       "toparty" : " PartyID1|PartyID2 ",
       "totag" : " TagID1 | TagID2 ",
       "msgtype" : "text",
       "agentid" : 1,
       "text" : {
           "content" : "你的快遞已到,請攜帶工卡前往郵件中心領取。\n出發前可查看<a href=\"http://work.weixin.qq.com\">郵件中心視頻實況</a>,聰明避開排隊。"
       }
    }

上面的UserID、PartyID這些應該我之前都是當數值傳的,但示例上是放在引號里面的,那就是被當做字符串了。于是,我把代碼也改成按字符串的方式試了下,結果可以了。。。

總結

原文鏈接:https://blog.csdn.net/felix_yujing/article/details/52094915

欄目分類
最近更新