replace = [ 'WEAPP_CSS' => __ROOT__ . '/addon/weapp/shop/view/public/css', 'WEAPP_JS' => __ROOT__ . '/addon/weapp/shop/view/public/js', 'WEAPP_IMG' => __ROOT__ . '/addon/weapp/shop/view/public/img', 'WEAPP_SVG' => __ROOT__ . '/addon/weapp/shop/view/public/svg', ]; } /*** * 小程序设置 * @return mixed */ public function setting() { // $app = new MinCode($this->site_id); // $url = addon_url('aliapp/shop/auth/authinfo', ['state' => 'minapp']); // $auth_url = $app->getPreAuthorizationUrl($url); // $this->assign('auth_url', $auth_url); $config = new Config(); $config_info = $config->getAppConfig($this->site_id)['data']['value']; $this->assign("config_info", $config_info); return $this->fetch('aliapp/setting', [], $this->replace); } /*** * 小程序配置 * @return array|mixed */ public function config() { $config = new Config(); $config_info = $config->getAppConfig($this->site_id)['data']['value']; if (request()->isAjax()) { $appid = input('appid', ''); $qrcode = input('qrcode', ''); $app_name = input('app_name', ''); $app_original = input('app_original', ''); $alipay_public = input('alipay_public_key', ''); $private_key = input('private_key', ''); $public_key = input('public_key', ''); $data = array( 'line_type' => input('line_type', 'custom'), "appid" => $appid, 'app_name' => $app_name, 'qrcode' => $qrcode, 'alipay_public_key' => $alipay_public, 'private_key' => $private_key, 'public_key' => $public_key, 'app_original' => $app_original, ); $data = array_merge($config_info, $data); $res = $config->setAlipayConfig($appid, $data, $this->site_id, $app_original); return $res; } else { $app = new MinCode($this->site_id); $url = addon_url('aliapp/shop/auth/authinfo', ['state' => 'minapp']); $auth_url = $app->getPreAuthorizationUrl($url); $this->assign('auth_url', $auth_url); $this->assign("config_info", $config_info); $this->assign("line_type", $config_info['line_type'] ?? 'custom'); return $this->fetch('aliapp/config', [], $this->replace); } } /*** * 授权接入 * @return mixed */ public function auth() { $app = new MinCode(); $url = addon_url('aliapp/shop/auth/authinfo'); $ag_site_id = model('site')->getValue(['site_id' => $this->site_id], 'agent_id'); $text = $this->site_id . '|minapp|' . $ag_site_id; $auth_url = $app->getminiAuthorizationUrl($url, url_safe_base64_encode($text)); $qrcode_name = 'alipay_auth'; $path = 'upload/qrcode'; qrcode($auth_url, $path, $qrcode_name); $this->assign('auth_img', '/' . $path . '/' . $qrcode_name . '.png'); return $this->fetch('aliapp/auth', [], $this->replace); } /** * 编辑小程序基础信息 * 已商上架小程序无法再次修改 * @return array|mixed */ public function editapp() { $app = new MinCode(); $config = new Config(); $config_info = $config->getAppConfig($this->site_id)['data']['value']; $app->appAuthToken = $config_info['app_auth_token']; if (request()->isAjax()) { $data=request()->post(); $config_info['app_name']=$data['app_name']; $config_info['head_img']=$data['app_logo']; $app_original=$config_info['app_original']; $config->setAlipayConfig($config_info['appid'],$config_info,$this->site_id,$app_original); $data['app_logo']= ROOT_PATH.'/'.$data['app_logo']; $app_logo=$data['app_logo']; unset($data['category_ids'],$data['file'],$data['app_logo']); $res=$app->miniSetBaseinfo($data,$app_logo); //设置小 if($res['code']=='10000'){ cache($app->appAuthToken . '_baseinfo',null); $message='设置成功'; }else{ $message=$res['sub_msg']; } return success(0,$message,$res); } $baseinfo = cache($app->appAuthToken . '_baseinfo'); if (empty($baseinfo)) { $baseinfo = $app->requestApi('alipay.open.mini.baseinfo.query')['alipay_open_mini_baseinfo_query_response']; cache($app->appAuthToken . '_baseinfo', $baseinfo); } $one_category = cache($app->appAuthToken . '_category'); $category_all = cache($app->appAuthToken . '_alls_category'); if (empty($one_category)) { $category = $app->requestApi('alipay.open.mini.category.query', ['is_filter' => true])['alipay_open_mini_category_query_response']; if ($category['mini_category_list']) { $category_all = array_column($category['mini_category_list'], null, 'category_id'); $one_category = []; foreach ($category_all as $key => $item) { if ($item['parent_category_id'] == '0') { $one_category[] = $item; } } cache($app->appAuthToken . '_category', $one_category); cache($app->appAuthToken . '_alls_category', $category_all); } } $original = []; $mini_category_ids = []; if(isset($baseinfo['category_names'])){ $category_names = $baseinfo['category_names']; $category_ids = explode(';', $category_names); $category_all_name = array_column($category_all, null, 'category_name'); foreach ($category_ids as $key => $val) { if ($val) { $text = explode('_', $val); foreach ($text as $category_namet) { $d=$category_all_name[$category_namet]; $d['checked']=true; $category_all[$d['category_id']]['checked']=true; $original[$key][] = $d; } } } } if ($original) { //已设置分类 foreach ($original as $value) { $category_ids = array_column($value, 'category_id'); $mini_category_ids[] = implode('_', $category_ids); } } if (isset($baseinfo['app_logo'])&&strpos($baseinfo['app_logo'], 'http')===0){ $upload=new UploadModel($this->site_id); $pic_img=$upload->setPath("common/images/" . date("Ymd") . '/')->remotePullToLocal($baseinfo['app_logo']); $baseinfo['app_logo']=$pic_img['data']['path']; } $this->assign("original", $original); $this->assign("allCategory", $this->getTreeCategory($category_all)); $this->assign("info", $baseinfo); $this->assign("mini_category_ids", implode(';', $mini_category_ids)); return $this->fetch('aliapp/aliapp_edit', [], $this->replace); } /*** * 获取小程序分类 * @return mixed|void */ public function getMinicategory() { if (request()->isAjax()) { $config = new Config(); $category_id = input('category_id'); $config_info = $config->getAppConfig($this->site_id)['data']['value']; $appAuthToken = $config_info['app_auth_token']; $category_all = cache($appAuthToken . '_alls_category'); $category = []; if($category_id==''){ $one_category = cache($appAuthToken . '_category'); return $one_category; } foreach ($category_all as $key => $item) { if ($item['parent_category_id'] == $category_id) { $category[] = $item; } } return $category; } } public function getTreeCategory($category){ $category_all=$category; $res = []; //遍历寻父 O(n) foreach ($category_all as &$item) { if (isset($category_all[$item['parent_category_id']])){ //注意下面有一个引用符 & ! $category_all[$item['parent_category_id']]['child'] []= &$item; }elseif(!$item['parent_category_id']){ // 此处判断是否加入到结果集 $item['pid'] === null 或者 $item['pid'] == -1 之类的 $res []= &$item; } } unset($item); return $res; } }