本帖和代码  持续更新,请收藏关注。
talk is cheap, show me the code
 
============================================
注册套件,并且授权企业
1.前提准备
        公网服务器,假设IP地址为127.0.0.1
        TOMCAT端口假设为8080
        MYSQL数据库
        (工程目前只依赖了 TOMCAT,MYSQL,这两个个中间件,如果不满足请自行解决。删除了ACTIVEMQ和REDIS,降低工程配置和维护难度)
 
 
 
 
 
2.部署接入工程
      1).下载代码 (代码分析见后续)
        github地址为
        https://github.com/hetaoZhong/ding-isv-access.git      开放平台对接工程
    
     https://github.com/hetaoZhong/ding-isv-app.git      钉钉微应用DEMO(比较简单.仅供参考。这个不推荐了。服务化的部署方式不适合代码DEMO。和
ding-isv-access工程二合一了
 )
      1).新建MYSQL数据库,名称为ding_isv_access。(如果不喜欢这个名称,可自行更换)
          将 ding-isv-access 工程中的 db_sql.sql 文件执行到mysql数据库
          如果发现执行过程中出现 (创建DB和表的过程中出现Unknown character set: 'utf8mb4'),
          请升级mysql版本至>5.5,或者将db_sql.sql文件中的utf8mb4编码更改成utf8
 
       4).修改ding-isv-access的配置文件,auto-config.xml. 各种配置项的属性看注释自行理解
  
       5).打包编译 ding-isv-access 。 mvn clean package -Dmaven.test.skip=true
         打包之前看一下个人目录之下antx.properties是否存在,如果存在需要清理一下 rm -rf ~/antx.properties
 
       6).将打包好的ding-isv-access .war放入tomcat启动。
          访问 http://127.0.0.1:8080/ding-isv-access/checkpreload.htm 返回success 表示启动完毕
 
        7)如果提示加解密错误,请看文档升级无限制加解密包 https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7386797.0.0.A5d7BC&treeId=175&articleId=104945&docType=1
 
        8)如果您正在成为钉钉的ISV,请参考ISV上塔流程https://open-doc.dingtalk.com/docs/doc.htm?docType=1&articleId=106046 
 
 
3.开发者平台注册套件
    1) 在开发者平台注册套件的时候,填写回调地址http://127.0.0.1:8080/ding-isv-access/suite/create
        在代码中可以发现suite/create该路径。 里面的suitesecret和token可以更换。也可以直接在开发者后台输入代码中的值
 
 
    2) 套件注册成功,在db中插入套件信息
         insert into isv_suite(id, gmt_create, gmt_modified, suite_name, suite_key, suite_secret, encoding_aes_key, token, event_receive_url)
         values(1, '2016-03-14 18:08:09', '2016-03-14 18:08:09', 'X套件', 'suitekeyX', 'suitesecretX','suiteAesKeyX', 'suiteTokenX', '');
         或者运行代码中的测试用例插入
    3)数据插入之后,修改套件地址         http://127.0.0.1:8080/ding-isv-access/suite/callback/{suiteKey} 占位符请自行替换
 
    4)观察服务端log.
          /home/mint/logs/ding-isv-access/ding-isv-access.log               该log记录了tomcat的ding-isv-access工程启动情况
         /home/mint/logs/ding-isv-access/biz/http_request_helper.log   该log记录了所有通过httpclient开放平台请求的http记录
          /home/mint/logs/ding-isv-access/biz/http_invoke.log               该log记录了所有通过sdk开放平台请求的http记录
         /home/mint/logs/ding-isv-access/biz/task.log                             该log记录了所有定时任务相关日志。
         /home/mint/logs/ding-isv-access/biz/suite_callback.log             该log记录了所有开放平台调用套件回调信息的日志
 
 
4.创建微应用
        在开发者后台创建微应用
 
 
5.生成先下部署二维码(该过程要求开发者后台的关联的钉钉企业必须是认证企业)
        在开发者后台生成线下部署二维码,
        第一次生成二维码的时候,建议不要勾选 开启序列号校验选项。
        之后再次生成二维码可以勾选
        生成二维码的时候,钉钉会把套件为指定的一家企业开通,开发者需要观察服务端日志。 
 
 
