zhanglinxin 1 年之前
父节点
当前提交
47914a46d9

+ 16 - 0
application/api/controller/Dingtalk.php

@@ -2,6 +2,7 @@
 
 namespace app\api\controller;
 
+use AlibabaCloud\SDK\Dingtalk\Vedu_1_0\Models\QueryClassScheduleResponseBody\config;
 use app\common\model\Department;
 use app\common\model\User;
 use app\common\service\DingtalkService;
@@ -124,4 +125,19 @@ class Dingtalk extends Base
             User::where('userid', 'in', array_keys($no_user_list))->update(['is_deleted' => 1]);
         }
     }
+
+    /**
+     * 获取鉴权需要的参数
+     *
+     * @Apidoc\Desc("设置企业内部应用H5微应用鉴权")
+     * @Apidoc\Method("POST")
+     * @Apidoc\Param("url", type="string", require=true, desc="应用URL")
+     *
+     **/
+    public function get_auth(){
+        $url = input('url') ?: '';
+
+        DingtalkService::generateAuthSignature($url);
+        $this->success('获取鉴权需要的参数');
+    }
 }

+ 81 - 74
application/common.php

@@ -1,26 +1,6 @@
 <?php
 use think\Db;
 
-/**
- * 秒转换为天
- */
-function get_stay_time($remain_time, $is_hour = 1, $is_minutes = 1)
-{
-    $day = floor($remain_time / (3600*24));
-    $day = $day > 0 ? $day.'天' : '';
-    $hour = floor(($remain_time % (3600*24)) / 3600);
-    $hour = $hour > 0 ? $hour.'小时' : '';
-    if($is_hour && $is_minutes) {
-        $minutes = floor((($remain_time % (3600*24)) % 3600) / 60);
-        $minutes = $minutes > 0 ? $minutes.'分钟' : '';
-        return $day.$hour.$minutes;
-    }
-
-    if($hour) {
-        return $day.$hour;
-    }
-    return $day;
-}
 function requestPost($url , $post_data = array() ){
     // 1. 初始化一个cURL会话
     $ch = curl_init();
@@ -38,12 +18,7 @@ function requestPost($url , $post_data = array() ){
     curl_close($ch);
     return $response;
 }
-/**
- * get请求
- * @param $url
- * @param string $msg
- * @return mixed
- */
+
 function requestGet($url , $msg = ''){
     // 1. 初始化一个cURL会话
     $ch = curl_init();
@@ -57,16 +32,6 @@ function requestGet($url , $msg = ''){
     curl_close($ch);
     return $response;
 }
-// 获取模板区域
-function get_city_area()
-{
-    $field=['id','pid','name'];
-    $list=Db::name('china_area')->where('pid',0)->field($field)->select();
-    foreach ($list as $k=>&$v){
-        $v['children']= Db::name('china_area')->where('pid',$v['id'])->field($field)->select();
-    }
-    return $list;
-}
 
 function http_curl($url,$type='get',$res='json',$arr=''){
 
@@ -107,31 +72,17 @@ function curl_get($url)
     }
 }
 
-/**
- * 把返回的数据集转换成Tree
- * @param array $list 要转换的数据集
- * @param string $pk 自增字段(栏目id)
- * @param string $pid parent标记字段
- * @return array
- */
-function make_tree($list,$pk='id',$pid='pid',$child='children',$root=0){
-    if(is_object($list)) $list = $list->toArray();
-    $tree=array();
-    $packData=array();
-    foreach ($list as $data) {
-        $packData[$data[$pk]] = $data;
-    }
-    foreach ($packData as $key =>$val){
-       if($val[$pid]==$root){//代表跟节点
-            $tree[]=& $packData[$key];
-        }else{
-            $packData[$val[$pid]][$child][]=& $packData[$key]; //找到其父类
-        }
+// 获取模板区域
+function get_city_area()
+{
+    $field=['id','pid','name'];
+    $list=Db::name('china_area')->where('pid',0)->field($field)->select();
+    foreach ($list as $k=>&$v){
+        $v['children']= Db::name('china_area')->where('pid',$v['id'])->field($field)->select();
     }
-    return $tree;
+    return $list;
 }
 
-
 //判断字段存在并不为空
 function isset_full($arr, $key)
 {
@@ -152,24 +103,28 @@ function isset_full_check($arr, $key,$check_val)
     }
 }
 
-
-function all_pay_type()
-{
-    return [ '--','微信[H5]','支付宝[H5]','微信[APP]','支付宝[APP]','微信[公众号]' ];
-}
-
 /**
- * 生成32位随机数
- */
-function get32Str($length='32'){
-    $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
-    $len = strlen($str)-1;
-    $randstr = '';
-    for ($i=0;$i<$length;$i++) {
-        $num=mt_rand(0,$len);
-        $randstr .= $str[$num];
+ * 把返回的数据集转换成Tree
+ * @param array $list 要转换的数据集
+ * @param string $pk 自增字段(栏目id)
+ * @param string $pid parent标记字段
+ * @return array
+ */
+function make_tree($list,$pk='id',$pid='pid',$child='children',$root=0){
+    if(is_object($list)) $list = $list->toArray();
+    $tree=array();
+    $packData=array();
+    foreach ($list as $data) {
+        $packData[$data[$pk]] = $data;
+    }
+    foreach ($packData as $key =>$val){
+        if($val[$pid]==$root){//代表跟节点
+            $tree[]=& $packData[$key];
+        }else{
+            $packData[$val[$pid]][$child][]=& $packData[$key]; //找到其父类
+        }
     }
-    return $randstr;
+    return $tree;
 }
 
 
@@ -303,6 +258,58 @@ function get_one_two_array($arr, $str1, $str2)
 }
 
 /**
+ * 秒转换为天
+ *
+ * @param integer $remain_time
+ */
+function get_stay_time($remain_time, $is_hour = 1, $is_minutes = 1)
+{
+    $day = floor($remain_time / (3600*24));
+    $day = $day > 0 ? $day.'天' : '';
+    $hour = floor(($remain_time % (3600*24)) / 3600);
+    $hour = $hour > 0 ? $hour.'小时' : '';
+    if($is_hour && $is_minutes) {
+        $minutes = floor((($remain_time % (3600*24)) % 3600) / 60);
+        $minutes = $minutes > 0 ? $minutes.'分钟' : '';
+        return $day.$hour.$minutes;
+    }
+
+    if($hour) {
+        return $day.$hour;
+    }
+    return $day;
+}
+
+/**
+ * +----------------------------------------------------------
+ * 生成随机字符串
+ * +----------------------------------------------------------
+ * @param int $length 要生成的随机字符串长度
+ * @param string $type 随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
+ * +----------------------------------------------------------
+ * @return string
+ * +----------------------------------------------------------
+ */
+function randCode($length = 5, $type = 0)
+{
+    $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
+    if ($type == 0) {
+        array_pop($arr);
+        $string = implode("", $arr);
+    } elseif ($type == "-1") {
+        $string = implode("", $arr);
+    } else {
+        $string = $arr[$type];
+    }
+    $count = strlen($string) - 1;
+    $code = '';
+    for ($i = 0; $i < $length; $i++) {
+        $code .= $string[rand(0, $count)];
+    }
+    return $code;
+}
+
+/**
  * 事务开始
  *
  * @return void

+ 25 - 5
application/common/service/DingtalkService.php

@@ -26,7 +26,7 @@ class DingtalkService
      */
     public static function department_listsub($dept_id)
     {
-        $accessToken = Sample::main()['accessToken'];
+        $accessToken = Sample::accessToken()['accessToken'];
         $c = self::get_obj();
         $req = new \OapiV2DepartmentListsubRequest;
         $req->setDeptId($dept_id);
@@ -46,7 +46,7 @@ class DingtalkService
      */
     public static function department_get($dept_id)
     {
-        $accessToken = Sample::main()['accessToken'];
+        $accessToken = Sample::accessToken()['accessToken'];
         $c = self::get_obj();
         $req = new \OapiV2DepartmentListsubRequest;
         $req->setDeptId($dept_id);
@@ -66,7 +66,7 @@ class DingtalkService
      */
     public static function user_list($dept_id)
     {
-        $accessToken = Sample::main()['accessToken'];
+        $accessToken = Sample::accessToken()['accessToken'];
         $c = self::get_obj();
         $req = new \OapiV2UserListRequest;
         $req->setDeptId($dept_id);
@@ -88,7 +88,7 @@ class DingtalkService
      */
     public static function user_get($userid)
     {
-        $accessToken = Sample::main()['accessToken'];
+        $accessToken = Sample::accessToken()['accessToken'];
         $c = self::get_obj();
         $req = new \OapiV2UserGetRequest;
         $req->setUserid($userid);
@@ -108,7 +108,7 @@ class DingtalkService
      */
     public static function get_user_info($code)
     {
-        $accessToken = Sample::main()['accessToken'];
+        $accessToken = Sample::accessToken()['accessToken'];
         $c = self::get_obj();
         $req = new \OapiV2UserGetuserinfoRequest;
         $req->setCode($code);
@@ -120,4 +120,24 @@ class DingtalkService
         except($resp->errcode.' '.$resp->errmsg);
     }
 
+    /**
+     * 设置企业内部应用H5微应用鉴权
+     * @param string $url 应用URL,例如:https://your-domain.com/path/to/your/app.html
+     * @return mixed
+     **/
+    public static function generateAuthSignature($url) {
+        // 获取jsapiTicket
+        $jsapiTicket = Sample::jsapiTickets()['jsapiTicket'];
+        // 生成鉴权签名
+        $nonceStr = randCode(16);  // 随机字符串,用于保证签名不可预测性,长度为16个字符的随机字符串
+        $timeStamp = time();  // 时间戳,格式为13位数字,如:1602756290
+        $stringA = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timeStamp&url=$url";
+        $signature = sha1($stringA); // 签名值
+        // agentId值 corpId值
+        $config = config('app.dingtalk');
+        $agentId = $config['agentId'];
+        $corpId = $config['corpId'];
+        return compact("agentId","corpId","nonceStr","timeStamp","signature");
+    }
+
 }

+ 49 - 12
application/extend/Dingtalk/Sample.php

@@ -8,6 +8,8 @@ use AlibabaCloud\Tea\Exception\TeaError;
 use AlibabaCloud\Tea\Utils\Utils;
 use Darabonba\OpenApi\Models\Config;
 use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\GetAccessTokenRequest;
+use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\CreateJsapiTicketHeaders;
+use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
 use think\cache\driver\Redis;
 
 class Sample
@@ -25,14 +27,15 @@ class Sample
         return new Dingtalk($config);
     }
 
+    // 获取应用身份相关访问凭证
     /**
      * 获取企业内部应用的accessToken
      **/
-    public static function main()
+    public static function accessToken()
     {
         $options = config('redis.');
         $redis = new Redis($options);
-        $key = 'dingtalk_access_token';
+        $key = 'dingtalk_accessToken';
         $access_token_data = $redis->get($key);
         if ($access_token_data) {
             return json_decode($access_token_data, true);
@@ -43,7 +46,6 @@ class Sample
 //            "appKey" => "dingekepwoyycxfbtyvg",
 //            "appSecret" => "EjM9WohvKHo3eNqZGGbQHhbjM80QzapdC_f_reYiOCyEFOtaG1qoG2KzEfpSoLWe",
 //        ]);
-
         $getAccessTokenRequest = new GetAccessTokenRequest([
             "appKey" => "dingilnkljzq3a4chjrw",
             "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
@@ -60,15 +62,50 @@ class Sample
             p($err->getMessage(), $err->getCode());exit;
         }
 
-        if ($res->body) {
-            $data = [
-                'accessToken' => $res->body->accessToken,
-                'expireIn' => $res->body->expireIn,
-            ];
-            $redis->set($key, json_encode($data), 7000);
-            return $data;
-        } else {
-            return false;
+        // {"accessToken" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
+        $data = [
+            'accessToken' => $res->body->accessToken,
+            'expireIn' => $res->body->expireIn,
+        ];
+        $redis->set($key, json_encode($data), 7100);
+        return $data;
+    }
+
+    /**
+     * 获取jsapiTicket
+     **/
+    public static function jsapiTickets(){
+        $options = config('redis.');
+        $redis = new Redis($options);
+        $key = 'dingtalk_jsapiTicket';
+        $access_token_data = $redis->get($key);
+        if ($access_token_data) {
+            return json_decode($access_token_data, true);
+        }
+
+        $accessToken = self::accessToken()['accessToken'];
+
+        $client = self::createClient();
+        $createJsapiTicketHeaders = new CreateJsapiTicketHeaders([]);
+        $createJsapiTicketHeaders->xAcsDingtalkAccessToken = $accessToken;
+        try {
+            $res = $client->createJsapiTicketWithOptions($createJsapiTicketHeaders, new RuntimeOptions([]));
+        } catch (Exception $err) {
+            if (!($err instanceof TeaError)) {
+                $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
+            }
+            if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+            }
+            p($err->getMessage(), $err->getCode());exit;
         }
+
+        // {"jsapiTicket" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
+        $data = [
+            'jsapiTicket' => $res->body->jsapiTicket,
+            'expireIn' => $res->body->expireIn,
+        ];
+        $redis->set($key, json_encode($data), 7100);
+        return $data;
     }
 }

+ 0 - 467
application/extend/fast/Tree.php

@@ -1,467 +0,0 @@
-<?php
-
-namespace app\extend\fast;
-
-/**
- * 通用的树型类
- * @author XiaoYao <476552238li@gmail.com>
- */
-class Tree
-{
-    protected static $instance;
-    //默认配置
-    protected $config = [];
-    public $options = [];
-
-    /**
-     * 生成树型结构所需要的2维数组
-     * @var array
-     */
-    public $arr = [];
-
-    /**
-     * 生成树型结构所需修饰符号,可以换成图片
-     * @var array
-     */
-    public $icon = array('│', '├', '└');
-    public $nbsp = " ";
-    public $pidname = 'pid';
-
-    public function __construct($options = [])
-    {
-        if ($config = config('tree')) {
-            $this->options = array_merge($this->config, $config);
-        }
-        $this->options = array_merge($this->config, $options);
-    }
-
-    /**
-     * 初始化
-     * @access public
-     * @param array $options 参数
-     * @return Tree
-     */
-    public static function instance($options = [])
-    {
-        if (is_null(self::$instance)) {
-            self::$instance = new static($options);
-        }
-
-        return self::$instance;
-    }
-
-    /**
-     * 初始化方法
-     * @param array  $arr     2维数组,例如:
-     *      array(
-     *      1 => array('id'=>'1','pid'=>0,'name'=>'一级栏目一'),
-     *      2 => array('id'=>'2','pid'=>0,'name'=>'一级栏目二'),
-     *      3 => array('id'=>'3','pid'=>1,'name'=>'二级栏目一'),
-     *      4 => array('id'=>'4','pid'=>1,'name'=>'二级栏目二'),
-     *      5 => array('id'=>'5','pid'=>2,'name'=>'二级栏目三'),
-     *      6 => array('id'=>'6','pid'=>3,'name'=>'三级栏目一'),
-     *      7 => array('id'=>'7','pid'=>3,'name'=>'三级栏目二')
-     *      )
-     * @param string $pidname 父字段名称
-     * @param string $nbsp    空格占位符
-     * @return Tree
-     */
-    public function init($arr = [], $pidname = null, $nbsp = null)
-    {
-        $this->arr = $arr;
-        if (!is_null($pidname)) {
-            $this->pidname = $pidname;
-        }
-        if (!is_null($nbsp)) {
-            $this->nbsp = $nbsp;
-        }
-        return $this;
-    }
-
-    /**
-     * 得到子级数组
-     * @param int
-     * @return array
-     */
-    public function getChild($myid)
-    {
-        $newarr = [];
-        foreach ($this->arr as $value) {
-            if (!isset($value['id'])) {
-                continue;
-            }
-            if ($value[$this->pidname] == $myid) {
-                $newarr[$value['id']] = $value;
-            }
-        }
-        return $newarr;
-    }
-
-    /**
-     * 读取指定节点的所有孩子节点
-     * @param int     $myid     节点ID
-     * @param boolean $withself 是否包含自身
-     * @return array
-     */
-    public function getChildren($myid, $withself = false)
-    {
-        $newarr = [];
-        foreach ($this->arr as $value) {
-            if (!isset($value['id'])) {
-                continue;
-            }
-            if ((string)$value[$this->pidname] == (string)$myid) {
-                $newarr[] = $value;
-                $newarr = array_merge($newarr, $this->getChildren($value['id']));
-            } elseif ($withself && (string)$value['id'] == (string)$myid) {
-                $newarr[] = $value;
-            }
-        }
-        return $newarr;
-    }
-
-    /**
-     * 读取指定节点的所有孩子节点ID
-     * @param int     $myid     节点ID
-     * @param boolean $withself 是否包含自身
-     * @return array
-     */
-    public function getChildrenIds($myid, $withself = false)
-    {
-        $childrenlist = $this->getChildren($myid, $withself);
-        $childrenids = [];
-        foreach ($childrenlist as $k => $v) {
-            $childrenids[] = $v['id'];
-        }
-        return $childrenids;
-    }
-
-    /**
-     * 得到当前位置父辈数组
-     * @param int
-     * @return array
-     */
-    public function getParent($myid)
-    {
-        $pid = 0;
-        $newarr = [];
-        foreach ($this->arr as $value) {
-            if (!isset($value['id'])) {
-                continue;
-            }
-            if ($value['id'] == $myid) {
-                $pid = $value[$this->pidname];
-                break;
-            }
-        }
-        if ($pid) {
-            foreach ($this->arr as $value) {
-                if ($value['id'] == $pid) {
-                    $newarr[] = $value;
-                    break;
-                }
-            }
-        }
-        return $newarr;
-    }
-
-    /**
-     * 得到当前位置所有父辈数组
-     * @param int
-     * @param bool $withself 是否包含自己
-     * @return array
-     */
-    public function getParents($myid, $withself = false)
-    {
-        $pid = 0;
-        $newarr = [];
-        foreach ($this->arr as $value) {
-            if (!isset($value['id'])) {
-                continue;
-            }
-            if ($value['id'] == $myid) {
-                if ($withself) {
-                    $newarr[] = $value;
-                }
-                $pid = $value[$this->pidname];
-                break;
-            }
-        }
-        if ($pid) {
-            $arr = $this->getParents($pid, true);
-            $newarr = array_merge($arr, $newarr);
-        }
-        return $newarr;
-    }
-
-    /**
-     * 读取指定节点所有父类节点ID
-     * @param int     $myid
-     * @param boolean $withself
-     * @return array
-     */
-    public function getParentsIds($myid, $withself = false)
-    {
-        $parentlist = $this->getParents($myid, $withself);
-        $parentsids = [];
-        foreach ($parentlist as $k => $v) {
-            $parentsids[] = $v['id'];
-        }
-        return $parentsids;
-    }
-
-    /**
-     * 树型结构Option
-     * @param int    $myid        表示获得这个ID下的所有子级
-     * @param string $itemtpl     条目模板 如:"<option value=@id @selected @disabled>@spacer@name</option>"
-     * @param mixed  $selectedids 被选中的ID,比如在做树型下拉框的时候需要用到
-     * @param mixed  $disabledids 被禁用的ID,比如在做树型下拉框的时候需要用到
-     * @param string $itemprefix  每一项前缀
-     * @param string $toptpl      顶级栏目的模板
-     * @return string
-     */
-    public function getTree($myid, $itemtpl = "<option value=@id @selected @disabled>@spacer@name</option>", $selectedids = '', $disabledids = '', $itemprefix = '', $toptpl = '')
-    {
-        $ret = '';
-        $number = 1;
-        $childs = $this->getChild($myid);
-        if ($childs) {
-            $total = count($childs);
-            foreach ($childs as $value) {
-                $id = $value['id'];
-                $j = $k = '';
-                if ($number == $total) {
-                    $j .= $this->icon[2];
-                    $k = $itemprefix ? $this->nbsp : '';
-                } else {
-                    $j .= $this->icon[1];
-                    $k = $itemprefix ? $this->icon[0] : '';
-                }
-                $spacer = $itemprefix ? $itemprefix . $j : '';
-                $selected = $selectedids && in_array($id, (is_array($selectedids) ? $selectedids : explode(',', $selectedids))) ? 'selected' : '';
-                $disabled = $disabledids && in_array($id, (is_array($disabledids) ? $disabledids : explode(',', $disabledids))) ? 'disabled' : '';
-                $value = array_merge($value, array('selected' => $selected, 'disabled' => $disabled, 'spacer' => $spacer));
-                $value = array_combine(array_map(function ($k) {
-                    return '@' . $k;
-                }, array_keys($value)), $value);
-                $nstr = strtr((($value["@{$this->pidname}"] == 0 || $this->getChild($id)) && $toptpl ? $toptpl : $itemtpl), $value);
-                $ret .= $nstr;
-                $ret .= $this->getTree($id, $itemtpl, $selectedids, $disabledids, $itemprefix . $k . $this->nbsp, $toptpl);
-                $number++;
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     * 树型结构UL
-     * @param int    $myid        表示获得这个ID下的所有子级
-     * @param string $itemtpl     条目模板 如:"<li value=@id @selected @disabled>@name @childlist</li>"
-     * @param string $selectedids 选中的ID
-     * @param string $disabledids 禁用的ID
-     * @param string $wraptag     子列表包裹标签
-     * @param string $wrapattr    子列表包裹属性
-     * @return string
-     */
-    public function getTreeUl($myid, $itemtpl, $selectedids = '', $disabledids = '', $wraptag = 'ul', $wrapattr = '')
-    {
-        $str = '';
-        $childs = $this->getChild($myid);
-        if ($childs) {
-            foreach ($childs as $value) {
-                $id = $value['id'];
-                unset($value['child']);
-                $selected = $selectedids && in_array($id, (is_array($selectedids) ? $selectedids : explode(',', $selectedids))) ? 'selected' : '';
-                $disabled = $disabledids && in_array($id, (is_array($disabledids) ? $disabledids : explode(',', $disabledids))) ? 'disabled' : '';
-                $value = array_merge($value, array('selected' => $selected, 'disabled' => $disabled));
-                $value = array_combine(array_map(function ($k) {
-                    return '@' . $k;
-                }, array_keys($value)), $value);
-                $nstr = strtr($itemtpl, $value);
-                $childdata = $this->getTreeUl($id, $itemtpl, $selectedids, $disabledids, $wraptag, $wrapattr);
-                $childlist = $childdata ? "<{$wraptag} {$wrapattr}>" . $childdata . "</{$wraptag}>" : "";
-                $str .= strtr($nstr, array('@childlist' => $childlist));
-            }
-        }
-        return $str;
-    }
-
-    /**
-     * 菜单数据
-     * @param int    $myid
-     * @param string $itemtpl
-     * @param mixed  $selectedids
-     * @param mixed  $disabledids
-     * @param string $wraptag
-     * @param string $wrapattr
-     * @param int    $deeplevel
-     * @return string
-     */
-    public function getTreeMenu($myid, $itemtpl, $selectedids = '', $disabledids = '', $wraptag = 'ul', $wrapattr = '', $deeplevel = 0)
-    {
-        $str = '';
-        $childs = $this->getChild($myid);
-        if ($childs) {
-            foreach ($childs as $value) {
-                $id = $value['id'];
-                unset($value['child']);
-                $selected = in_array($id, (is_array($selectedids) ? $selectedids : explode(',', $selectedids))) ? 'selected' : '';
-                $disabled = in_array($id, (is_array($disabledids) ? $disabledids : explode(',', $disabledids))) ? 'disabled' : '';
-                $value = array_merge($value, array('selected' => $selected, 'disabled' => $disabled));
-                $value = array_combine(array_map(function ($k) {
-                    return '@' . $k;
-                }, array_keys($value)), $value);
-                $bakvalue = array_intersect_key($value, array_flip(['@url', '@caret', '@class']));
-                $value = array_diff_key($value, $bakvalue);
-                $nstr = strtr($itemtpl, $value);
-                $value = array_merge($value, $bakvalue);
-                $childdata = $this->getTreeMenu($id, $itemtpl, $selectedids, $disabledids, $wraptag, $wrapattr, $deeplevel + 1);
-                $childlist = $childdata ? "<{$wraptag} {$wrapattr}>" . $childdata . "</{$wraptag}>" : "";
-                $childlist = strtr($childlist, array('@class' => $childdata ? 'last' : ''));
-                $value = array(
-                    '@childlist' => $childlist,
-                    '@url'       => $childdata || !isset($value['@url']) ? "javascript:;" : $value['@url'],
-                    '@addtabs'   => $childdata || !isset($value['@url']) ? "" : (stripos($value['@url'], "?") !== false ? "&" : "?") . "ref=addtabs",
-                    '@caret'     => ($childdata && (!isset($value['@badge']) || !$value['@badge']) ? '<i class="fa fa-angle-left"></i>' : ''),
-                    '@badge'     => isset($value['@badge']) ? $value['@badge'] : '',
-                    '@class'     => ($selected ? ' active' : '') . ($disabled ? ' disabled' : '') . ($childdata ? ' treeview' . (config('fastadmin.show_submenu') ? ' treeview-open' : '') : ''),
-                );
-                $str .= strtr($nstr, $value);
-            }
-        }
-        return $str;
-    }
-
-    /**
-     * 特殊
-     * @param integer $myid        要查询的ID
-     * @param string  $itemtpl1    第一种HTML代码方式
-     * @param string  $itemtpl2    第二种HTML代码方式
-     * @param mixed   $selectedids 默认选中
-     * @param mixed   $disabledids 禁用
-     * @param string  $itemprefix  前缀
-     * @return string
-     */
-    public function getTreeSpecial($myid, $itemtpl1, $itemtpl2, $selectedids = 0, $disabledids = 0, $itemprefix = '')
-    {
-        $ret = '';
-        $number = 1;
-        $childs = $this->getChild($myid);
-        if ($childs) {
-            $total = count($childs);
-            foreach ($childs as $id => $value) {
-                $j = $k = '';
-                if ($number == $total) {
-                    $j .= $this->icon[2];
-                    $k = $itemprefix ? $this->nbsp : '';
-                } else {
-                    $j .= $this->icon[1];
-                    $k = $itemprefix ? $this->icon[0] : '';
-                }
-                $spacer = $itemprefix ? $itemprefix . $j : '';
-                $selected = $selectedids && in_array($id, (is_array($selectedids) ? $selectedids : explode(',', $selectedids))) ? 'selected' : '';
-                $disabled = $disabledids && in_array($id, (is_array($disabledids) ? $disabledids : explode(',', $disabledids))) ? 'disabled' : '';
-                $value = array_merge($value, array('selected' => $selected, 'disabled' => $disabled, 'spacer' => $spacer));
-                $value = array_combine(array_map(function ($k) {
-                    return '@' . $k;
-                }, array_keys($value)), $value);
-                $nstr = strtr(!isset($value['@disabled']) || !$value['@disabled'] ? $itemtpl1 : $itemtpl2, $value);
-
-                $ret .= $nstr;
-                $ret .= $this->getTreeSpecial($id, $itemtpl1, $itemtpl2, $selectedids, $disabledids, $itemprefix . $k . $this->nbsp);
-                $number++;
-            }
-        }
-        return $ret;
-    }
-
-    /**
-     *
-     * 获取树状数组
-     * @param string $myid       要查询的ID
-     * @param string $itemprefix 前缀
-     * @return array
-     */
-    public function getTreeArray($myid, $itemprefix = '')
-    {
-        $childs = $this->getChild($myid);
-        $n = 0;
-        $data = [];
-        $number = 1;
-        if ($childs) {
-            $total = count($childs);
-            foreach ($childs as $id => $value) {
-                $j = $k = '';
-                if ($number == $total) {
-                    $j .= $this->icon[2];
-                    $k = $itemprefix ? $this->nbsp : '';
-                } else {
-                    $j .= $this->icon[1];
-                    $k = $itemprefix ? $this->icon[0] : '';
-                }
-                $spacer = $itemprefix ? $itemprefix . $j : '';
-                $value['spacer'] = $spacer;
-                $data[$n] = $value;
-                $data[$n]['childlist'] = $this->getTreeArray($id, $itemprefix . $k . $this->nbsp);
-                $n++;
-                $number++;
-            }
-        }
-        return $data;
-    }
-    public function getTreeArray1($myid, $itemprefix = '')
-    {
-        $childs = $this->getChild($myid);
-        $n = 0;
-        $data = [];
-        $number = 1;
-        if ($childs) {
-            $total = count($childs);
-            foreach ($childs as $id => $value) {
-                $j = $k = '';
-                if ($number == $total) {
-                    $j .= $this->icon[2];
-                    $k = $itemprefix ? $this->nbsp : '';
-                } else {
-                    $j .= $this->icon[1];
-                    $k = $itemprefix ? $this->icon[0] : '';
-                }
-                $spacer = $itemprefix ? $itemprefix . $j : '';
-                $value['spacer'] = $spacer;
-                $data[$n] = $value;
-                $data[$n]['childlist'] = $this->getTreeArray1($id, $itemprefix . $k . $this->nbsp);
-                // 去掉空的子数组
-                if(!$data[$n]['childlist']){
-                    unset($data[$n]['childlist']);
-                }
-                $n++;
-                $number++;
-            }
-        }
-        return $data;
-    }
-
-    /**
-     * 将getTreeArray的结果返回为二维数组
-     * @param array  $data
-     * @param string $field
-     * @return array
-     */
-    public function getTreeList($data = [], $field = 'name')
-    {
-        $arr = [];
-        foreach ($data as $k => $v) {
-            $childlist = isset($v['childlist']) ? $v['childlist'] : [];
-            unset($v['childlist']);
-            $v[$field] = $v['spacer'] . ' ' . $v[$field];
-            $v['haschild'] = $childlist ? 1 : 0;
-            if ($v['id']) {
-                $arr[] = $v;
-            }
-            if ($childlist) {
-                $arr = array_merge($arr, $this->getTreeList($childlist, $field));
-            }
-        }
-        return $arr;
-    }
-}

+ 7 - 14
config/app.php

@@ -24,19 +24,12 @@ return [
     'thinkadmin_ver' => 'v5',
     'jwt'            => 'dingding',
     'jwt_time'       => 25920000,
-    //小程序
-    'mini_program'     => [
-        'app_id'  => env('WECHAT_MINI_PROGRAM_APPID', 'wxc050ae7c325b487b'),
-        'secret'  => env('WECHAT_MINI_PROGRAM_SECRET','094c8acda9165f3bb46b8a9320f9ff99'),
-        'token'   => env('WECHAT_MINI_PROGRAM_TOKEN', ''),
-        'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', ''),
-    ],
-    //小程序
-    'wx_pay'=>[
-        'app_id'=>'wxc050ae7c325b487b',//微信appid
-        'mch_id'=>'1634786926',//商户号
-        'key'   =>'dwUf7j0mByd3spp1wNxqXkNbSWXF8Ece',//秘钥
-        'cert_path'=>'wx_cert/apiclient_cert.pem', //证书地址
-        'key_path' =>'wx_cert/apiclient_key.pem', //证书地址
+
+    // 钉钉企业内部应用
+    'dingtalk' => [
+        'agentId'=>'2796673629',
+        'corpId'=> 'dingf1b2e9ddf9d214e224f2f5cc6abecb85',
+        'appKey'    => 'dingilnkljzq3a4chjrw',
+        "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
     ],
 ];