钉钉小程序生态3—钉钉扫码登录PC端网站

这篇具有很好参考价值的文章主要介绍了钉钉小程序生态3—钉钉扫码登录PC端网站。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章导航

钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用
钉钉小程序生态2—区分小程序和H5微应用
钉钉小程序生态3—钉钉扫码登录PC端网站
钉钉小程序生态4—钉钉小程序三方企业应用事件与回调
钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知
钉钉小程序生态6—钉钉OA自定义审批流的创建和使用
钉钉小程序生态7—企业机器人加互动卡片,改善用户体验的开始!

第一部分、准备材料🌲

1.公网环境

老版钉钉扫码中必须要配置一个域名才可以调试,新版支持IP配置调了。我是手机打开热点,电脑连接热点进行调试的,比老版要方便了不少。

查看本机IP地址方法:
如果使用的Windows,执行命令:ipconfig

如果使用的Mac,执行命令:ifconfig en0

2.创建一个小程序(企业内应用即可)

这个小程序可以是H5微应用也可以是小程序,但需要是企业内应用。
将创建后的小程序appKey和appSecret复制后保存下来。

钉钉小程序生态3—钉钉扫码登录PC端网站

3.搭建SpringBoot项目

目录结构如下:
钉钉小程序生态3—钉钉扫码登录PC端网站

注意:resources中的目录结构和文件名一定要和我的一致,不能多不能少,否则会出现启动报错或者找不到文件的问题。

第二部分、环境配置⚙

1.SpringBoot项目pom.xml

这里我引入了VM模板用来放置扫码页与首页的html代码,引入DingTalk调用三方接口获取扫码用户的基本信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringBoot-DDScan</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBoot-DDScan</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- dingding -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>1.1.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dingtalk</artifactId>
            <version>1.2.5</version>
        </dependency>


        <!-- VM 模板 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>velocity-spring-boot-starter</artifactId>
            <version>1.0.4.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.SpringBoot项目application.properties

spring.application.name=dd-scan
server.port=8080

## 小程序AppID和AppSecret(此处填入自己复制的)
qr.appId=xxxx
qr.appSerret=xxxx

# Velocity\u914D\u7F6E\uFF0C\u8BE6\u89C1 http://gitlab.alibaba-inc.com/middleware-container/pandora-boot/wikis/spring-boot-velocity
spring.velocity.resource-loader-path=classpath:/velocity/templates
spring.velocity.toolbox-config-location=/velocity/toolbox.xml
spring.velocity.layout-url=/velocity/layout/default.vm

3.钉钉开放平台-登录与分享配置回调域名

这里的回调地址就是扫码后跳转的地址。这里的地址与下面login.vm中的window.url 一定要一模一样,否则会扫码会弹出”回调域名配置错误“的提示。
钉钉小程序生态3—钉钉扫码登录PC端网站

4.钉钉开放平台-权限管理授权

选择:个人手机号信息、成员信息读权限权限即可
钉钉小程序生态3—钉钉扫码登录PC端网站

第三部分、代码📚

1.后端代码

(1)SpringBootDdScanApplication.java

package com.example.springbootddscan;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDdScanApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDdScanApplication.class, args);
    }

}

(2)MainController.java

package com.example.springbootddscan.controller;

import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
import com.aliyun.dingtalkcontact_1_0.models.GetUserResponse;
import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenRequest;
import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/login")
public class MainController {

    @Value("${qr.appId}")
    private String qrAppId;

    @Value("${qr.appSerret}")
    private String qrAppSecret;

    @GetMapping("/toLoginPage")
    public ModelAndView toLoginPage() {
        return new ModelAndView("login");
    }

    @GetMapping("/scanLogin")
    public ModelAndView scanLogin(@RequestParam String authCode) throws Exception {
        //获取当前小程序的accesstoken
        GetUserTokenResponse userTokenResponse = getUserAccessToken(qrAppId, qrAppSecret, authCode, "authorization_code");
        //查询当前用户信息
        GetUserResponse me = getUserWithOptions(userTokenResponse.getBody().getAccessToken(), "me");
        //获取首页模板
        ModelAndView modelAndView = new ModelAndView("index");
        modelAndView.addObject("userid",me.getBody().getOpenId());
        modelAndView.addObject("userName",me.getBody().getNick());
        modelAndView.addObject("userPhone",me.getBody().getMobile());
        return modelAndView;
    }

    public GetUserResponse getUserWithOptions(String accessToken, String unionId) throws Exception {
        // 准备请求配置参数
        Config config = new Config();
        // 设置请求协议
        config.protocol = "https";
        // 设置请求区域
        config.regionId = "central";
        // 初始化账号Client
        com.aliyun.dingtalkcontact_1_0.Client client = new com.aliyun.dingtalkcontact_1_0.Client(config);
        GetUserHeaders getUserHeaders = new GetUserHeaders();
        getUserHeaders.xAcsDingtalkAccessToken = accessToken;
        return client.getUserWithOptions(unionId, getUserHeaders, new RuntimeOptions());
    }

