PHPackages                             ilovelylong/dingtalk2 - 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. ilovelylong/dingtalk2

ActiveLibrary

ilovelylong/dingtalk2
=====================

EasyDingTalk, Alibaba Dingtalk SDK for PHP

2.0.1(9mo ago)0157MITPHPPHP &gt;=7.0

Since Aug 11Pushed 9mo agoCompare

[ Source](https://github.com/ilovelylong/DingTalk2)[ Packagist](https://packagist.org/packages/ilovelylong/dingtalk2)[ RSS](/packages/ilovelylong-dingtalk2/feed)WikiDiscussions 2.x Synced 1mo ago

READMEChangelog (3)Dependencies (6)Versions (4)Used By (0)

DingTalk2
=========

[](#dingtalk2)

原项目地址：[https://github.com/mingyoung/dingtalk。](https://github.com/mingyoung/dingtalk%E3%80%82)由于原项目停止维护了，自用打包一份

当前食用方式
------

[](#当前食用方式)

composer require ilovelylong/dingtalk2

环境要求
----

[](#环境要求)

- PHP 7.1+
- Composer

文档
--

[](#文档)

实例化
---

[](#实例化)

:::warning 文档中提及到的 `$app` 表示的是如下实例化后的 `EasyDingTalk\Application` 实例，就不在每个模块中描述了 :::

```
use EasyDingTalk\Application;

$config = [
    //**配置文件分钉钉配置项，和程序配置项目
    /*
    |-----------------------------------------------------------
    | 【必填】企业 corpId  钉钉配置项目
    |-----------------------------------------------------------
    */
    'corp_id' => 'XXXXXX',
    /*
    |-----------------------------------------------------------
    | 【选填】后台免登配置信息 钉钉配置项目
    |-----------------------------------------------------------
    | 如果你用到应用管理后台免登功能，需要配置该项
    */
    'sso_secret' => 'XXXXXX',

    //以下三个是 H5,小程序，机器人默认公有项，如果app 不设置或者设置了没用使用，默认调用此配置，
    "agentid" => "XXXXXX",
    "app_key" => "XXXXXX",
    "app_secret" => "XXXXXX",
    //小程序配置项目
    "miniappid"=>"xxxxxx",
    //H5,小程序 订阅配置项目
    "aes_key" => "XXXXXX",
    "token" => "XXXXXX",

    'app'=>[
        'robot01'=>[
              //以下三个是 H5,小程序，机器人公有项
                'kind'=>'robot',//必填
                "agentid" => "XXXXXX",
                "app_key" => "XXXXXX",
                "app_secret" => "XXXXXX",
                //小程序配置项目
                "miniappid"=>"xxxxxx",
                //H5,小程序 订阅配置项目
                "aes_key" => "XXXXXX",
                "token" => "XXXXXX",
        ],
        'MFC'=>[
               'kind' => 'app', //必填
                // or 'app_id'
                'client_id' => 'XXXXX',
                // or 'app_secret'
                'client_secret' => 'XXXXXXXXXXXXXXXXXXXXXX',
                // or 'redirect_url'
                'redirect' => 'https://www.XXX.com/',
                'scope' => 'snsapi_login',
        ]
    ]
];

$app = new Application($config);
$app_robot=$app->robot01; //返回robot01 配置的机器人
、、、或者
$app_robot=Application::robot01($config);//返回robot01 配置的机器人
、、、或者
$app = new Application($config);
$app_robot=$app->robot;//返回默认配置的机器人
都是返回一个机器人实例
```

传递H5,小程序 配置后 使用 $app-&gt;MFC
返回对应的实例,用此实例可以调用对应的接口。具体使用demo =》

应用免登录 说明
--------

[](#应用免登录-说明)

```
        ......
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        //判断是不是需要钉钉浏览器打开
        if (strpos($user_agent, "DingTalk") !== false) {
        //没有登录的，就跳转登录页面
            if (!ISLOGIN){
                 $redirecturl = '登录成功后的跳转页面';
                    $HTML = user->getUserByCode($_GET['code']);

            //登录逻辑代码
   ....
            header('Location:' . $_GET['rl']);

```

扫码登录 说明
-------

[](#扫码登录-说明)

跳转前端，我这样写

```

            var url = encodeURIComponent("你的登录授权地址");
        url = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?                                    appid=dingoawhqfo729flbetouo&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=" + url;
        $("#DDscan").click(function() {

            var obj = DDLogin({
                id: "login_container", //这里需要你在自己的页面定义一个HTML标签并设置id，例如或
                goto: encodeURIComponent(url), //请参考注释里的方式
                style: "border:none;background-color:#FFFFFF;",
                width: "365",
                height: "400"
            });

        })

```

```
....
$userCodeData = $app->app->stateless()->user();
```

当然你也可以这样写

```
// 扫码登录第三方网站
$response = $app->app->withQrConnect()->redirect();

// 钉钉内免登第三方网站、密码登录第三方网站均同样使用如下方法跳转：
$response = $app->app->redirect();
// 回调页面统一使用如下方法来获取用户信息：
$user = $app->app->user();
```

免登录，和扫码登录用原文档代码，是相当简便的。但是我没试。

订阅消息
----

[](#订阅消息)

按照原文档操作就没毛病了,加密解密，接口验证，配置文件写好，都自动的了。 日志在这里就调用了3次 EasyDingTalk\\Kernel\\Server 内， 1、获取的加密订阅数据 2、解密的加密数据 3、发送给钉钉的数据 订阅消息我大概这样处理

```
        $server = $app->app;
        $server->push(DingTalkHandler::class);
        $server->serve()->send(); // ThinkPHP 等框架使用
......

class DingTalkHandler{

     public function __invoke($payload)
    {
        // 在此处处理你的业务逻辑
        $type = $payload['EventType'];
        switch ($type) {
            case 'bpms_task_change': //审批任务开始、结束、转交。
                $this->msgdata($payload, '审批任务事件');
                break;
            case 'bpms_instance_change': //审批实例开始、结束。
                $this->msgdata($payload, '审批实例事件');
                break;
            case 'attendance_check_record': //审批实例开始、结束。
                $this->msgdata($payload, '员工打卡事件');
                break;
            case 'attendance_schedule_change': //审批实例开始、结束。
                $this->msgdata($payload, '员工排班变更事件');
                break;
            case 'attendance_overtime_duration': //审批实例开始、结束。
                $this->msgdata($payload, '员工加班事件');
                break;
            case 'hrm_user_record_change': //审批实例开始、结束。
                $this->msgdata($payload, '员工信息变动');
                break;

            ......
            default:
                $this->msgdata($payload, '其他事件');
                break;
        }
    }
    public function msgdata($payload, $type){

    }
}
```

机器人回调消息
-------

[](#机器人回调消息)

::: tip SDK 目前提供三种方法以方便你监听钉钉机器人的@事件推送 当然你可以多次调用 `push` 方法，实现多个消息处理器 使用方式参考 上一章 [服务器事件](%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BA%8B%E4%BB%B6.md)唯一要注意的是，每一个处理器 都可以返回一个消息，当然也可以不返回消息。也就是说一次@机器人，可以自动回复多条消息。 :::

#### 获取 robot实例，返回多条消息

[](#获取robot实例返回多条消息)

```
//用robot01 配置文件 初始化机器人
$robot= $app->robot;
//每一个处理器 都可以返回一个消息
$robot->push(function () {
            $text = new EasyDingTalk\\Messages\\Text("123");
            return$text->toJson();
        });

$robot->push(DingTalkHandler::class);

$robot->push(function () {
            $text = new EasyDingTalk\\Messages\\Text("123456789");
            return$text->toJson();
        });
$robot->serve()->send(); // ThinkPHP 等框架使用
```

#### 获取 robot实例，发送消息

[](#获取robot实例发送消息)

::: tip $this-&gt;robot 会自动在配置中找第一个kind 是robot的配置。 $app-&gt;robot01 会找robot01 配置，根据kind 初始化一个机器人 :::

```
//用robot01 配置文件 初始化机器人
$robot= $this->robot;
$text = new EasyDingTalk\\Messages\\Text("123456789");
$robot->send(json_encode($text));
```

```
//用robot01 配置文件 批量发送单人消息
  $app->robot01->batchMsg(
            ["msgKey" => 'sampleMarkdown', "msgParam" => "{
            'title': '触发一个通知',
            'text': '### 触发一个通知\n**小标题**\n\n- 列表\nn- 列表\nn- 列表\nn'
       }"],
            ["userid", 'userid']
        );
```

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance62

Regular maintenance activity

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

 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

Every ~0 days

Total

4

Last Release

270d ago

Major Versions

1.0.1 → 2.0.02025-08-11

### Community

Maintainers

![](https://www.gravatar.com/avatar/7853f10d14f7fb139bb85a03d8873c14754f1fc1c314f297902aad8db39c92c2?d=identicon)[ilovelylong](/maintainers/ilovelylong)

---

Top Contributors

[![ilovelylong](https://avatars.githubusercontent.com/u/6799753?v=4)](https://github.com/ilovelylong "ilovelylong (4 commits)")

---

Tags

sdkdingtalkdingdingeasydingtalk

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ilovelylong-dingtalk2/health.svg)

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

PHPackages © 2026

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