应用支持推送文本、图片、视频、文件、图文等类型,本篇主要实现发送应用文本消息。
获取企业凭证
发送应用消息首先需要获取调用凭证access_token,此处的凭证为企业凭证,可通过企业授权安装时返回的授权信息中获取access_token;之后可通过获取企业凭证进行刷新。
请求方式
POST
请求地址
https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN
请求包体
{
"auth_corpid": "auth_corpid_value",
"permanent_code": "code_value"
}
方法示例
需要授权企业id和企业永久授权码及三方企业凭证,先写好方法下方发送应用消息时使用。
代码如下:
/**
* 获取授权企业access_token
* @param $corpid
* @param $permanent_code
* @return array|mixed
*/
public function getCompanyToken($corpid, $permanent_code)
{
$access_token = '三方企业凭证';
$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=' . $access_token;
$params = json([
'auth_corpid' => $corpid,
'permanent_code' => $permanent_code
]);
$info = $this->linkCurl($url, 'POST', $params);
$res = djson($info);
if (isset($res['errcode']) && $res['errcode'] != 0) {
return toFail($res['errmsg']);
}
return toSuccess('success', ['token' => $res['access_token']]);
}
参数说明
参数 | 是否必须 | 说明 |
suite_access_token | 是 | 三方应用凭证,获取点击可查看 |
auth_corpid | 是 | 授权方企业corpid,通过获取永久授权码得到 |
permanent_code | 是 | 永久授权码,通过get_permanent_code获取 |
返回结果
返回结果为json格式。
{
"errcode":0 ,
"errmsg":"ok" ,
"access_token": "xxxxxx",
"expires_in": 7200
}
参数说明
参数 | 说明 |
access_token | 授权方(企业)access_token,最长为512字节 |
expires_in | 授权方(企业)access_token有效时间 |
应用消息
应用支持推送文本、图片、视频、文件、图文等类型。
请求方式
POST
请求地址
https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
参数说明
参数 | 是否必须 | 说明 |
access_token | 是 | 调用接口企业凭证 |
发送文本消息
其他消息类型需要上传临时素材后,才可调用暂无用到其他类型功能,因此本篇暂时只实现文本消息。
请求示例
通过上方封装好的凭证方法获取企业凭证,之后编辑好文本消息包体内容。
代码如下:
/**
* 发送企业微信-文本消息
* @return array|bool|mixed|string
*/
public function sendAppTextMsg()
{
$get_token = $this->getCompanyToken('授权企业id', '企业永久授权码');
if ($get_token['status'] != 1) {
return $get_token;
}
$access_token = $get_token['data']['token'] ?? '';
$url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?debug=1&access_token=' . $access_token;
// 参数设置
$params = json([
"touser" => "YuanLaiShiNi",
"msgtype" => "text",
"agentid" => '授权企业安装时获取的agentid',
"text" => [
"content" => "今天已经是周三,请尽快完成计划完成事件。\n详情可点击<a href='http://www.baidu.com'>计划清单</a>查看,\n按照轻重缓急完成。"
],
"safe" => 0,
"enable_id_trans" => 0,
"enable_duplicate_check" => 0,
"duplicate_check_interval" => 1800,
]);
return $this->linkCurl($url, 'POST', $params);
}
特殊说明
其中text参数的content字段可以支持换行、以及A标签,即可打开自定义的网页(可参考以上示例代码)(注意:换行符请用转义过的\n)
文本消息显示
返回内容
{"errcode":0,"errmsg":"ok","msgid":"WpLDpQFMGSE843kRbNhgXV0ggM0ngtU7e4rl2FNJGnSHw6BCjVyX8G_4bz8CpnrVjV1rbMI_h_xzkPismuXuQg"}
返回参数说明
参数 | 说明 |
errcode | 返回码 |
errmsg | 对返回码的文本描述内容 |
invaliduser | 不合法的userid,不区分大小写,统一转为小写 |
invalidparty | 不合法的partyid |
invalidtag | 不合法的标签id |
unlicenseduser | 没有基础接口许可(包含已过期)的userid |
msgid | 消息id,用于撤回应用消息 |
response_code | 仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,72小时内有效,且只能使用一次 |
注意
支持重复消息检查,当指定 "enable_duplicate_check": 1开启: 表示在一定时间间隔内,同样内容(请求json)的消息,不会重复收到;时间间隔可通过duplicate_check_interval指定,默认1800秒。
调用建议:大部分企业应用在每小时的0分或30分触发推送消息,容易造成资源挤占,从而投递不够及时,建议尽量避开这两个时间点进行调用。
频率限制:每应用不可超过账号上限数*200人次/天(注:若调用api一次发给1000人,算1000人次;若企业账号上限是500人,则每个应用每天可发送100000人次的消息)。每应用对同一个成员不可超过30次/分钟,1000次/小时,超过部分会被丢弃不下发。
总结
感觉企业微信中的文本消息类似于手机中的短信,还可以加跳转网站的链接,操作比较简单。