    public GetUserTokenResponse getUserAccessToken(String suiteKey, String suiteSecret, String authCode, String grantType) throws Exception {
        // 准备请求配置参数
        Config config = new Config();
        // 设置请求协议
        config.protocol = "https";
        // 设置请求区域
        config.regionId = "central";
        // 初始化账号Client
        com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
        GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()
                .setClientId(suiteKey)
                .setClientSecret(suiteSecret)
                .setCode(authCode)
                .setGrantType(grantType);
        return client.getUserToken(getUserTokenRequest);
    }
}

2.前端代码

(1)login.vm

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>钉钉扫码登录</title>
</head>
<body>
<!-- 方案二 ,该方法依赖jquery库-->
<script src="https://g.alicdn.com/dingding/h5-dingtalk-login/0.21.0/ddlogin.js"></script>
<script>
    <!-- 获取到的IP地址 -->
    window.url = 'http://xxx.xx.xxx.xx:8080/login/scanLogin'
    <!-- 小程序的appId -->
    window.appid = 'xxxx'
</script>
<!-- STEP1:在HTML中添加包裹容器元素 -->
<div id="self_defined_element" class="self-defined-classname"></div>
<style>
    /* STEP2:指定这个包裹容器元素的CSS样式,尤其注意宽高的设置 */
    .self-defined-classname {
        width: 300px;
        height: 300px;
    }
</style>
<script>
    // STEP3:在需要的时候,调用 window.DTFrameLogin 方法构造登录二维码,并处理登录成功或失败的回调。
    window.DTFrameLogin(
            {
                id: 'self_defined_element',
                width: 300,
                height: 300,
            },
            {
                redirect_uri: encodeURIComponent(window.url),
                client_id: window.appid,
                scope: 'openid',
                response_type: 'code',
                state: 'test',
                prompt: 'consent',
            },
            (loginResult) => {
                console.log(loginResult)
                const {redirectUrl, authCode, state} = loginResult;
                // 这里可以直接进行重定向
                window.location.href = redirectUrl;
                // 也可以在不跳转页面的情况下,使用code进行授权
                console.log(authCode);
            },
            (errorMsg) => {
                // 这里一般需要展示登录失败的具体原因
                alert(`Login Error: ${errorMsg}`);
            },
    );
</script>
</body>
</html>

(2)index.vm

<h1>首页</h1>
<h2>userid: ${userid}</h2>
<h2>用户名: ${userName}</h2>
<h2>手机号码:${userPhone}</h2>

3.其他文件

(1)toolbox.xml

<?xml version="1.0" encoding="UTF-8"?>

<tools>
    <data type="number" key="TOOLS_VERSION" value="2.0"/>
    <data type="boolean" key="GENERIC_TOOLS_AVAILABLE" value="true"/>
    <toolbox scope="application">
        <tool class="org.apache.velocity.tools.generic.AlternatorTool"/>
        <tool class="org.apache.velocity.tools.generic.ClassTool"/>
        <tool class="org.apache.velocity.tools.generic.ComparisonDateTool"/>
        <tool class="org.apache.velocity.tools.generic.ConversionTool"/>
        <tool class="org.apache.velocity.tools.generic.DisplayTool"/>
        <tool class="org.apache.velocity.tools.generic.EscapeTool"/>
        <tool class="org.apache.velocity.tools.generic.FieldTool"/>
        <tool class="org.apache.velocity.tools.generic.MathTool"/>
        <tool class="org.apache.velocity.tools.generic.NumberTool"/>
        <tool class="org.apache.velocity.tools.generic.ResourceTool"/>
        <tool class="org.apache.velocity.tools.generic.SortTool"/>
        <tool class="org.apache.velocity.tools.generic.XmlTool"/>
    </toolbox>
    <toolbox scope="request">
        <tool class="org.apache.velocity.tools.generic.ContextTool"/>
        <tool class="org.apache.velocity.tools.generic.LinkTool"/>
        <tool class="org.apache.velocity.tools.generic.LoopTool"/>
        <tool class="org.apache.velocity.tools.generic.RenderTool"/>
        <tool class="org.apache.velocity.tools.view.CookieTool"/>
        <tool class="org.apache.velocity.tools.view.ImportTool"/>
        <tool class="org.apache.velocity.tools.view.IncludeTool"/>
        <tool class="org.apache.velocity.tools.view.PagerTool"/>
        <tool class="org.apache.velocity.tools.view.ParameterTool"/>
        <tool class="org.apache.velocity.tools.view.ViewContextTool"/>
        <!--
        This is not directly useable.
        <tool class="org.apache.velocity.tools.view.AbstractSearchTool"/>
        -->
        <!-- move this to request scope -->
        <tool class="org.apache.velocity.tools.generic.ResourceTool"/>
        <!--
        This is not useful in its default form.
        But, if it were, it'd be request-scoped.
        <tool class="org.apache.velocity.tools.generic.ValueParser"/>
        -->
    </toolbox>
