# simple-dingtalk **Repository Path**: kekgt/simple-dingtalk ## Basic Information - **Project Name**: simple-dingtalk - **Description**: 轻量级钉钉服务端PHP-SDK,简化初学者的使用难度。(非官方),拥有完善的文档及案例,减少开发者的心智负担。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2023-07-10 - **Last Updated**: 2023-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

dingtalk

轻量级钉钉服务端PHP-SDK,简化初学者的使用难度。

### 介绍 这是一款PHP编写的轻量级钉钉服务端扩展包,以最简单的方式取调用、源码易懂、模块化。 用户可以自行定期更新token或应用自行判断,达到使用接口函数不需要考虑token的问题。 ### 安装方式 `composer require michonnehsu/simpledingtalk` ### 文档地址 点击访问[文档](https://gitee.com/michonnehsu/simple-dingtalk/wikis/pages) #### 配置架构 ``` ├─apps 应用目录 │ ├─app1 第一个小程序或微应用(名字自取,app1只是解释,方便理解) │ | ├─info 应用凭证信息(必填) │ │ | ├─AGENT_ID │ │ | ├─APP_KEY │ │ | ├─APP_SECRET │ │ | ├─ROBOT_CODE │ | ├─access_token API凭证信息(必填) │ │ | ├─expires 凭证刷新时间(凭证默认2小时内过期,建议提前3分钟刷新,填写以秒为单位的数字就好,例如三分钟等于180) │ │ | ├─file_path 凭证存储文件(该文件必须用户自己生成,名字自定义,并填入凭证存储文件的路径,建议填入绝对路径) │ | ├─login_info 免登信息 │ │ | ├─authorize 授权地址 │ │ │ | ├─redirect_uri 钉钉免登跳转到第三方网站地址 │ │ │ | ├─dingtalk_login_uri 钉钉内免登的网站地址 │ | ├─callback_info 回调凭证信息 │ │ | ├─aes_key │ │ | ├─token │ | ├─v2 新版服务端 │ │ | ├─access_token 凭证信息 │ │ │ | ├─expires 凭证刷新时间(凭证默认2小时内过期,建议提前3分钟刷新,填写以秒为单位的数字就好,例如三分钟等于180) │ │ │ | ├─file_path 凭证存储文件(该文件必须用户自己生成,并填入凭证存储文件的路径,建议填入绝对路径) │ | ├─userAccessToken 跳转第三方的免登 │ │ | ├─expires 凭证刷新时间(凭证默认2小时内过期,建议提前3分钟刷新,填写以秒为单位的数字就好,例如三分钟等于180) │ │ | ├─file_path 凭证存储文件(该文件必须用户自己生成,并填入凭证存储文件的路径,建议填入绝对路径) │ ├─app2 第二个小程序或微应用(配置内容跟上面一样,以此类推) ├─robots 机器人应用目录 │ ├─robot1 第一个机器人应用 │ | ├─info 应用凭证信息(必填) │ │ | ├─AGENT_ID │ │ | ├─APP_KEY │ │ | ├─APP_SECRET │ │ | ├─access_token 群token(非必填) │ │ | ├─SEC 群加签 (非必填) │ | ├─access_token API凭证信息(必填) │ │ | ├─expires 凭证刷新时间(凭证默认2小时内过期,建议提前3分钟刷新,填写以秒为单位的数字就好,例如三分钟等于180) │ │ | ├─file_path 凭证存储文件(该文件必须用户自己生成,名字自定义,并填入凭证存储文件的路径,建议填入绝对路径) │ ├─robot1 第二个机器人应用(配置内容跟上面一样,以此类推) ``` #### 如何配置以及使用 ``` [ 'info' => [ 'AGENT_ID' => 0, 'APP_KEY' => '', 'APP_SECRET' => '', 'ROBOT_CODE' => '', ], 'access_token' => [ 'expires' => 180, 'file_path' => 'static/tk/a.json' ], 'login_info' => [ 'authorize' => [ 'redirect_uri' => '', 'dingtalk_login_uri' => '' ] ], 'v2' => [ 'access_token' => [ 'expires' => 180, 'file_path' => 'static/tk/c.json' ] ], 'userAccessToken' => [ 'expires' => 180, 'file_path' => 'static/tk/uat.json' ] ], ]; $robots = [ 'robot1' => [ 'info' => [ 'AGENT_ID' => 0, 'APP_KEY' => '', 'APP_SECRET' => '', 'access_token' => '', 'SEC' => '' ], 'access_token' => [ 'expires' => 180, 'file_path' => 'static/tk/robot.json' ] ], ]; Config::setRobot($robots)->setApp($apps)->setCorpId(''); } public static function __callStatic($name, $arguments) { new Self(); $res = null; [$type, $class, $method, $params] = $arguments; if ($type == 'app') { Config::setAppType($name); } if ($type == 'robot') { Config::setRobotType($name); } $res=call_user_func_array([$class,$method], $params); return $res; } } // 面向对象(推荐) class dd{ function app(string $name,string $class,string $method,array $params){ $type=__FUNCTION__; return MyApp::$name($type,$class,$method,$params); } function robot(string $name,string $class,string $method,array $params){ $type=__FUNCTION__; return MyApp::$name($type,$class,$method,$params); } } class mydemo extends dd{ private $classes=[ 'user'=>User::class ]; private $name='miniprogram_app'; public function __call($name, $arguments) { $class=$this->classes[$name]; [$method,$params]=$arguments; $name=$this->name; return $this->app($name,$class,$method,$params); } } $params=['dept_id'=>1]; (new mydemo())->user('listid',$params); ```