6.二维码开生成成功,可以扫码开通套件啦
 
 
 
 7.钉钉微应用简单DEMO
     1)代码比较简单。仅仅实现了dd.config流程。
         可以修改文件中的corpid.授权该套件的企业的corpid即可。 在调试过程中自己修改
        文件地址为https://github.com/hetaoZhong/ding-isv-app/blob/master/web/src/main/webapp/microapp.html
     2)更多demo在更新中... 前端不会,多包含
         
 (
 DEMO更新中,见谅)
 
 
ding-isv-access接入层代码分析
1.代码结构

 
上图说明如下:
 
1. 开放平台通过
SuiteCallBack
Controller提供的RPC接口推送事件。
      包括
               1)企业授权套件过程中的临时授权码,权限变更,权限解除等等,RPC接口通过
Corp
Suite
Auth
Service处理企业授权事件
               2)企业信息发生变更的回调事件,员工变更,部门变更,群会话变更等等。
 
 
2.
Suite
Service,
Crm
Service,
Dept
Service等具体的业务代码,是封装了开放平台提供的http接口。
    这些
Service
接口通过各种
RestHelper向开放平台
请求数据,例如ConfOapi
RestHelper。
     同时这些Service也通过springhttpinvoker向微应用业务方提供方法调用
 
3.
SuiteTokenJob,CorpAuthFaileJob,MonitorJob 服务是定时任务.定时生成token,处理授权失败,监控等
4.ISVBizLockSerive是锁服务。 
 
 
 
 
 
2.数据库表说明
 
+---------------------------------------------+
| Tables_in_ding_isv_access              |
+-----------------------------+
 | QRTZ_BLOB_TRIGGERS                |         QRTZ前缀表明为spring-quarzt用到的表。全部删掉了,维护成本高。不易理解。如果ISV集群方式执行定时任务自行解决
 | QRTZ_CALENDARS                        |
 | QRTZ_CRON_TRIGGERS              |
 | QRTZ_FIRED_TRIGGERS              |
 | QRTZ_JOB_DETAILS                      |
 | QRTZ_LOCKS                                 |
 | QRTZ_PAUSED_TRIGGER_GRPS |
 | QRTZ_SCHEDULER_STATE           |
 | QRTZ_SIMPLE_TRIGGERS            |
 | QRTZ_SIMPROP_TRIGGERS         |
 | QRTZ_TRIGGERS                           |
| isv_app                                             |       ISV套件下的微应用信息
| isv_biz_lock                                      |       锁表。 由于系统没有采用redis之类的缓存,所以用了数据库表来实现业务上的加锁功能
| isv_corp                                            |       企业信息表
| isv_corp_app                                    |       企业开通微应用表
| isv_corp_suite_auth                         |       企业授权套件信息
| isv_corp_suite_auth_faile                |        企业授权套件过程中,失败的数据。由定时任务定时处理这个表中的数据进行重试
| isv_corp_suite_callback                   |       企业对套件的回调注册url表(当前这张表没有使用)  
| isv_corp_suite_jsapi_ticket              |        企业的jsapiticke表
| isv_corp_token                                |         企业的accesstoken表
| isv_suite                                          |         ISV套件下的套件信息
| isv_suite_ticket                                |         ISV套件的suiteticket表
| isv_suite_token                                |         ISV套件的suitetoken表.这张表的信息由定时任务定时刷新
+--------------------------------------------+
 
 
 
3.处理企业授权套件流程图如下.
 
     1.接收开放平台的临时授权码推送
     2.临时授权码做存储,db或者log
     3/4/5/6.使用临时授权码换取永久授权码。                            如果失败,计入失败表,使用定时任务做重试
     7/8/9.调用开放平台接口获取企业和微应用信息,做存储。     如果失败,计入失败表,使用定时任务做重试
     10.调用开放平台接口激活套件。                                         如果失败,计入失败表,使用定时任务做重试
     11.注册企业对套件的回调地址。                                          如果失败,计入失败表,使用定时任务做重试
 
 
 
 
 
更新记录
 
[font=-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol']一.2016.10.30更新 
[font=-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol']   1.更新db,具体参照 add-10.11.sql 
[font=-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol']   2.增加服务窗授权流程 
[font=-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol']   3.增加授权失败的重新授权流程。具体参照 [size=; font-size: 9pt,9pt]
ReAuthFailedCorpJob
[font=-apple-system, BlinkMacSystemFont, "].java 
[font=-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol']   4.调整部分代码结构以及日志格式
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
-------------------------