PHPackages                             geek/dingtalk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. geek/dingtalk

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

geek/dingtalk
=============

钉钉SDK

1.0(7y ago)1491MITPHPPHP &gt;=7.0.0

Since Dec 2Pushed 7y ago1 watchersCompare

[ Source](https://github.com/geek-php/dingtalk)[ Packagist](https://packagist.org/packages/geek/dingtalk)[ Docs](http://github.com/geek/dingtalk)[ RSS](/packages/geek-dingtalk/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)DependenciesVersions (2)Used By (0)

dingtalk-sdk
============

[](#dingtalk-sdk)

钉钉企业开发服务端SDK

[![build=passing](https://camo.githubusercontent.com/73bef9848a696b986c8abc91c53dfef66d82b9f468c0366f0d93ffa1020024b5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275696c642d70617373696e672d627269676874677265656e2e7376673f6d61784167653d32353932303030)](https://camo.githubusercontent.com/73bef9848a696b986c8abc91c53dfef66d82b9f468c0366f0d93ffa1020024b5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6275696c642d70617373696e672d627269676874677265656e2e7376673f6d61784167653d32353932303030)[![Latest Version on Packagist](https://camo.githubusercontent.com/e68e3656f43d9be61ec293b9bce7759ce9d13f62bc563e88c48901247ce02402/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6765656b2f64696e6774616c6b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/geek/dingtalk)[![Software License](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![Total Downloads](https://camo.githubusercontent.com/cfc4059c476302a7c5f365b96a48c0fb0afc22ec36a707b7d9cb3181aeaa54d2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6765656b2f64696e6774616c6b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/geek/dingtalk)

钉钉开放了丰富的服务端接口能力，开发者可以借助这些接口能力，实现企业系统与钉钉的集成打通。
官方文档地址：

安装
--

[](#安装)

### 使用`composer`安装

[](#使用composer安装)

推荐使用`composer`安装：

```
composer require geek/dingtalk

```

或者在composer.json里追加：

```
"require": {
	"geek/dingtalk": "1.0"
},

```

### 手动安装到vendor目录

[](#手动安装到vendor目录)

先手动下载SDK到任意目录：

```
git clone git@github.com:geek-php/dingtalk.git

```

如果已经存在基于composer生成的vendor目录，直接添加如下到composer.json：

```
"autoload":{
        "psr-4":{
            "Geek\\":"vendor/dingtalk/src/"
        }
    }
```

如果还没有使用过composer生成vendor目录，手动生成：
1、先初始化：

```
composer init

```

输入你的项目名，例如`yujc/demo`。

2、在生成的composer.json里添加：

```
"autoload":{
        "psr-4":{
            "Geek\\":"vendor/dingtalk/src/"
        }
    }
```

然后移动下载的SDK到vendor目录，执行：

```
composer dump-autoload

```

输出 Generating autoload files 。

此时代码里需要加上：

```
include "vendor/autoload.php";
```

### 不使用composer

[](#不使用composer)

如果确实不想使用composer，那就自己实现自动加载：

示例：

```
spl_autoload_register(function ($class){
    if(false !== strpos($class, '\\')){
        $file = str_replace(['\\', 'Geek'], ['/', ''],  'vendor/dingtalk/src/'. trim($class, '\\')). '.php';
        if(file_exists($file)){
            require_once $file;
        }else{
            throw new \Exception("class file {$file} not exit.");
        }
    }
});
```

使用示例
----

[](#使用示例)

首先需要到钉钉管理后台获取开发账号。详解：

SDK需要配置：

```
corp_id
secret
ding_token
encoding_aes_key

```

使用示例：

```
$conf = [
    'corp_id' => '', //企业CorpId
    'secret' => '', //企业CorpSecret
    'encoding_aes_key' => '', //数据加密密钥。用于回调数据的加密，长度固定为43个字符，从a-z, A-Z, 0-9共62个字符中选取,可以随机生成
    'ding_token' => 'test', //加解密需要用到的token，自定义
    'callback' => 'http://test001.vaiwan.com/eventreceive', //回调URL，钉钉服务器会向URL发起回调事件
];

$dingtalk = new \Geek\DingTalk($conf);

//获取部门列表
$list = $dingtalk->getDepartmentList();
print_r($list);
```

接口
--

[](#接口)

### 获取部门列表

[](#获取部门列表)

```
$departs = $dingtalk->getDepartmentList();
```

### 获取部门详情

[](#获取部门详情)

```
$department_id = 1; //部门id
$info = $dingtalk->getDepartInfo($department_id);
```

### 获取部门用户列表（详情）

[](#获取部门用户列表详情)

```
$department_id = 1; //部门id
$info = $dingtalk->getUserList($department_id);
```

### 获取用户信息详情

[](#获取用户信息详情)

```
$userid = 1; //钉钉用户id
$info = $dingtalk->getUser($userid);
```

### 发送群消息

[](#发送群消息)

钉钉没有提供直接向群里发送消息的功能。我们可以在管理后台添加一个虚拟员工，然后用该员工创建一个钉钉群，之后就可以直接发消息了。

1、创建群会话

```
$userIdList = [];// 群用户钉钉id列表，里面有哪些用户
$chat_name = '小钉'; //群会话名称
$chat_owner = ''; //该虚拟员工的钉钉id

//创建新会话
$res = $dingtalk->chatCreate($chat_name, $chat_owner, $userIdList);
if ($res['errcode'] != 0) {
    echo sprintf("chatCreate fail. msg:%s", json_encode($res));
    return '';
} else {

    $chatid = $res['chatid'];

    //可以把这个群会话存储起来，下次还是这几个成员，则直接取得chatid
}
```

2、根据群会话id发送消息

```
$state = State::getInstance();

//发送消息
$res = $dingtalk->chatSendText($chat_id, $message);
if ($res['errcode'] != 0) {
    return $state->setErrorNo($res['errcode'])->setErrorMsg($res['errmsg']);
}
```

### 发送机器人消息

[](#发送机器人消息)

需要先获取access\_token：打开任意一个钉钉群设置，在机器人管理页面选择“自定义”机器人，输入机器人名字并选择要发送消息的群。如果需要的话，可以为机器人设置一个头像。点击“完成添加”，完成后会生成Hook地址。 hook地址里会有access\_token。

```
$dingtalk->robotSend($access_token, $message);
```

### 业务事件回调

[](#业务事件回调)

当钉钉内的企业发生一些业务变更时，会通过业务事件回调URL通知企业或者第三方应用，实现数据同步的功能。目前支持的业务事件包含：通讯录相关事件，群会话相关事件，签到相关事件，审批相关事件。

首先需要注册回调：

```
//注册的事件，详见 https://open-doc.dingtalk.com/microapp/serverapi2/skn8ld
$call_back_tag = [
    "user_add_org",
    "user_modify_org",
    "user_leave_org",
    "chat_add_member",
    "chat_remove_member",
    "chat_update_title"
];

$token = $conf['ding_token'];
$aes_key = $conf['encoding_aes_key'];
$url = $conf['callback']; //回调地址

//注册回调地址
$dingtalk->registerCallBack($call_back_tag, $token, $aes_key, $url);

if ($res['errcode'] != 0) {
    echo $res['errmsg'];
}
```

然后实现回调url对应接口的功能：

```
//回调请求示例：https://127.0.0.1/corp_biz_callback?signature=111108bb8e6dbce3c9671d6fdb69d15066227608&timestamp=1783610513&nonce=380320111
//{ "encrypt":"1ojQf0N..." } 回调消息体使用Post请求body格式传递
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];

$postdata = file_get_contents("php://input");
$postList = json_decode($postdata, true);
$encrypt_msg = $postList['encrypt'];

$state = receiveEvent($signature, $timestamp, $nonce, $encrypt_msg, $conf);

if ($state->getErrorNo() != 0) {
    echo sprintf("handle receiveEvent fail. code:%d, msg:%s", $state->getErrorNo(), $state->getErrorMsg());
}

//接收到推送数据之后，需要返回字符串success (代表了你收到了推送)，返回的数据也需要做加密处理，如果不返回，钉钉服务器将持续推送下去，达到一定阈值后将不再推送。
$sign_obj = new \Geek\Signature($conf);
$state = $sign_obj->encryptMsg("success", $timestamp, $nonce);
if ($state->getErrorNo() != 0) {
    echo sprintf("encrypt receiveEvent fail. code:%d, msg:%s", $state->getErrorNo(), $state->getErrorMsg());
}

/**
 * 钉钉回调处理
 *
 * @param $signature
 * @param $timestamp
 * @param $nonce
 * @param $encrypt_msg
 * @return \Geek\State
 */
function receiveEvent($signature, $timestamp, $nonce, $encrypt_msg, $conf)
{
    $state = \Geek\State::getInstance();

    $sign_obj = new \Geek\Signature($conf);
    $msg_state = $sign_obj->decryptMsg($signature, $timestamp, $nonce, $encrypt_msg);
    if ($msg_state->getErrorNo() != 0) {
        return $msg_state;
    }

    $eventMsg = json_decode($msg_state->getData());
    //示例数据
//        $eventMsg = json_decode('{"TimeStamp":"1536907636429","CorpId":"ding93794335028af70b","UserId":["2127383846805836532", "0565176120300975"],"EventType":"user_add_org"}');
    $eventType = $eventMsg->EventType;

    echo sprintf("decrypt succ. msg:%s", json_encode($eventMsg));

    switch ($eventType) {
        case "check_url": //测试回调URL。注册回调接口时，钉钉服务器会向URL发起【测试回调URL】事件，来验证填写的url的合法性，需要接收到回调之后返回加密字符串“success”的json数据，才能完成注册。
            break;
        case "check_create_suite_url":
            break;
        case "check_update_suite_url":
            break;
        case "user_add_org":
        case "user_modify_org":
            $user_ids = $eventMsg->UserId;

            break;

        case "user_leave_org": //离职
            $user_ids = $eventMsg->UserId;

            break;
        case "chat_add_member":
        case "chat_remove_member":
        case "chat_update_title":
            break;
        default:
            break;
    }

    return $state->setData([]);
}
```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2721d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/85aec7d223e71253e37fcc79d61d61d104f3cb384748601bf49d57dcd6cf2ff9?d=identicon)[52fhy](/maintainers/52fhy)

---

Top Contributors

[![52fhy](https://avatars.githubusercontent.com/u/8773263?v=4)](https://github.com/52fhy "52fhy (13 commits)")

---

Tags

dingtalkdingtalk-sdkphp7sdkdingtalkdingtalk-sdk

### Embed Badge

![Health badge](/badges/geek-dingtalk/health.svg)

```
[![Health](https://phpackages.com/badges/geek-dingtalk/health.svg)](https://phpackages.com/packages/geek-dingtalk)
```

###  Alternatives

[aws/aws-crt-php

AWS Common Runtime for PHP

416300.1M4](/packages/aws-aws-crt-php)[zumba/amplitude-php

PHP SDK for Amplitude

409.5M5](/packages/zumba-amplitude-php)[ennnnny/tbk

简约优雅的淘宝客SDK

29016.1k1](/packages/ennnnny-tbk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