</tools>

(2)default.vm

$!{screen_content}

第四部分、演示🍓

1.输入登录地址

http://xxx.xxx.xxx.xxx:8080/login/toLoginPage

这里记住一定要用IP,不能使用localhost或者127.0.0.1,否则即使二维码能出现,扫码完也不会有反应。
钉钉小程序生态3—钉钉扫码登录PC端网站

2.使用钉钉扫码

扫完码后钉钉会弹出一个授权页,点击同意即可。

钉钉小程序生态3—钉钉扫码登录PC端网站

3.钉钉回调地址进入首页

钉钉小程序生态3—钉钉扫码登录PC端网站

第五部分、原理解释

钉钉文档链接:https://open.dingtalk.com/document/orgapp-server/tutorial-obtaining-user-personal-information文章来源地址https://www.toymoban.com/news/detail-506545.html

到了这里,关于钉钉小程序生态3—钉钉扫码登录PC端网站的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 - 最新手机扫码PC网站二维码登录功能,用手机端扫描PC端vue3网页的登录二维码,然后在手机上点击“确认登录“完成登录,PC网页生成登录二维码,用户拿手机扫码,手机上点确定后电脑端做出响应

    在vue3开发中,详细实现 “PC电脑网站生成微信登录二维码+手机扫码登录+双端同步数据”,利用扫码实现网站登录功能、用户用手机扫描电脑端二维码进行登录的详细教程步骤(电脑端PC网页、手机端都是vue3开发,支持将手机端改造成微信小程序、uniapp安卓苹果app、H5网页等

    2024年04月13日
    浏览(32)
  • 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程

           1. 手机端浏览器登录网页的同时再用微信或者QQ扫码登录出现二维码失效问题如何解决?                   2.部分网站无法访问PC网页版如何解决?请看方案 目录 前言 1.方案 2.方案       使用Edge安卓浏览器访问电脑版网页 1.操作       1.1小米浏览器+微信(应用

    2023年04月08日
    浏览(41)
  • 网站使用微信小程序扫码登录的实现方法

    传统网站一般都会使用账号密码登录,但这种方式总有用户会忘记密码,找回密码需要一系列验证,也挺麻烦的,于是学习了一下扫码登录,这种方式不仅不会有忘记密码的烦恼,登录还十分快捷。用户体验较好. 网站端点击小程序图片,弹出小程序码 小程序端授权页面 1、

    2024年02月16日
    浏览(39)
  • 【钉钉小程序】钉钉小程序预览文件的两种方式,从获取权限到预览文件全过程

    最近写钉钉小程序项目过程中,要实现页面展示pdf、word、ppt等文件的功能。在网上搜了很多文章,研究了很久,总结了一下有两种实现该功能的方法,方法一:借助web-view组件打开外部网页;方法二:通过上传到钉盘,从钉盘打开文件。具体过程如下。 钉钉开放文档-web-vie

    2024年02月15日
    浏览(116)
  • 开发钉钉小程序

    本来开始打算、从原生开始入手的,可是生态太差了,几乎搜不到啥有用的内容;但是它的老大哥支付宝小程序生态就不错,毕竟它们两个都用一个开发者工具,万分纠结之下,朋友强力安利我uniapp开发钉钉小程序,说是有很多不错的组件,你刚学的vue 和 vuex就可以用上了,

    2024年02月11日
    浏览(33)
  • 钉钉小程序无法关联应用

    钉钉小程序无法关联应用 后台创建了新的应用 钉钉小程序开发者工具企业内部应用关联应用 没有下拉列表 无法关联,只能点击新增按钮,重新进入后台 很奇怪,明明创建好了应用,为什么关联下拉列表没有这个应用呢? 创建应用还不够,需要添加应用能力 应用能力添加应

    2024年02月21日
    浏览(37)
  • uniapp运行钉钉小程序

    因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。 在项目目录新建package.json文件,在文件中添加如下代码: 这样在项目目录中unpackage文件下生成支付宝的项目文件

    2024年04月25日
    浏览(29)
  • 使用HBuilder运行钉钉小程序

    1,创建package.json文件夹,添加以下代码 2,点击运行按钮,就可以打开了 , 查看控制台,在小程序开发者工具中进行要导入的路径  

    2024年02月16日
    浏览(55)
  • 钉钉小程序引用阿里巴巴图标

    2.打开的界面如图,先建一个iconfont.acss文件,全选浏览器打开的样式代码,复制粘贴进新建的iconfont.acss文件中 3.使用

    2024年02月11日
    浏览(45)
  • 钉钉小程序的开发入门【亲自调试】

    一、创建应用 在本部分,你将在开发者后台创建一个小程序应用,并完成基础配置。 登录钉钉开发者后台 在开发者后台页面,选择企业内部开发,然后单击创建应用。  3、在弹出的创建应用页面中填写基本信息,然后单击 确定创建 。应用类型:选择小程序,开发方式:选

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包