admin/addon/aliapp/shop/controller/Aliapp.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;
}
}