Python调用企业微信接口发送消息及升级适配指南
本文介绍使用Python通过企业微信接口发送消息通知的方法。针对企业公众号升级至企业微信后出现的Secret变更及接口参数格式调整问题,详细解析了从数值型改为字符串类型的代码适配方案,并提供完整的Python调用示例,帮助开发者解决消息发送失败的问题。
Python实现企业微信消息推送背景
目前,通过微信公众号发送消息通知和告警已成为常见做法。运维人员通常利用Zabbix调用Shell脚本来实现微信消息告警。然而,当需要发送的内容较多且希望以美观的指定格式展示时,Shell处理起来相对繁琐。为此,我使用Python重新实现了微信消息发送功能。
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)。但发现文本消息的格式有所变化,官网示例如下:
企业微信消息发送JSON格式示例
{
"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等字段,此前我均作为数值传递,但示例中它们被包含在引号内,即作为字符串处理。于是,我将代码修改为按字符串方式传递,测试后成功发送消息。
总结
至此,关于利用Python发送企业微信消息的文章介绍完毕。如需了解更多相关内容,请搜索本站过往文章或继续浏览后续文章,希望大家今后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













