Thinkphp5.1开发钉钉应用:企业免登陆_PC端demo

2023-11-07

config->base.php

<?phpreturn [
    'DIR_ROOT' => dirname(__FILE__) . '/',
    'OAPI_HOST' => 'https://oapi.dingtalk.com',
    'CORPID' => 'ding5c49********dc0d35c2f4657eb6378f',
    'SECRET' => 'pm7eJPbO8X********SkIt8IVcX7EKkHXZ5_28nqKe_we1j-aowauPDLkGl7dlTT',
    'AGENTID' => '16*****28',
    'ENCODING_AES_KEY' => '1*****6',
    'TOKEN' => 'VazMJWWiPbq********qtVBaKW3lvm5c7tB9aODCrI8',];

controller->Index.php

<?php

namespace app\pc\controller;

use think\facade\Config;
use think\Controller;
use think\facade\Request;
use think\facade\Session;

class Index extends Controller {

    public function index() {

        $config = Config::pull('base');
        $corpid = $config['CORPID'];
        $corpsecret = $config['SECRET'];

        $urltoken = "https://oapi.dingtalk.com/gettoken?corpid=" . $corpid . "&corpsecret=" . $corpsecret;
        $access_token_arr = json_decode(curl_http_request($urltoken), true);
        $access_token = $access_token_arr["access_token"];

        $urlticket = "https://oapi.dingtalk.com/get_jsapi_ticket?access_token=" . $access_token;
        $ticket_arr = json_decode(curl_http_request($urlticket), true);
        $ticket = $ticket_arr["ticket"];
        $nonceStr = $config['ENCODING_AES_KEY'];
        $timeStamp = time();
        $agentId = $config['AGENTID'];
        $href = get_current_page_url();
        $url = urldecode($href);
        //$corpAccessToken = $access_token;
        $signature = sign($ticket, $nonceStr, $timeStamp, $url);
        $this->assign(['access_token' => $access_token, 'corpid' => $corpid, 'agentId' => $agentId, 'timeStamp' => $timeStamp, 'nonceStr' => $nonceStr, 'signature' => $signature]);
        return $this->fetch();
    }

    public function login() {
        $urluserid = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" . Request::param('acctoken') . "&code=" . Request::param('username');
        $userid_arr = json_decode(curl_http_request($urluserid), true);
        $userid = $userid_arr["userid"];

        $urluserinfo = "https://oapi.dingtalk.com/user/get?access_token=" . Request::param('acctoken') . "&userid=" . $userid;
        $userinfo = json_decode(curl_http_request($urluserinfo), true);
        Session::set('user_name', $userinfo['name']);
        Session::set('user_mobile', $userinfo['mobile']);
    }

}

view->index->index.html

<!DOCTYPE html>
<html>
    <head>
        <title>我的工资条</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        {load href="/static/css/bootstrap.css" /}
        {load href="/static/js/jquery.min.js" /}
        {load href="/static/js/bootstrap.min.js" /}
        {load href="/static/js/index.js" /}
    </head>
    <body>
        <div class="container">
            <div class="col-sm-12 text-center">用户信息验证中,请稍后……</div>
            <form action="{:url('login')}" id="ddform" method="post">
                <input type="hidden" value="" id="username" name="username" />
                <input type="hidden" value="{$access_token}" id="acctoken" name="acctoken" />
            </form>
        </div>
    </body>
    <script type="text/javascript">
        DingTalkPC.config({
            agentId: '{$agentId}', // 必填,微应用ID
            corpId: '{$corpid}', //必填,企业ID
            timeStamp: '{$timeStamp}', // 必填,生成签名的时间戳
            nonceStr: '{$nonceStr}', // 必填,生成签名的随机串
            signature: '{$signature}', // 必填,签名
            jsApiList: ['device.notification.alert', 'device.notification.confirm'] // 必填,需要使用的jsapi列表
        });
        DingTalkPC.ready(function () {
            DingTalkPC.runtime.permission.requestAuthCode({

                corpId: '{$corpid}',
                onSuccess: function (result) {
                    alert(1);
                    $("#username").val(result.code);
                    $("#ddform").submit();
                },
                onFail: function (err) {
                    alert(2);
                    document.write('验证失败!' + err);
                }

            });
        });

    </script>
