231 lines
8.9 KiB
PHP
231 lines
8.9 KiB
PHP
<?php
|
|
|
|
namespace addon\aliapp\shop\controller;
|
|
|
|
use addon\aliapp\model\Config;
|
|
use app\shop\controller\BaseShop;
|
|
use addon\aliapp\model\MinCode;
|
|
use app\model\upload\Upload as UploadModel;
|
|
class Aliapp extends BaseShop
|
|
{
|
|
protected $replace = [];
|
|
|
|
public function initialize()
|
|
{
|
|
parent::initialize();
|
|
$this->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;
|
|
}
|
|
} |