php--api发送钉钉消息
一、钉钉开发者配置
- 登录钉钉开发管理后台
https://open-dev.dingtalk.com/#/corpeapp
进入应用开发,根据需求选择应用创建类型,此处以企业内部开发为例,选择小程序==》创建应用;(注意:服务接口api使用不区分创建的是小程序还是H5微应用,均可使用。二者区别参考:https://ding-doc.dingtalk.com/doc#/bgb96b/ok9au2)
- 开发者在调用发送消息接口前,需在开发者后台添加“企业会话”接口权限,申请流程参考:https://ding-doc.dingtalk.com/doc#/serverapi2/rnomdt
我们这里只是需要发送工作通知,保险起见登录、消息、通讯录权限我全部勾选了。
3、发送工作通知消息需要注意以下事项:
a.同一个应用相同消息的内容同一个用户一天只能接收一次。
b.同一个应用给同一个用户发送消息,企业内部开发方式一天不得超过500次。
c.通过设置to_all_user参数全员推送消息,一天最多3次。
d.超出以上限制次数后,接口返回成功,但用户无法接收到。详细的限制说明,请参考“工作通知消息的限制”。
e.该接口是异步发送消息,接口返回成功并不表示用户一定会收到消息,需要通过“查询工作通知消息的发送结果”接口查询是否给用户发送成功。
f.消息类型和样例可参考:
https://ding-doc.dingtalk.com/doc#/serverapi2/ye8tup
二、PHP接口实现
1、工作通知为例:发送消息接口地址如下:
https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN
参数说明:
参数 | 类型 | 必须 | 示例值 | 说明 |
agent_id | Number | 是 | 1234 | 应用agentId |
userid_list | String | 否(userid_list,dept_id_list, to_all_user必须有一个不能为空) | zhangsan,lisi | 接收者的企业内部用户的userid列表,最大用户列表长度:100 |
dept_id_list | String | 否(可不传,若传不能为空) | 123,456 | 接收者的部门id列表,最大列表长度:20, 接收者是部门id下(包括子部门下)的所有用户 |
to_all_user | Boolean | 否 | false | 是否发送给企业全部用户 |
msg | json对象 | 是 | {"msgtype":"text","text":{"content":"消息内容"}} | 消息内容,消息类型和样例参考“消息类型与数据格式”。最长不超过2048个字节 |
2、在线调试地址:
https://open-dev.dingtalk.com/apiExplorer#/?devType=org&api=/message/corpconversation/asyncsend_v2
- PHP接口实现部分代码如下;
function request_by_curl($remote_server, $post_string)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$webhook = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=c2b26a56cd95338abf252a7cbe248415";
$time = date("Y-m-d H:i:s", time());
$content ="aa该用户存在违规,请注意检测";//文本内容
$title = "aa危险警告";//标题
$picUrl = "http://www.baidu.com";//图片链接
$messageUrl = "http://www.baidu.com";//跳转链接
$type="link";
$textString = json_encode([
"agent_id" =>996449934,
"msg" => [
"msgtype" => "link",
"link" => [
"text" => $content,
"title" => $title,
"picUrl" => $picUrl,//图片链接
"messageUrl" => $messageUrl,//跳转链接
]
],
"userid_list" =>"5358582024311842,320960285422755448",//接受用户ID
]);
$result = request_by_curl($webhook, $textString);
echo $result;
- 如果只是发送普通消息有个必填参数:
Cid:群消息或者个人聊天会话Id,(通过JSAPI之pickConversation接口唤起联系人界面选择之后即可拿到会话ID,之后您可以使用获取到的cid调用此接口,参考地址:https://wsdebug.dingtalk.com/。总览地址:https://ding-doc.dingtalk.com/doc#/dev/swk0bg)
三、钉钉接受消息效果展示
以上PHP服务端接口实现发送钉钉消息完成。