</html>

需要引入的文件:http://g.alicdn.com/dingding/dingtalk-pc-api/2.3.1/index.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thinkphp5.1开发钉钉应用:企业免登陆_PC端demo 的相关文章

  • ThinkPHP 大D方法思想下的JDBC操作数据库D类

    这里我封装出来的D 类 xff0c 是根据 ThinkPHP 中的 D 方法中做出来的 xff0c 其中有些出入的地方 xff0c 我进行了一些个性化的修正 xff0c 如 xff1a ThinkPHP 中操作数据库时 xff0c 需要在配
  • ThinkPHP中的create方法与自动令牌验证

    转载自 xff1a Thinkphp中Create方法深入探究 ThinkPHP中的create方法与自动令牌验证实例教程 Thinkphp中Create方法深入探究 由于工作原因在thinkPHP的create 方法上遇到了问题 xff0
  • find() php,Thinkphp中select()和find()方法

    1 做一个超链接 xff0c 包裹相册名称 xff0c 链接地址为photo show php 并把当前id传递进去 二 修改目录 1 添加修改的超链接 xff0c 传递id php view plain copy Thinkphp中sel
  • layer 弹框 cropper 裁剪上传图片,thinkphp 3 使用 CropAvatar.class.php

    最近要做一个上传裁剪图片功能 xff0c 但是网上收出来的东西 xff0c 知识点都是对的 但是就是没说清楚 xff0c 也无法连续起来用 经过自己整理出来的一套代码 xff0c 亲测可用 xff01 不用多说 xff0c 直接上菜 PS
  • axios自定义请求头跨域,thinkphp设置

    axios添加自定义请求头 在axios拦截器中 headers XXX 61 XX 配置后 thinkphp 返回跨域 需要对thinkphp中间件进行重新设置 主要配置在tp 复制 vendor topthink framework s
  • ThinkPHP方法简介

    1 U URL组装 支持不同URL模式 U方法 xff1a U方法是用来生成URL地址的 在模板中可以这样使用 生成当前模块的方法的操作地址 lt a href 61 34 U 39 方法名 39 34 gt 超链接 lt a gt 生成模
  • thinkphp根据时间戳查询时间范围内的记录

    这是获取当月月初和月末的时间戳 beginThismonth 61 mktime 0 0 0 date 39 m 39 1 date 39 Y 39 endThismonth 61 mktime 23 59 59 date 39 m 39
  • Thinkphp修改密码的实现

    密码修改是开发中很基础的一个功能 密码修改的HTML代码如下 span span lt form method 61 post class 61 form horizo ntal action 61 gt span span span st
  • thinkphp中display调用模板文件详…

    模板变量赋值后就需要调用模板文件来输出相关的变量 xff0c 模板调用通过display方法来实现 我们在操作方法的最后使用 xff1a this gt display 就可以输出模板 xff0c 根据前面的模板定义规则 xff0c 因为系
  • php跳转404_ThinkPHP设置404跳转页面

    ThinkPHP3 2 3设置404跳转页面 在ThinkPHP3 2版本中当我们访问不存在的页面时会出现错误提示页面 xff1a error png 解决办法 xff1a 1 在ThinkPHP3 2详细的介绍了该框架下的ThinkPHP
  • thinkphp6 入门(4)--数据库操作 增删改查

    一 设计数据库表 比如我新建了一个数据库表 名为test 二 配置数据库连接信息 本地测试 直接在 env中修改 不用去config database php中修改 正式环境 三 增删改查 引入Db库 use think facade Db
  • 微信公众号配置token

    1 在微信公众平台开发 基本设置页面 点击 修改配置 按钮 填写服务器地址 URL Token和EncodingAESKey token可以任意填写 对应验证的token URL对应是可以访问到 验证token的方法 的链接 2 代码中进行
  • 【thinkphp5学习笔记之一 】安装

    一 安装composer 1 点此下载composer 然后运行 2 打开cmd 按行分别输入以下代码 要求php安装并且路径配置完毕 php r copy https install phpcomposer com installer c
  • 《thinkphp》一、通用化api和异常解决方案

    一 通用化API接口数据封装 1 将下面代码放到common php公共文件中 方便调用 通用化API接口数据输出 param int status 业务状态码 param string message 信息提示 param data 数据
  • Thinkphp5.1开发钉钉应用:企业免登陆_移动端demo

    config gt base php
  • thinkphp6 本地开发环境window如何安装

    先下载phpstudy 再看下面的教程 tp6框架入门 如何安装tp6以及创建实例应用 Mr LiJiaLe的博客 CSDN博客
  • 网站报错 :SLQSTATE[HY000]:General error:145 Table ‘./**@002******@/002ecn/ey_config‘ is mar

    后台使用过程中 因为某个操作而出现报错 SQLSTATE HY000 General error 145 Table 002 002ecn ey config is marked as crashed and should be repai
  • ThinkPHP5多语言切换项目实战

    ThinkPHP5多语言切换实战 1 在配置文件中开启多语言配置 2 然后添加多语言目录 这里创建你需要的语言包 在语言包里定义需要翻译的文本 中英文数组的键名写成一致 然后在html文件里输入 lang 键名 对应的键名 就是下图的写法
  • thinkphp6 入门(5)-- 模型是什么 怎么用

    一 模型 MVC架构 之前开发一个功能 后端为在控制器 C 中写 php SQL 前端为在页面 V 中写html css js 这就形成了 VC 架构 但是发现 相同的数据逻辑 SQL 在不同的功能中可能被用到 所以可以把数据逻辑 SQL
  • thinkphp6 入门(6)--中间件是什么 怎么用

    一 什么是中间件 当客户端发送请求至服务器时 HTTP请求会经过多个中间件 最后返回响应给客户端 中间件可以 在请求到达目标控制器或动作之前对请求进行操作 可以在响应离开目标控制器或动作之前对响应进行操作 二 中间件的作用 我们可以在不修改

随机推荐

  • vue3.0之-watch全面解析

    1 监听ref 创建的基本数据类型 栗子1 监听多个数据
  • OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and

    OpenJDK 64 Bit Server VM warning Options Xverify none and noverify were deprecated in JDK 13 and will likely be removed
  • Anaconda下载与安装详解

    第一步 进入官网下载符合自己电脑版本的anaconda 官网地址 https www anaconda com products distribution 其它版本 下拉最后 如图所示 第二步 双击打开下载好的安装文件 如图所示 点击 Ne
  • KNN分类算法原理及其Matlab实现

    KNN算法原理 K近邻算法是一种简单的监督学习算法 对于给定测试样本 直接计算该样本和训练集的距离 将距离最近的k个 邻居 点的类别作为参考 作为预测结果返回 测试数据 测试数据来自林智仁的分类任务数据集 链接 https www csie
  • 想在Android应用程序中将XLS文件转换为PDF吗?看完这篇教程就懂了

    在各种情况下 您可能需要通过Internet共享Excel文件 为避免篡改 最佳做法是在共享之前将这些文件转换为PDF格式 因此 在本文中 将学习如何在Android应用程序中将Excel XLSX或XLS文件转换为PDF 另外 还将讨论E
  • Svelte 实现 keypress 快捷键功能

    有些框架中内置了常用的事件修饰符和按键修饰符 例如 Vue 中就提供了按键 enter 13 修饰键 ctrl alt shift meta等修饰符 简化了很多快捷键功能的实现 在 Svelte 中也提供了 preventDefault s
  • C++ stack容器

    C stack容器 1 stack容器的基本概念 2 stack容器的创建 stack 默认构造函数 创建一个空的 stack 对象 例如 下面一行代码使用默认的 deque 为底层容器 创建一个空的堆栈对象 s stack
  • 扫雷

    扫雷 扫雷游戏是晨晨和小璐特别喜欢的智力游戏 她俩最近沉迷其中无法自拔 该游戏的界面是一个矩阵 矩阵中有些格子中有一个地雷 其余格子中没有地雷 游戏中 格子可能处于己知和未知的状态 如果一个己知的格子中没有地雷 那么该 格子上会写有一个一位
  • 计算机网络---TCP/IP网络编程实验

    文章目录 计算机网络 TCP IP网络编程实验 一 实验目的 二 实验环境和任务 三 实验步骤及实验结果记录 四 实验结果分析和总结 计算机网络 TCP IP网络编程实验 一 实验目的 掌握TCP IP协议的基本知识 TCP IP协议的基本
  • 2023秋招,软件测试面试八股文(有答案版),金九银十季,涨薪涨薪

    最近呢有很多的小伙伴问我有没有什么软件测试的面试题 由于笔者之前一直在忙工作上的事情 没有时间整理面试题 刚好最近休息了一下 顺便整理了一些面试题 现在就把整理的面试题分享给大家 希望可以帮助到各位 废话就不多说了直接上干货 Tip 我整理
  • jQuery插件开发全解析,jQuery.extend , (function($){ , $.fn.pluginName

    序 匿名函数 匿名函数没有实际名字 也没有指针 怎么执行滴 其实大家可以看看小括号的意义就应该可以理解 小括号有返回值 也就是小括号内的函数或者表达式的返回值 所以说小括号内的function返回值等于小括号的返回值 不难理解 functi
  • Python for循环的使用

    一 for循环的使用场景 1 如果我们想要某件事情重复执行具体次数的时候可以使用for循环 2 for循环主要用来遍历 循环 序列 集合 字典 文件 甚至是自定义类或函数 二 for循环操作列表实例演示 使用for循环对列表进行遍历元素 修
  • 使用策略模式+工厂模式对接口进行分配处理。远离if else

    使用策略模式 工厂模式对接口进行分配处理 远离if else 背景 在项目中我们会遇到不同时间或者不同条件下 调用不同的方法或处理方式 因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为 再用工厂模式进行匹配对应的对象 首先我们做
  • PID稳压

    思路说明 我们设置一个目标值 这是我们要调节的目标 我们通过AD采样 PC3 采集到当前电压 通过减法运算我们得出当前电压与目标电压的差值 接下来我们只要发现当前电压与目标电压不同 我们就要想办法改变当前单片机的输出电压 PA8 也就是当前
  • C++学习之gcc编译四步

    C 学习之gcc编译四步 一 linux下编写Hello World 代码文件 二 gcc编译四步 1 预处理 Preprocessing 2 编译 Compilation 3 汇编 Assembly 4 链接 Linking 三 执行 四
  • 论文学习(一)——MWP-BERT: Numeracy-Augmented Pre-training for Math WordProblem Solving

    记录一下自己的第一篇论文学习 摘要 数学应用题 MWP 的求解面临着数字表示学习的困境 为了避免数字表示的问题 并且减少可行解的搜索空间 现有求解MWP的工作通常用符号占位符代替实数 以便专注于逻辑推理 然而 不同于常见的符号推理任务 如程
  • STM32——STM32F103系列学习笔记(纯干货版)

    一 RCC函数 关于RCC函数的使用配置如下 一 定时器资源分配 关于定时器资源分配如下
  • Timer源码分析

    java util Timer简介 Timer是用于管理在后台执行的延迟任务或周期性任务 其中的任务使用java util TimerTask表示 任务的执行方式有两种 按固定速率执行 即scheduleAtFixedRate的两个重载方法
  • Python入门学习01

    基础 输出 输出语句print print 输出语句 输出函数 1 在控制台输出一段文本信息 用一对英文双引号标记 print 文本信息 默认换行 2 print 文本信息 end 结尾 n 换行符 t 制表符 3 print 文本信息1
  • Thinkphp5.1开发钉钉应用:企业免登陆_PC端demo

    config gt base php