【浙政钉】第一篇:企业内应用免登

简介: 介绍如何对接浙政钉。

专有钉钉为浙政钉的测试平台,接下来为大家介绍如何对接浙政钉。

image.png

介绍

一 、专有钉钉

专有钉钉是什么?专有钉钉是个开放的saas平台,用于对接浙政钉的测试平台,接口等和浙政钉正式环境一样。

二、准备工作

对接浙政钉之前,需要申请专有钉钉的ISV账号,这个账号是以单位为主进行创建。

传送门:https://openplatform-portal.dg-work.cn/portal/#/ISVRegisterLogin

image.png

创建好账号后,可以创建一个项目,如图:
https://openplatform-portal.dg-work.cn/devPage/#/appDev/myApp

image.png

然后就是对创建的项目进行配置,如图:

image.png

好了,到此就正式介绍完毕了。

开发阶段

三、开发环境

开发工具:idea 开发语言:Java 使用框架:SpringBoot

依赖:

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.oracel</groupId>
            <artifactId>zwdd-sdk-java</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dingtalk</artifactId>
            <version>1.3.23</version>
        </dependency>

        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>

注意:依赖这个依赖是我自己生成在maven中的,你们可以根据自己maven仓库生成到具体文件夹

<dependency>
            <groupId>com.oracel</groupId>
            <artifactId>zwdd-sdk-java</artifactId>
            <version>1.2.0</version>
</dependency>

sdk(jar包)下载:https://openplatform-portal.dg-work.cn/portal/#/helpdoc?apiType=TOOL_SOURCES&docKey=3355368

image.png

jar生成maven依赖命令,我这边以为上面说的依赖来


mvn install:install-file -Dfile=D:\jar\zwdd-sdk-java-1.2.0.jar -DgroupId=com.oracel -DartifactId=zwdd-sdk-java
-Dversion=1.2.0 -Dpackaging=jar

路径:D:\jar\zwdd-sdk-java-1.2.0.jar 我是下载jar包的路径,可以根据自己的来。

四、参数配置

先在yml文件中做好配置:

#专有钉钉参数
zzdingTalk :
  appKey : xxxxxxxxxxxxxxx
  appSecret : xxxxxxxxxxxxxxxxx
  domainName : openplatform.dg-work.cn
  protocal : https
  tenantId : 1111111

参数说明:
appKey 、appSecret : 为创建应用的秘钥

image.png

domainName:调用服务的域名

服务端     |            域名
浙政钉    | openplatform-pro.ding.zj.gov.cn
专有钉钉    |  openplatform.dg-work.cn

tenantId :为租户id,简单点说就是你登陆的账号id
如何知道你的tenantId呢?你可以在钉钉专有版开放平台开发者后台 (dg-work.cn)这个页面https://openplatform-portal.dg-work.cn/devPage/#/appDev/myApp 右击查看源代码,如图找到tenantId。
image.png

五、代码开发

1、获取token

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.xxpt.gateway.shared.api.request.OapiMoziOrganizationListOrganizationsByCodesRequest;
import com.alibaba.xxpt.gateway.shared.api.response.OapiMoziOrganizationListOrganizationsByCodesResponse;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.GetClient;
import com.alibaba.xxpt.gateway.shared.client.http.IntelligentPostClient;
import com.alibaba.xxpt.gateway.shared.client.http.PostClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

/***
 * 浙政钉通讯
 */
@Service
@Slf4j
public class DingTalkService {
   
   

    @Value("${zzdingTalk.domainName}")
    private String domainName;
    @Value("${zzdingTalk.appKey}")
    private String appKey;
    @Value("${zzdingTalk.appSecret}")
    private String appSecret;
    @Value("${zzdingTalk.protocal}")
    private String protocal;
    @Value("${zzdingTalk.tenantId}")
    private String tenantId;

    @Autowired
    private RedisTemplate redisTemplate;


    /***
     * 获取浙政钉token
     * @return
     */
    public String getToken() {
   
   
        if (redisTemplate.hasKey("dingTalkToken")) {
   
   
            return redisTemplate.opsForValue().get("dingTalkToken").toString();
        }
        ExecutableClient executableClient = ExecutableClient.getInstance();
        executableClient.setDomainName(domainName);
        executableClient.setProtocal(protocal);
        executableClient.setAccessKey(appKey);
        executableClient.setSecretKey(appSecret);
        executableClient.init();
        //executableClient要单例,并且使用前要初始化,只需要初始化一次
        String api = "/gettoken.json";
        GetClient getClient = executableClient.newGetClient(api);
        //调用API
        String apiResult = getClient.get();
        log.info("获取浙政钉token:{}", apiResult);
        JSONObject jsonObject = JSONObject.parseObject(apiResult);
        String token = "";
        Integer expiresIn = 0;
        if (jsonObject.getBoolean("success")) {
   
   
            token = jsonObject.getJSONObject("content").getJSONObject("data").getString("accessToken");
            expiresIn = jsonObject.getJSONObject("content").getJSONObject("data").getInteger("expiresIn");
            redisTemplate.opsForValue().set("dingTalkToken", token, expiresIn, TimeUnit.SECONDS);
        }
        return token;
    }
}

