在学习开发企业微信内部应用的时候碰到很多问题,比如调用api、发送POST请求、POST请求上传文件等诸多问题,对于一个没有学过网络编程的小白来说,真的很崩溃!!!

以前没有接触过网络编程的小白碰到这些问题可能会焦头烂额,所以今天就把我写的应用消息推送代码分享出来,希望能够帮助到大家。

access_token的获取

在使用企业微信的api时候首先要知道自己所开发的应用的access_token的值。我们可以通过GET请求来得到access_token的值。

corpid="XXXXXXXXX" #企业id值
corpsecret="XXXXXXXXXXXX" #应用secret值

#获取access_token
def get_access_token():
    get_act_url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(corpid,corpsecret)
    act_res=requests.get(url=get_act_url).json()
    access_token=act_res["access_token"]
    return access_token

需要注意的是,在Python中发送POST、GET等请求需要在前面加上requests库,还有就是处理字符串的时候需要使用到json库。

import requests
import json

其中,corpid为企业id,可以在企业微信网页后台的“我的企业”——>“企业信息”——>“企业ID”中看到。

python 获取企微客户群信息 python获取企业微信消息_python 获取企微客户群信息

 发送文本消息的实现

#发送文本消息
def send_text_message(message):
    send_text_url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(get_access_token())
    data={
        "touser" : "@all", #接收消息的用户
        "msgtype" : "text", #消息类型
        "agentid" : 1000002, #应用id
        "text" : {
            "content" : message #消息内容
            },
        "safe":0, #0为公开信息,1为保密信息
        }
    text_message_res=requests.post(url=send_text_url,data=json.dumps(data)).json()
    return text_message_res

示例:

send_text_message("你好,开发者") #在括号中填入你要发送的消息,一定要加上单引号或双引号,因为这是字符串
#这里是支持使用转义符的

如果返回值中的errcode为0,则代表消息发送成功。如果发送失败,可以打开返回值中的网站,网站会根据你的错误码告诉你发送失败可能的原因。

agentid为应用id,可以在应用的详情界面找到。字典data中的“touser”指的是接收消息的用户id,填写“@all”则代表这个应用的所有用户都能收到消息。如果想给指定的用户发送消息,则需要填写用户id,通过“|”分隔。

示例:

"touser" : "xiaozhang|xiaowang|xiaoli|xiaoming"

用户id查看方法:

点击通讯录中用户右侧的三个点,选择编辑

python 获取企微客户群信息 python获取企业微信消息_python 获取企微客户群信息_02

 在编辑页面可以看到用户的账号,也就是用户id,管理员也可以修改用户id

python 获取企微客户群信息 python获取企业微信消息_微信公众平台_03

除了使用用户id之外,还可以通过部门id、标签两种方式进行定向推送,使用方法同上,在这里就不再赘述。

附上参数表,即字典data的内容,可以根据实际需要来进行使用。

python 获取企微客户群信息 python获取企业微信消息_微信_04

发送图片消息的实现

 在使用应用消息推送的api时候,发送图片消息需要我们提供图片的media_id值,以此来获取我们要发送的图片。发送的图片是作为临时素材的,所以我们需要先把图片作为临时素材上传,上传完成后,api会给我们返回图片对应的media_id值。

上传临时素材并获取media_id:

def get_media_id(filetype,path):
    upload_file_url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type={}".format(get_access_token(),filetype)
    files = {filetype: open(path, 'rb')}
    file_upload_result = requests.post(upload_file_url, files=files).json()
    return file_upload_result["media_id"]

函数的参数中,“filetype”为文件类型,在这里我们填“image”即可(image一定要加单引号或者双引号!)。path为文件路径,填写绝对路径和相对路径都可以。函数返回值为我们需要的media_id值。

示例:

get_media_id("image","a.jpg") #相对路径
get_media_id("image","C:/users/desktop/a.jpg") #绝对路径

得到media_id后,我们就可以发送图片消息了。

#发送图片消息
def send_picture_message(media_id):
    send_picture_url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(get_access_token())
    data={
        "touser" : "@all",
        "msgtype" : "image",
        "agentid" : 1000002,
        "image" : {
            "media_id" : media_id
            },
        "safe" : 0,
        }
    picture_message_res=requests.post(url=send_picture_url,data=json.dumps(data)).json()
    return picture_message_res

示例:

send_picture_message(get_media_id("image","a.jpg"))

可能出现的错误

如果在发送消息之后出现了48002的错误代码,那么极有可能是你的通讯录没有同步api。

解决办法:

在管理工具中找到“通讯录同步”

python 获取企微客户群信息 python获取企业微信消息_python_05

然后编辑权限,设置为API编辑通讯录即可。

以上就是关于企业微信内部应用消息推送的相关内容。其他类型的消息方法大同小异,读者可参考企业微信的api文档来进行探索。