Python调用企业微信接口发送消息及升级适配指南

顾星河
顾星河
发布时间:2026-10-15| 4人浏览过
原创

本文介绍使用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发送企业微信消息的文章介绍完毕。如需了解更多相关内容,请搜索本站过往文章或继续浏览后续文章,希望大家今后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。