场景:开发了一个h5 应用 想要部署发布在钉钉上 应用有一个人员列表 这些人员列表是钉钉上的企业人员 ,问:想通过点击第三方应用上的人员 直接跳转到这个人的 钉钉聊天框会话 如何实现呢?
实现:
1.conmposer 安装php dingtalksdk
"files":[
"vendor/dingtalksdk/TopSdk.php"
]
安装好后 项目下会生成如下目录
12.png
php代码:
$client = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI,DingTalkConstant::$METHOD_GET,DingTalkConstant::$FORMAT_JSON);
$req = new OapiGettokenRequest();
$req->setAppkey($this->appKey);
$req->setAppsecret($this->appSecret);
$resp = $client->execute($req,null,'https://oapi.dingtalk.com/gettoken');
$accessToken = $resp->access_token;
$req = new OapiGetJsapiTicketRequest;
$resp_ticket = $client->execute($req, $accessToken, "https://oapi.dingtalk.com/get_jsapi_ticket");
$nonceStr='cjf123456';
$timeStamp = time();
$url = $this->curPageURL();
$ticket=$resp_ticket->ticket;
$signature=$this->sign($ticket, $nonceStr, $timeStamp, $url);
签名函数
public function sign($ticket, $nonceStr, $timeStamp, $url){
$plain = 'jsapi_ticket=' . $ticket .
'&noncestr=' . $nonceStr .
'×tamp=' . $timeStamp .
'&url=' . $url;
return sha1($plain);
}
获取url
public function curPageURL(){
$pageURL = 'http';
if (array_key_exists('HTTPS',$_SERVER)&&$_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
前端页面
<span class="personal " id="chooseonebtn" style="">单聊会话 </span>
<script src="public/js/dingtalk.open.js"></script>
<script>
var agentId='{$agentId}';
var userid='{$userid}';
var corpId='{$corpId}';
var timeStamp='{$timestamp}';
var nonceStr='{$nonceStr}';
var sign='{$sign}';
dd.config({
agentId: agentId, // 必填,微应用ID
corpId: corpId,//必填,企业ID
timeStamp: timeStamp, // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,自定义固定字符串。
signature: sign, // 必填,签名
type:0/1, //选填。0表示微应用的jsapi,1表示服务窗的jsapi;不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
jsApiList : [
'runtime.info',
'biz.contact.choose',
'device.notification.confirm',
'device.notification.alert',
'device.notification.prompt',
'biz.ding.post',
'biz.util.openLink',
'biz.chat.openSingleChat',
] // 必填,需要使用的jsapi列表,注意:不要带dd。
});
dd.error(function (err) {
})
dd.userid=0;
dd.ready(function() {
$('#chooseonebtn').on('click', function() {
dd.biz.chat.openSingleChat({
corpId: '{$corpId}', // 企业id,必须是用户所属的企业的corpid
userId:userid, // 用户的uerid
onSuccess : function() {
},
onFail : function(err) {
// 调用失败时回调
// alert('fail')
}
})
});
});
</script>
网友评论