背景
有个项目需要用企业微信API推送应用消息,根据腾讯提供的文档研究一下
过程
- 获取TOKEN
- 推送文本信息
一些问题
刚开始推送文本信息的时候一直报错
‘errcode’: 40008, ‘errmsg’: ‘invalid message type’
而用POSTMAN又顺利推送
经过筛查,发现是post方法语句出现问题
data = {
"msgtype": "text",
"agentid": "1000003",
"touser": "@all",
"text": {
"content": "123"
},
}
r = requests.post(url=URL, params=data)
这里是直接复制了get方法的,所以其中的params忘记修改了。
将其修改为
r = requests.post(url=URL, data=data)
提示 Warning: wrong json format
原来是要json格式的,最终改为
r = requests.post(url=URL, json=data)
注意
params参数必须为字典类型
data参数必须为字符串类型
json参数必须为字典类型
注意请求中的params与data(body)的区别,其实就是注意post跟get的区别
get请求
请求参数会放在url里,用
?
分割参数,多个参数用&
链接
参数会被放在url里,所以get请求时参数需在params
中
post请求
参数不会放在url里,所以post请求时参数需在
body
中
最终代码
URL = 'https://qyapi.weixin.qq.com/cgi-bin/message/send'
param={
"access_token":TOKEN
}
data = {
"msgtype": "text",
"agentid": "1000003",
"touser": "@all",
"text": {
"content": "123"
},
}
print(json.dumps(data))
r = requests.post(url=URL, params=param,json=data)
在平常的使用中,我们一般将TOKEN作为参数来传递,防止与body中参数混淆。但未知是否会带来安全问题