钉钉isv免登录

码域星辰
• 阅读 6455

钉作为团队内部人员的通讯软件被原来越多的企业所应用,同时钉钉支持接入第三方应用和企业内部个人应用,即isv接入和企业接入。而我现在要说的是isv接入中的必要条件,isv免登录。
准备工作
钉钉有详细的开发文档,这个是开发文档的链接地址,其中有一个isv的接入指南,这上面介绍了isv是如何接入。
第一步:注册钉钉企业账号。在这里可以看到
第二步:成为钉钉开发者,链接地址
第三步:是开发套件。
首先我们需要创建套件
钉钉isv免登录
点击套件的创建,会出现下面的画面
钉钉isv免登录
这些在开发文档上面都有介绍。在这个画面中主要是回调url。钉钉为php开发者写了一个关于php的demo,demo地址,这个里面有一个config.php,里面的参数是需要我们进行填写

<?php
define('DIR_ROOT', dirname(__FILE__).'/');
define("OAPI_HOST", "https://oapi.dingtalk.com");
//Suite
define("CREATE_SUITE_KEY", "suite4xxxxxxxxxxxxxxx");
define("SUITE_KEY", "");
define("SUITE_SECRET", "");
define("TOKEN", "");
define("APPID", "");
define("ENCODING_AES_KEY", "");

在我们还没有获取到SUITE_KEY、SUITE_SECRET时默认的是空值,token、ENCODING_AES_KEY都是创建套件的时候填写的。APPID是应用的id,现在先为空。
回调的方法是receive.php。回调url可以写成http://域名/地址/receive.php
填写完成以后我们需要验证url的有效性,验证成功以后,点击确定。
我们会在套件基本信息中获取到SUITE_KEY、SUITE_SECRET,我们需要将值填写到config.php中。
然后需要创建应用

钉钉isv免登录

主页的地址就是我们点击应用进入的地址。
创建完应用以后,APPID即可写上应用的id。
注册测试企业

钉钉isv免登录

钉钉isv免登录
管理员账号可以写已经注册的钉钉的手机号码,如果这里随便写个账号的话,注册完成以后需要绑定你已经注册的钉钉账号。当所有的工作完成以后我们可以用这个钉钉账号,登陆钉钉app,找到你的测试企业,在测试企业的应用中就会有你创建的应用。
创建完成测试企业以后,我们需要对测试企业进行授权。

