网页接入dingding扫码登录
前言
有时候我们做了一些网页,希望只有某些人才能看的话,可以搞一个钉钉扫码登录,接入也比较简单,下面记录下接入的过程。
流程
我们先看看官方的文档:钉钉接入文档
梳理一下官方的流程:
1、先跳去一个扫码网页,配置好参数就能跳,然后用用户去扫码;
2、扫码成功后,会自动跳转回你之前设置的页面,并在链接上带一个code的参数;
3、利用appkey和秘钥去获取token,这个token有效期为2小时;
4、利用第2步获取的code和第3步获取的token,去请求接口,得到一个持久码;
5、利用第4步获取的持久码再去请求接口,得到一个SNS_TOKEN;
6、利用第5步获取的SNS_TOKEN再去请求接口,得到userInfo的信息,然后解析就能拿到用户昵称。
流程很简单,就是按着文档说的,一步一步往下调接口就行。
坑点
如果是在网页直接调接口的话,会存在跨域的问题。所以得搞一个接口做转发。
我写了个PHP
<?php
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');
$type=$_GET['type'];
if($type==""){
echo "请输入type";
}else if($type==1){
echo curl_get_https("https://oapi.dingtalk.com/sns/gettoken?appid={{APP_ID}}&appsecret={{KEY}}");
}else if($type==2){
if($_GET['code']==""||$_GET['token']==""){
echo "请输入code和token";
}else{
$data = array ('tmp_auth_code' => $_GET['code']);
$data_string = json_encode($data);
echo curl_post_https("https://oapi.dingtalk.com/sns/get_persistent_code?access_token=".$_GET['token'],$data_string);
}
}else if($type==3){
if($_GET['code']==""||$_GET['token']==""||$_GET['openid']==""){
echo "请输入code、token、openid";
}else{
$data = array ('openid' => $_GET['openid'],'persistent_code' => $_GET['code']);
$data_string = json_encode($data);
echo curl_post_https("https://oapi.dingtalk.com/sns/get_sns_token?access_token=".$_GET['token'],$data_string);
}
}else if($type==4){
if($_GET['token']==""){
echo "请输token";
}else{
echo curl_get_https("https://oapi.dingtalk.com/sns/getuserinfo?sns_token=".$_GET['token']);
}
}else{
echo "没有获取内容";
}
function