作者:昼夜
关键词:文件发送、企微
在日常工作中,企业微信是我们经常使用到的一类办公工具,目前影刀已经可以实现对于企微元素的捕获了,这可以帮助我们完成许多自动化操作。最近就遇到了某位客户小伙伴在操作企微时有这样的需求,需要向对应的企业用户去自动生成水印并自动发送。当然这个操作通过影刀自动添加水印并模拟人工发送动作也可以实现,但是还有一些比较快捷的方法,下面来简单介绍一下。
要实现文件消息的自动发送,在企微中其实已经开放了对应的接口,并且通过这个接口发送的话,在接收方接收到的文件,不仅可以将我们发送的文件自动的加上专属的水印,同时可以让这个文件变成不可转发类型的文件,在处理比较重要的文件时,安全系数会有进一步的提升,具体实现逻辑如下。
1.登录企微后台,我们需要先去创建一个应用,然后进入这个应用获取到secret

2.再去“我的企业”中获取coprid,加上secret鉴权生成token


3.将要发送的文件上传到企微的临时素材管理服务器,拿到media_id
# 上传临时素材至服务器
def upload_file(access_token, file_path):
url = f"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={access_token}&type=file"
headers = {
'Content-Type': 'multipart/form-data',
'Authorization': f'Bearer {access_token}'
}
with open(file_path, "rb") as f:
files = {"media": (os.path.basename(file_path), f.read())}
res = requests.post(url, headers=headers, files=files)
return res.json()
4.从后台获取到用户的id,再将文件发送给对应的人
在后台可以看到用户的账号名称

通过接口将文件发送出去(设置safe参数为1,让文件进入安全保密状态,这样就会生成水印,并且转发给对方的文件,对方不能再转发给其他人)
def send_app_file(access_token, userid, media_id, agentid):
url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}"
payload= {
"touser" : userid, # 用户id
"msgtype" : "file",
"agentid" : agentid, # 应用id
"file" : {
"media_id" : media_id
},
"safe": 1
}
response = requests.request("POST", url, data=json.dumps(payload))
return response.json()
整体逻辑如下:

可以看到结果并不是以文件的形式转发出去的,在客户页面显示的是一种类似于卡片的信息,无法进行转发,且打开之后的文件可以看到有底部水印。

有时候会出现错误码为60020的报错,这是因为本机IP没有在企微应用的白名单中,需要进入应用详细页面,将ip配置到企业可信ip中即可。