钉钉isv免登录
当点击授权以后,钉钉会向我们写的回调url,即receive.php推送`/**

 * 临时授权码
 */
else if ("tmp_auth_code" === $eventType)
{
    $tmpAuthCode = $eventMsg->AuthCode;
    Activate::autoActivateSuite($tmpAuthCode);
}`
我们可以在方法中看到执行这段代码,这段代码主要是获取到临时授权码,然后`<?php

require_once(__DIR__ . "/../util/Log.php");
require_once(__DIR__ . "/../util/Http.php");
require_once(__DIR__ . "/ISVService.php");
/**

  • 激活ISV套件方法类
    */

class Activate
{

/**
 * 某个企业的临时授权码在成功换取永久授权码后,开放平台将不再推送该企业临时授权码。
 */
public static function autoActivateSuite($tmpAuthCode)
{
    //持久化临时授权码
    //Cache::setTmpAuthCode($tmpAuthCode);
    $suiteTicket = Cache::getSuiteTicket();
    $suiteAccessToken = ISVService::getSuiteAccessToken($suiteTicket);
    Log::i("[Activate] getSuiteToken: " . $suiteAccessToken);
    //获取永久授权码以及corpid等信息,持久化,并激活临时授权码
    $permanetCodeInfo = ISVService::getPermanentCodeInfo($suiteAccessToken, $tmpAuthCode);
    Log::i("[Activate] getPermanentCodeInfo: " . json_encode($permanetCodeInfo));
    
    $permanetCode = $permanetCodeInfo['permanent_code'];
    $authCorpId = $permanetCodeInfo['corp_id'];
    Log::i("[Activate] permanetCode: " . $permanetCode . ",  authCorpId: " . $authCorpId);
    
    /**
     * 获取企业access token
     */
    $corpAccessToken = ISVService::getIsvCorpAccessToken($suiteAccessToken, $authCorpId, $permanetCode);
    Log::i("[Activate] getCorpToken: " . $corpAccessToken);
    
    /**
     * 获取企业授权信息
     */
    $res = ISVService::getAuthInfo($suiteAccessToken, $authCorpId, $permanetCode);
    Log::i("[Activate] getAuthInfo: " . json_encode($res));
    self::check($res);
    /**
     * 激活套件
     */
    $res = ISVService::activeSuite($suiteAccessToken, $authCorpId, $permanetCode);
    Log::i("[activeSuite]: " . json_encode($res));
    self::check($res);
}


static function check($res)
{
    if ($res->errcode != 0)
    {
        exit("Failed: " . json_encode($res));
    }
}

}`
这段代码执行完成以后主要是激活套件,只有激活套件以后,我们才可以在测试企业的应用中看到我们创建的应用。否则无法看到应用。
应用的客户端页面,即在手机端看到的首页
在demo中我们会看到一个index.php和一个indexpc.php,一个是手机端的首页一个是pc端的首页。index.php的代码是:`<!DOCTYPE html>
<?php
require_once(__DIR__ . "/config.php");
require_once(__DIR__ . "/util/Http.php");
require_once(__DIR__ . "/api/Auth.php");
$corpId = $_GET['corpid'];
?>
<html>
<head>

<title>jsapi demo</title>
<link rel="stylesheet" href="/public/stylesheets/style.css" type="text/css" />
<!-- config中signature由jsticket产生,若jsticket失效,则signature失效,表现为dd.error()返回“权限校验失败”之错误。 -->
<!-- 在请求新的jsticket之后,旧的ticket会失效,导致旧ticket产生的signature失效。 -->
<script type="text/javascript">var _config = <?php echo Auth::isvConfig($corpId);?></script>
<script type="text/javascript" src="/public/javascripts/zepto.min.js"></script>
<script type="text/javascript" src="https://g.alicdn.com/ilw/ding/0.8.9/scripts/dingtalk.js"></script>

</head>
<body>
<button class="btn btn-block btn-default chooseonebtn">选择朋友发消息</button>
<button class="btn btn-block btn-default phonecall">给朋友打电话</button>
</body>
<script type="text/javascript" src="/public/javascripts/logger.js"></script>
<script type="text/javascript" src="/public/javascripts/demo.js"></script>
</html>`
在这个里面我们可以看到一个corpid的参数,这个是企业的id,目前是我们的测试企业的id,这个参数可以在我们创建的测试企业的管理页面看到。在执行的receive.php中,我们可以看到有一个日志,一个是isv.log,在这个里面也可以获取到corpid。而在index.php中这个是变量,所以我们在创建应用时的主页地址,可以增加corpid这个参数,即index.php?corpid=。
当所有的配置都弄成功以后,我们可以得手机端点击应用获取到userid。即免登录成功。
需要注意的是
回调地址必须有效
套件必须激活
相关文档:
钉钉开发官网地址

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
4年前
uni-app开发 常见异常和解决办法
前言uniapp是一个基于Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。在开发过程中可能会遇到一些异常,这些异常及其解决办法总结如下。1.调用微信开发者工具报错IDEserviceportdis
Easter79 Easter79
3年前
Vue 仿钉钉流程图(流程节点绘制 vue+Ant【如果用其他UI库需要替换几个组件】 附 demo)
Vue仿钉钉流程图(流程节点绘制vueAntDesignofVue)仿钉钉流程图Api包括:一维数组传参,获取单节点数据,返回所有节点组成的一位数组生成每个节点的父节点Id集合很多公司后台管理系统都需要画流程图,功能大同小异,所以,仿照钉钉管理
Wesley13 Wesley13
3年前
SQL语句中发送微信消息
利用EasySQLMAIL的外部接口表功能来发送。可以支持Oracle、SQLServer、MySQL、PostgreSQL、Informix数据库。步骤如下:(1)在数据源的“外部接口功能”中启用“允许从该数据源上的接口表中发送企业微信或钉钉消息”选项,并选择可以用来发消息的企业微信应用(注意记录下应用ID,后面的S
Wesley13 Wesley13
3年前
java接入钉钉机器人(带源码)
前言登录钉钉网页:https://im.dingtalk.com(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fim.dingtalk.com)登录说明文档地址,以备随时查询:https://dingdoc.dingtalk.com/doc/servera
Stella981 Stella981
3年前
Prometheus部署+邮箱告警+企业微信告警+钉钉告警
Prometheus部署邮箱报警企业微信报警钉钉报警1部署Prometheusserver1.1下载二进制包$wgethttps://github.com/prometheus/prometheus/releases/download/v2
Stella981 Stella981
3年前
SpringBoot admin+Eureka+钉钉通知 实现微服务监控
SpringBootadminEureka钉钉通知一、效果登录账号密码!(https://raw.githubusercontent.com/wangjiafang/PicGo/master/img/20191018102612.png)
Wesley13 Wesley13
3年前
5分钟快速接入钉钉实现钉钉考勤
!(https://img2020.cnblogs.com/blog/2029875/202007/202987520200714151949917313112373.png)一、前言由于今年疫情影响,假期的无限延长让大家都不得不进行线上办公,说到线上办公就毫无疑问,钉钉是这个疫情假期最大的赢家,APP的火热程度以及下载量甚至压过了微
Wesley13 Wesley13
3年前
4月9日JindoFS系列直播【存储计算分离场景的计算适应优化】
主题:存储计算分离场景的计算适应优化时间:2020.4.9(周四)19:00参与方式:扫描下方二维码加入钉钉群,群内直接观看或点击直播间链接:https://developer.aliyun.com/live/2592讲师:王道远花名健身,阿里云EMR技术专家,ApacheSpa
Wesley13 Wesley13
3年前
IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
本文由作者“fzully”投稿,收录时,有较大范围修订和改动,感谢原作者的分享。1、引言IM系统中,特别是在企业应用场景下,消息的已读未读状态是一个强需求。以阿里的钉钉为例,钉钉的产品定位是用于商务交流,其“强制已读回执”功能,让职场人无法再“假装不在线”、“假装没收到”。更有甚者,钉钉的群聊“强制已读回执”功能,甚至能够知道谁读了消息
融云IM即时通讯 融云IM即时通讯
6个月前
融云IM干货丨uni-app是什么
uniapp是一个使用Vue.js开发跨平台应用的前端框架。开发者可以通过编写一套代码,将应用发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。uniapp的主要特点