网页接入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 curl_post_https($url,$data_string){ // 模拟提交数据函数
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    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, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $res = curl_exec($ch);
    curl_close($ch);
     return $res; // 返回数据,json格式
}

function curl_get_https($url){
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    $tmpInfo = curl_exec($curl);     //返回api的json对象
    //关闭URL请求
    curl_close($curl);
    return $tmpInfo;    //返回json对象
}
?>

OK,通过上面的接口转发后,前端就可以按照上面的接口去调了,很简单。

其他

如果按照正常的逻辑呢,是要求2小时token过期,然后要重新扫码登录的。但我们的需求不用那么严格,只要他扫码过,登录成功,验证了用户身份,就保存下状态,下次再进入该网页的时候,就不用再扫码了。流程图如下:

OK,大概就这样。

原文地址:https://www.cnblogs.com/thinkingthigh/p/11603991.html

时间: 2024-08-27 18:23:57

网页接入dingding扫码登录的相关文章

微信 之网页第三方微信扫码登录

一.方式一(网站内嵌二维码微信登录JS) <?php /** * Created by PhpStorm. * User: 25754 * Date: 2019/6/4 * Time: 11:15 */ $state = md5("yangs"); include './login.html'; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT

微信扫码登录asp微信扫码登陆代码

网站接入微信扫码登录并获取用户基本信息(完美绕过微信开放平台) 电脑版网站实现微信扫码登录,注册会员还要设密码太麻烦,会员也记不住密码,采用微信扫码登录网站更方便,会员无需设密码,用他的微信做为系统登录用户名,全程自动操作更方便.源码是用asp写的,mdb的数据库,微信扫描电脑网页上的二维码实现登录. 只需要用微信扫一下二维码,这个网站就可以展示你的微信昵称和头像,免去注册账号和输入密码登录的步骤,还免去设置头像和昵称的步骤,所以是挺方便的.我这个asp写好的代码和微信开放平台不同,微信开放平台

php微信开放平台--第三方网页微信扫码登录(OAuth2.0)

第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的

微信开放平台开发——网页微信扫码登录(OAuth2.0)

.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频).这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问

(转)微信扫码登录网页实现原理

扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用“扫一扫”功能扫描网页上的二维码 手机扫描成功后,提示“登录网页版微信”:网页上显示“成功扫描 请在手机点击确认以登录” 手机端点击“登录网页版微信”,网页跳转到用户的微信操作界面 整个扫码登录的操作过程还是挺简单的,而且交互地实时性比较好,如果网络不是非常阻塞,整个过程还是非常快的. 扫码登录原理 扫码登录大概的思路是:微信手机客户端从网页二维码里面得到一些信息,然后发送给网页微信的服务

微信网页扫码登录的实现

为了让用户登录网站的门槛更低,微信扫一扫登录变得越来越广泛,所以最近加紧赶制的项目中有用到这个功能,此篇文字的出发点基于微信开放平台已经配置好域名(80端口)并且认证成功获得app_id和secret并有权限调用微信的接口.好了,就先谈一谈微信扫码登录的整个流程吧. 第一步,我们必须得把二维码放在页面上显示.首先普及一下二维码是有失效时间以及失效状态的,一旦你扫过一次二维码或者在某段时间内没有扫描页面上的二维码,该二维码就失效了.OK,微信官网给我们提供两种方式来显示二维码:1.后台发请求返回一

微信网页扫码登录

var $appid ='*********'; var $appsecret ='**********'; //构造函数,获取Access Token public function __construct($appid = NULL, $appsecret = NULL){ parent::__construct(); //扫码登录不需要该Access Token, 语义理解需要 //1. 本地写入 $res = file_get_contents('access_token.json');

黄聪:微信网页扫码登录的实现

为了让用户登录网站的门槛更低,微信扫一扫登录变得越来越广泛,所以最近加紧赶制的项目中有用到这个功能,此篇文字的出发点基于微信开放平台已经配置好域名(80端口)并且认证成功获得app_id和secret并有权限调用微信的接口.好了,就先谈一谈微信扫码登录的整个流程吧. 第一步,我们必须得把二维码放在页面上显示.首先普及一下二维码是有失效时间以及失效状态的,一旦你扫过一次二维码或者在某段时间内没有扫描页面上的二维码,该二维码就失效了.OK,微信官网给我们提供两种方式来显示二维码:1.后台发请求返回一

C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理

在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登陆处理. 1.开放平台的认证 要使用网站的扫码登录处理,就需要先进行微信开放平台帐号的开发者资质认证,提交相关的资料,以及交付每年300元的认证费用. 认证后,建立相关的网站应用后,就有相关的APPID和APPSecret了,这些关键的参数就可以用来获取相关的用户信息了. 网站应用的应用详情界面如下