php 钉钉第三方应用实现单聊会话

场景:开发了一个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 .
            '&timestamp=' . $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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容