# ding-micro-server **Repository Path**: ab-code/ding-server ## Basic Information - **Project Name**: ding-micro-server - **Description**: 用于钉钉H5微应用开发,服务端示例代码。 提供/login登录获取用户信息接口,提供回调消息相关功能。使用教程地址:https://www.cnblogs.com/applerosa/p/11509512.html - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 23 - **Created**: 2020-12-24 - **Last Updated**: 2020-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## `钉钉微应用` 服务端示例程序. > `接入流程`/`使用说明`/`教程` 请参照: [https://www.cnblogs.com/applerosa/p/11509512.html](https://www.cnblogs.com/applerosa/p/11509512.html) > > 适用于`第三方企业` 的 `H5微应用`, 消息处理模式为`HTTP回调` code style maven maven ## 编译/构建/打包 > 项目采用`maven` 构建/管理依赖/打包发布 > 清理编译结果重新编译: `mvn clean compile` > 构建/打包: `mvn package` 由于我自身在`pom.xml`中的相关配置, 所以`package`的结果,lib依赖包是独立的,没有放入最终的jar包,部署时需要注意 ## 项目说明 1. 使用了钉钉`java`语言的`SDK jar 包`,位置在`/bak/toabao-xxxxxxxx.jar`, 请自行引入; 2. 钉钉微应用/套件 的配置在项目主配置文件`resources/application.yml`里面; 3. 项目使用的额外的一些工具类, `apache`的`commons-codec`中`Base64`, 除`springboot`自身依赖之外无其他依赖; 4. 项目导入之后, 编译完成, 启动 `cn.lnexin.DingApplication.main()` 即可启动项目; ## 功能说明 > 再强调一遍: 适用于`第三方企业` 的 `H5微应用`, 消息处理模式为`HTTP回调` 因为是微应用服务端的示例程序,所以某些功能具体的业务实现是没有的,比如: 钉钉发送下单数据过来, 示例包含接收订单数据步骤, 处理逻辑各人自己补充; > 相关概念说明 ```$xslt 套件/微应用 suiteKey : 创建微应用后,基础信息里面有 套件/微应用 suiteSecret : 应用密钥, 创建微应用后,基础信息里面有 套件/微应用 suiteTicket : 钉钉给应用推送的ticket,测试应用随意填写如:TestSuiteTicket,正式应用需要从推送回调获取suiteTicket 套件/微应用 suitetoken : 钉钉推送消息过来,我们解密数据时需要, 创建微应用后,基础信息里面 套件/微应用 aesKey : 消息加密解密用, 创建微应用后,基础信息里面 免登授权码 code : 前端在调用钉钉相关 jsapi "dd.runtime.permission.requestAuthCode()" 之后获得 企业授权凭证 accessToken : 由后台根据suiteKey,suiteSecret,suitrTicket 向钉钉服务器请求获得 企业id corpId : 企业/组织的唯一Id 用户userid userId : 用户在当前企业内的唯一ID 用户unionid unionId : 用户在我们开发的整个微应用中, 的唯一ID 第三方应用凭证 suite_access_token : 根据我们的suitekey/secret/ticket 向钉钉请求获取的, 这个是我们的应用(套件)对购买了应用的企业授权用的 临时授权码 tmp_auth_code : 钉钉发给我们的 永久授权码 permanentCode : 根据 临时授权码 和 suite_access_token 获取的, 用于激活应用授权 ``` > 下面大概说一下有哪些示例: 1. 根据 corpId 获取 accessToken ; 2. 通过 免登code / accessToken 获取 用户的userId 3. 通过 accessToken / userId获取 用户详情(包括姓名) (一般的登录流程为: 微应用进入前端页面获取企业ID,然后前端初始化获取免登code, 然后服务端用根据这两个参数, 通过上面3个步骤, 查询出户信息 补充自己的一些处理逻辑,将数据返回前端即可) 4. 获取企业的授权详细信息,这里可以理解为通过 accessToken/corpID 获取企业详情; 5. 剩余的接口请参照 钉钉官方服务端开发文档 > 回调功能相关(钉钉推送数据到我们服务器) 因为是基于HTTP回调的模式,所以需要下面的步骤 1. 解密消息 2. 加密我们返回的消息; 3. 获取第三方应用凭证 suite_access_token , 这个是应用(套件)对企业授权用的, 和上面的accessToken不是一个东西; 3. 根据 suite_access_token / 临时授权码 获取 永久授权码; 4. 根据 suite_access_token / 永久授权码 / corpId 激活应用; (完成上面的步骤,就可以授权企业使用应用或者体验应用,意思就是你就可以在钉钉里面看到这个微应用了) ## api接口 |功能|uri地址|类型|参数|返回| |:---|:---|:---:|:---|:---| |测试:获取配置|/ding/config |GET|无|测试服务是否启动成功| |登录|/ding/login |GET|code,corpId|返回用户详情,里面包含token| |获取accessToken|/ding/token |GET|corpId|仅仅只是获取accessToken| |钉钉回调接口|/ding/callback |POST|signature,timestamp,nonce,encryptBody|前3个参数位于url中,encrtpt位于post的body中|