钉钉内部企业应用免登录 php js

本文介绍如何使用PHP和JS在钉钉内部应用中实现免登录功能。前端通过获取免登录授权码,传递给后端换取钉钉用户信息。在实施过程中,遇到问题并定位到是前端部分的责任,需要后端处理access_token和用户详情。遵循官方文档的四步流程可解决此问题。

我这里采用前端获取免登录授权码,发给后端计算得到登录后的钉钉信息。

index.html

    dd.ready(function() {

        dd.runtime.permission.requestAuthCode({
            corpId: "你的corpid",
            onSuccess: function(info) {
            
             code = info.code

			//引入axios,ajax获取登录后的内容
             axios.get('login.php?code='+code)
            .then(function (response) {

                //自行处理response

            }).catch(function (error) {
              alert('something wrong')
            });

          },onFail : function(err) {
            alert(err) 
          }
        })
    });

login.php

<?php
header('Content-type: application/json'); 

function request_by_curl($remote_server,$postStr) {

    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $remote_server);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

    if($postStr != ''){
      curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postStr);
    }
 
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

//获取access_token

//修改相应的appsecret appkey
$webhook = "https://oapi.dingtalk.com/gettoken?appkey=dingniusxv**********j&appsecret=xges_02fDh4gWjJABh4_7P*************gXLH8N6UL2W_1QX";
$result = request_by_curl($webhook,'');
echo $result;


//用access_token、免登授权码获取userid
$token = json_decode($result)->{'access_token'};
$code = $_GET['code'];
$postStr = "{\"code\": \"{$code}\"}";
$webhook = "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo?access_token={$token}";
$result = request_by_curl($webhook,$postStr);
echo $result;


//用userid、token取用户信息
$userid = json_decode($result)->{'result'}->{'userid'};
$postStr = "{\"userid\": \"{$userid}\"}";

$webhook = "https://oapi.dingtalk.com/topapi/v2/user/get?access_token={$token}";
$result = request_by_curl($webhook,$postStr);

echo $result;
?>

这两个页面上传好,通过钉钉工作台访问内部应用后,就可以获得当前账号的信息了。

对照官方文档处理时遇到一个坑:

axios Error: Network Error

{"errcode":40078,"errmsg":"不存在的临时授权码"}

反复看了文档后,觉得没有任何问题。后来发现是前端的锅,前端只能获取免登授权码,后端进行access_token,userid,人员信息等。

参考文档:
https://developers.dingtalk.com/document/app/enterprise-internal-application-logon-free?spm=ding_open_doc.document.0.0.36582f17ShLZ7v#topic-2021731
按照这四步思路做就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值