返回参数:

log.info("获取浙政钉token:{}", apiResult);返回如下:
{
   
   
    "success":true,
    "content":{
   
   
        "data":{
   
   
            "accessToken":"c139fe44362f41b6b84862ec82ab84d9",
            "expiresIn":"7200"
        },
        "requestId":"df04428415724925400701038d663a",
        "responseMessage":"OK",
        "responseCode":"0",
        "success": true
    }
}

我的代码中已经解析了json,所以最后只返回token字符串了。

2、获取临时授权码
这个就涉及到前端了,前端可以调用如下代码,新建个页面,然后在专有钉钉内打开你页面的地址。(其他容器打开获取不到),点击 专有钉钉门户 (dg-work.cn)进行查看api。

小程序获取免登授权码
使用说明

npm install gdt-jsapi

推荐使用 npm 包形式按需引入,小程序可以通过以下方式进行引入

import dd from 'gdt-jsapi';

dd.getAuthCode({
   
   }).then(res =>{
   
   
    console.log(res)
}).
catch(err =>{
   
   })

3、获取用户信息

 /***
     * 获取用户信息
     * @param code 临时授权码
     * @return
     */
    public JSONObject getDingTalk(String code) {
   
   
        String accessToken = getToken();
        ExecutableClient executableClient = ExecutableClient.getInstance();
        executableClient.setDomainName(domainName);
        executableClient.setProtocal(protocal);
        executableClient.setAccessKey(appKey);
        executableClient.setSecretKey(appSecret);
        executableClient.init();
        String api = "/rpc/oauth2/dingtalk_app_user.json";
        PostClient postClient = executableClient.newPostClient(api);
        postClient.addParameter("access_token", accessToken);
        postClient.addParameter("auth_code", code);
        String apiResult = postClient.post();
        log.info("获取浙政钉获取用户信息:{}", apiResult);
        return JSONObject.parseObject(apiResult);
    }

返回参数:

{
   
   
    "success":true,
    "content":{
   
   
        "data":{
   
   
            "accountId":93,
            "lastName":"洪阳",
            "clientId":"mozi-developer-center",
            "realmId":57,
            "openid":"6f1a885a4020f3624b71570b74925d7b",
            "realmName":"绣花针测试租户",
            "namespace":"local",
            "nickNameCn":"洪阳",
            "tenantUserId":"57$93",
            "account":"pishi.hy",
            "employeeCode":"pishi.hy"
        },
        "responseMessage":"成功",
        "responseCode":"0",
        "success":true
    }
}

到此处,已经获取到用户信息了,接下来就是对用户的入库,生成对应的token给前端,然后就是一些业务了。

按照如上操作,就已经实现了企业内免登操作了。

相关文章
|
移动开发 测试技术 开发工具
【钉钉免登录】(详解)钉钉接口,H5微应用,钉钉免登录及获取当前用户信息
【钉钉免登录】(详解)钉钉接口,H5微应用,钉钉免登录及获取当前用户信息
2854 1
【钉钉免登录】(详解)钉钉接口,H5微应用,钉钉免登录及获取当前用户信息
|
存储 缓存 移动开发
|
JSON API 开发者
钉钉如何调用「创建钉钉待办任务」接口?
钉钉如何调用「创建钉钉待办任务」接口?
816 0
|
Web App开发 XML Java
SpringMVC使用MultipartResolver和MultipartFile实现文件上传
SpringMVC使用MultipartResolver和MultipartFile实现文件上传
1974 0
|
Java Maven
zwdd-sdk-java
zwdd-sdk-java
1361 0
|
11月前
|
缓存 监控 Java
说一说 SpringCloud Gateway 堆外内存溢出排查
我是小假 期待与你的下一次相遇 ~
1386 5
|
12月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
640 11
|
SQL 关系型数据库 分布式数据库
PolarDB开源数据库入门教程
PolarDB是阿里云推出的云原生数据库,基于PostgreSQL、MySQL和Oracle引擎构建,具备高性能、高扩展性和高可用性。其开源版采用计算与存储分离架构,支持快速弹性扩展和100%兼容PostgreSQL/MySQL。本文介绍了PolarDB的安装方法(Docker部署或源码编译)、基本使用(连接数据库、创建表等)及高级特性(计算节点扩展、存储自动扩容、并行查询等)。同时提供了性能优化建议和监控维护方法,帮助用户在生产环境中高效使用PolarDB。
3311 21
|
存储 移动开发 JavaScript
IRS应用发布之十一:应用部署发布
开发商工作台基于Docker体系和NodeJS构建发布系统,Docker镜像版本为NodeJS Long Term Support (LTS)版(node:lts),根据NodeJS升级计划自动更新默认版本。构建流程如下所示:
IRS应用发布之十一:应用部署发布