niucloud update

This commit is contained in:
全栈小学生 2023-06-03 18:26:16 +08:00
parent 0e42f93707
commit 9b9b2de600
70 changed files with 151 additions and 466 deletions

View File

@ -8,7 +8,7 @@ return [
'listen' => [
//应用管理
'appManage' => ['addon\hello_world\app\listener\AppManageListener'],
'AppManage' => ['addon\hello_world\app\listener\AppManageListener'],
],
'subscribe' => [

View File

@ -1,37 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\sys;
use app\service\admin\addon\TerminalService;
use app\service\admin\sys\SystemService;
use core\base\BaseAdminController;
/**
* 系统信息查询
* Class System
* @package app\adminapi\controller\sys
*/
class Terminal extends BaseAdminController
{
/**
* 执行命令行
* @return array|mixed
*/
public function exec()
{
$commands = $this->request->params([
['commands', []],
]);
TerminalService::instance()->exec($commands);
}
}

View File

@ -34,37 +34,7 @@ class AllowCrossDomain
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, post');
header('Access-Control-Max-Age: 1728000');
header('Access-Control-Allow-Credentials:true');
//todo 周 自定义Authorization等需要在.htaccess内加上SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 nginx同理
$allow_origin = [
rtrim(str_replace('https://','',str_replace('http://','',$request->domain())),"/"),
];
$admin_domain = env('system.admin_domain');
if(!empty($admin_domain)){
$admin_domain = explode(',', $admin_domain);
foreach($admin_domain as $v){
if(!trim($v)) continue;
$allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',$v)),"/");
}
}
// if(env('system.admin_domain')){
// $allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',env('system.admin_domain'))),"/");
// }
$referer = $request->header('referer');
$origin = '';
if(!empty($referer)){
$referer = parse_url($referer);
$referer = $referer['host'] ?? '';
$origin = rtrim(str_replace('https://','',str_replace('http://','',$referer)),"/");
}
// $origin = $request->header('origin');
if(env('app_debug') || ($origin && in_array($origin, $allow_origin))){
// header('Access-Control-Allow-Origin: ' . $origin);
header('Access-Control-Allow-Origin: *');
}else{
header('Access-Control-Allow-Origin: *');
throw new ServerException('SERVER_CROSS_REQUEST_FAIL', 409);
}
header('Access-Control-Allow-Origin: *');
return $next($request);
}
}

View File

@ -1,6 +1,7 @@
<?php
// 全局中间件定义文件
use app\api\middleware\AllowCrossDomain;
return [
//跨域请求中间件
AllowCrossDomain::class,
];

View File

@ -18,7 +18,7 @@ use core\exception\ServerException;
/**
* http跨域请求中间件
* Class AllowCrossDomain
* @package app\adminapi\middleware
* @package app\api\middleware
*/
class AllowCrossDomain
{
@ -34,46 +34,7 @@ class AllowCrossDomain
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Max-Age: 1728000');
header('Access-Control-Allow-Credentials:true');
//todo 周 自定义Authorization等需要在.htaccess内加上SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 nginx同理
$allow_origin = [
rtrim(str_replace('https://','',str_replace('http://','',$request->domain())),"/"),
];
$wap_domain = env('system.wap_domain');
if(!empty($wap_domain)){
$wap_domain = explode(',', $wap_domain);
foreach($wap_domain as $v){
if(!trim($v)) continue;
$allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',$v)),"/");
}
}
$web_domain = env('system.web_domain');
if(!empty($web_domain)){
$web_domain = explode(',', $web_domain);
foreach($web_domain as $v){
if(!trim($v)) continue;
$allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',$v)),"/");
}
}
// if(env('system.wap_domain')){
// $allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',env('system.wap_domain'))),"/");
// }
// if(env('system.web_domain')){
// $allow_origin[] = rtrim(str_replace('https://','',str_replace('http://','',env('system.web_domain'))),"/");
// }
$referer = $request->header('referer');
$origin = '';
if(!empty($referer)){
$referer = parse_url($referer);
$referer = $referer['host'] ?? '';
$origin = rtrim(str_replace('https://','',str_replace('http://','',$referer)),"/");
}
if(env('app_debug') || ($origin && in_array($origin, $allow_origin))){
header('Access-Control-Allow-Origin: *');
}else{
header('Access-Control-Allow-Origin: *');
throw new ServerException('SERVER_CROSS_REQUEST_FAIL', 409);
}
header('Access-Control-Allow-Origin: *');
return $next($request);
}
}

View File

@ -12,7 +12,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -34,6 +33,6 @@ Route::group('article', function () {
//文章分类详情
Route::get('category/:id', 'article.ArticleCategory/info');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, false)
->middleware(ApiLog::class);

View File

@ -12,7 +12,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -23,6 +22,6 @@ Route::group('auth',function () {
Route::put('logout', 'login.Login/logout');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);

View File

@ -11,7 +11,6 @@
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -27,5 +26,5 @@ Route::group('diy', function() {
Route::get('share', 'diy.Diy/share');
})->middleware(AllowCrossDomain::class)->middleware(ApiLog::class)
})->middleware(ApiLog::class)
->middleware(ApiCheckToken::class, false);

View File

@ -12,7 +12,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -29,6 +28,6 @@ Route::group('file', function () {
//base64图片
Route::post('image/base64', 'upload.Upload/imageBase64');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);

View File

@ -12,7 +12,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -72,7 +71,7 @@ Route::group('member', function() {
Route::put('cashout_account/:account_id', 'member.CashOutAccount/edit');
// 删除提现账号
Route::delete('cashout_account/:account_id', 'member.CashOutAccount/del');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);
@ -82,6 +81,6 @@ Route::group('member', function() {
/***************************************************** 会员管理 ****************************************************/
//会员日志
Route::post('log', 'member.Member/log');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);

View File

@ -12,7 +12,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use app\api\middleware\AllowCrossDomain;
use think\facade\Route;
@ -28,6 +27,6 @@ Route::group('order', function () {
Route::get('recharge', 'order.Recharge/lists');
// 充值订单详情
Route::get('recharge/:order_id', 'order.Recharge/detail');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);

View File

@ -11,7 +11,6 @@
use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\AllowCrossDomain;
use app\api\middleware\ApiLog;
use think\facade\Route;
@ -19,7 +18,7 @@ use think\facade\Route;
Route::any('pay/notify/:site_id/:channel/:type/:action', 'pay.Pay/notify')
->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class)->allowCrossDomain();
->middleware(ApiLog::class);
/**
* 路由
*/
@ -29,6 +28,6 @@ Route::group('pay',function () {
//支付信息
Route::get('info/:out_trade_no', 'pay.Pay/info');
})->middleware(AllowCrossDomain::class)->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);

View File

@ -13,13 +13,12 @@ use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiLog;
use think\facade\Route;
use app\api\middleware\AllowCrossDomain;
//公众号消息推送
Route::any('wechat/serve/:site_id', 'wechat.Serve/serve')
->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class)->allowCrossDomain();
->middleware(ApiLog::class);
/**
@ -73,8 +72,7 @@ Route::group(function() {
Route::get('site', 'sys.Config/site');
//场景域名
Route::get('scene_domain', 'sys.Config/getSceneDomain');
})->middleware(AllowCrossDomain::class)
->middleware(ApiChannel::class)
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
//加载插件路由

View File

@ -75,6 +75,7 @@ class ComponentDict
'uses' => 0, // 最大添加数量
'sort' => 10002,
'value' => [
"imageHeight" => 180,
"list" => [
[
"link" => [

View File

@ -85,6 +85,7 @@ class PagesDict
"componentName" => "ImageAds",
"componentTitle" => "图片广告",
"uses" => 0,
"imageHeight" => 160,
"list" => [
[
"link" => [

View File

@ -23,8 +23,6 @@ class RechargeOrderDict
//订单状态
//待支付
const WAIT_PAY = 0;
//已支付
const PAY = 1;
//已完成
const FINISH = 10;
//已关闭
@ -78,14 +76,6 @@ class RechargeOrderDict
],
],
],
self::PAY => [
'name' => '已支付',
'status' => self::PAY,
'is_refund' => 0,
'action' => [],
'member_action' => [
],
],
self::FINISH => [
'name' => '已完成',
'status' => self::FINISH,

View File

@ -22,14 +22,14 @@ $system_event = [
*/
//会员注册事件
'memberRegister' => [ 'app\listener\member\MemberRegisterListener' ],
'MemberRegister' => [ 'app\listener\member\MemberRegisterListener' ],
//会员登录事件
'memberLogin' => [ 'app\listener\member\MemberLoginListener' ],
'MemberLogin' => [ 'app\listener\member\MemberLoginListener' ],
//会员账户变化事件
'memberAccount' => [ 'app\listener\member\MemberAccountListener' ],
'MemberAccount' => [ 'app\listener\member\MemberAccountListener' ],
//扫码事件
'scan' => [ 'app\listener\scan\ScanListener' ],
'addSiteAfter' => [ 'app\listener\site\AddSiteAfterListener' ],
'Scan' => [ 'app\listener\scan\ScanListener' ],
'AddSiteAfter' => [ 'app\listener\site\AddSiteAfterListener' ],
/**
* 消息相关事件
@ -40,23 +40,26 @@ $system_event = [
*/
'PaySuccess' => [ 'app\listener\pay\PaySuccessListener' ],
'TransferSuccess' => [ 'app\listener\pay\TransferSuccessListener' ],
/**
* 订单相关事件
*/
// 任务失败统一回调,有四种定义方式
'queue_failed'=> [
['app\listener\job\QueueFailedLoggerListener', 'report'],
],
'appManage' => [
'AppManage' => [
'app\listener\system\AppManageListener'
],
//消息模板数据内容
'noticeData' => [
'NoticeData' => [
'app\listener\notice_template\VerifyCode',//手机验证码
'app\listener\notice_template\MemberVerifySuccess',//
'app\listener\notice_template\RechargeSuccess',
],
//全场景消息发送
'notice' => [
'Notice' => [
'app\listener\notice\Sms',//短信
'app\listener\notice\Wechat',//公众号模板消息
'app\listener\notice\Weapp',//小程序订阅消息

View File

@ -29,10 +29,10 @@ class Notice extends BaseJob
protected function doJob($site_id, $key, $data, $template)
{
//通过业务获取模板变量属于以及发送对象
$result = event('noticeData', ['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template]);
$result = event('NoticeData', ['site_id' => $site_id, 'key' => $key, 'data' => $data, 'template' => $template]);
$notice_data = array_values(array_filter($result))[0] ?? [];
if(empty($notice_data)) throw new NoticeException();
event('notice', ['site_id' => $site_id, 'key' => $key, 'to' => $notice_data['to'], 'vars' => $notice_data['vars'], 'template' => $template]);
event('Notice', ['site_id' => $site_id, 'key' => $key, 'to' => $notice_data['to'], 'vars' => $notice_data['vars'], 'template' => $template]);
return true;
}
}

View File

@ -12,17 +12,21 @@
namespace app\listener\pay;
use app\dict\order\RechargeOrderDict;
use app\service\core\order\recharge\CoreRechargeOrderService;
/**
* 支付异步回调事件
* Class PayNotify
* @package app\listener\pay
*/
class PaySuccessListener
{
public function handle(array $pay_info)
{
$class = "app\\dict\\order\\". $pay_info['trade_type']."\\".ucfirst($pay_info['trade_type']).'OrderService';
return (new $class)->pay($pay_info);
$trade_type = $pay_info['trade_type'] ?? '';
switch($trade_type){
case RechargeOrderDict::getOrderType()['type']:
return (new CoreRechargeOrderService())->pay($pay_info);
break;
}
}
}

View File

@ -13,6 +13,7 @@ namespace app\model\order;
use app\dict\common\ChannelDict;
use app\model\member\Member;
use app\model\pay\Pay;
use core\base\BaseModel;
/**
@ -239,5 +240,11 @@ class Order extends BaseModel
return $this->hasOne(Member::class,'member_id', 'member_id');
}
/**
* 支付记录
* @return \think\model\relation\HasOne
*/
public function pay() {
return $this->hasOne(Pay::class,'out_trade_no', 'out_trade_no')->bind(['pay_type_name' => 'type_name']);
}
}

View File

@ -14,7 +14,7 @@
{SEARCH_VIEW}
<el-form-item>
<el-button type="primary" @click="load{UCASE_NAME}List()">{{ t('search') }}</el-button>
<el-button @click="searchFormRef?.resetFields()">{{ t('reset') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
</el-form-item>
</el-form>
</el-card>
@ -124,6 +124,13 @@ const deleteEvent = (id: number) => {
})
})
}
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
load{UCASE_NAME}List()
}
</script>
<style lang="scss" scoped></style>

View File

@ -107,7 +107,7 @@ class MemberService extends BaseAdminService
$member = $this->model->create($data);
$data['member_id'] = $member->member_id;
event("memberRegister", $data);
event("MemberRegister", $data);
return $member->member_id;
}

View File

@ -42,7 +42,9 @@ class RechargeOrderService extends BaseAdminService
$query->field('order_item_id, order_id, member_id, item_id, item_type, item_name, item_image, price, num, item_money, is_refund, refund_no, refund_status, create_time');
}, 'member' => function($query) {
$query->field('member_id, nickname, mobile, headimg');
}])->order($order)->append(['order_status_info', 'order_from_name', 'refund_status_name']);
}, 'pay' => function($query) {
$query->field('');
} ])->order($order)->append(['order_status_info', 'order_from_name', 'refund_status_name' ]);
return $this->pageQuery($search_model);
}
@ -58,7 +60,9 @@ class RechargeOrderService extends BaseAdminService
$query->field('order_item_id, order_id, member_id, item_id, item_type, item_name, item_image, price, num, item_money, is_refund, refund_no, refund_status, create_time');
}, 'member' => function($query) {
$query->field('member_id, nickname, mobile, headimg');
}])->append(['order_status_info', 'order_from_name'])->findOrEmpty()->toArray();
}, 'pay' => function($query) {
$query->field('');
} ])->append(['order_status_info', 'order_from_name'])->findOrEmpty()->toArray();
return $detail;
}

View File

@ -101,7 +101,7 @@ class SiteService extends BaseAdminService
( new UserService() )->addSiteUser($data_user, $site_id);
//添加站点成功事件
event("addSiteAfter", [ 'site_id' => $site_id ]);
event("AddSiteAfter", [ 'site_id' => $site_id ]);
Db::commit();
return $site_id;

View File

@ -30,7 +30,7 @@ class AppService extends BaseAdminService
*/
public function getAppList()
{
$data = event('appManage');
$data = event('AppManage');
//
$category_list = [];
$list = [];

View File

@ -47,7 +47,7 @@ class SystemService extends BaseAdminService
*/
public function getUrl()
{
$site_tag = $this->site_id == 1 ? '' : '/s' . $this->site_id;
$site_tag = $this->site_id == 1 ? '/' : '/s' . $this->site_id . '/';
$data = [
'wap_url' => ( !empty(env("system.wap_domain")) ? env("system.wap_domain") : request()->domain() ) . "/wap" . $site_tag,
'web_url' => ( !empty(env("system.web_domain")) ? env("system.web_domain") : request()->domain() ) . "/web" . $site_tag,
@ -59,7 +59,8 @@ class SystemService extends BaseAdminService
* 获取系统信息
* @return void
*/
public function getSystemInfo(){
public function getSystemInfo()
{
$server = [];
$server[] = [ "name" => get_lang('dict_setting.server_system'), "server" => PHP_OS ];
$server[] = [ "name" => get_lang('dict_setting.server_setting'), "server" => PHP_SAPI ];
@ -88,16 +89,16 @@ class SystemService extends BaseAdminService
$dirs_list = [
[ "path" => $root_path . DIRECTORY_SEPARATOR . 'runtime'.DIRECTORY_SEPARATOR, "need" => get_lang('dict_setting.file_authority_ask'), "path_name" => "/runtime", "name" => "runtime" ],
[ "path" => $root_path . DIRECTORY_SEPARATOR . 'public'.DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR, "need" => get_lang('dict_setting.file_authority_ask'), "path_name" => "/public/upload", "name" => "upload" ],
];
[ "path" => $root_path . DIRECTORY_SEPARATOR . 'runtime' . DIRECTORY_SEPARATOR, "need" => get_lang('dict_setting.file_authority_ask'), "path_name" => "/runtime", "name" => "runtime" ],
[ "path" => $root_path . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR, "need" => get_lang('dict_setting.file_authority_ask'), "path_name" => "/public/upload", "name" => "upload" ],
];
//目录 可读 可写检测
foreach ($dirs_list as $k => $v) {
$is_readable = is_readable($v[ "path" ]);
$is_write = is_write($v[ "path" ]);
if($is_readable && $is_write){
if ($is_readable && $is_write) {
$dirs_list[ $k ][ "status" ] = true;
}else{
} else {
$dirs_list[ $k ][ "status" ] = false;
}
}
@ -105,24 +106,25 @@ class SystemService extends BaseAdminService
//获取环境版本
$server_version = [];
$row = (array)Db::query("select VERSION() as verson");
$row = (array) Db::query("select VERSION() as verson");
$server_version[] = [ "name" => get_lang('dict_setting.php_version'), "demand" => get_lang('dict_setting.php_ask'), "server" => phpversion() ];
$server_version[] = [ "name" => get_lang('dict_setting.mysql_version'), "demand" => get_lang('dict_setting.mysql_ask'), "server" => $row[0]['verson']];
$server_version[] = [ "name" => get_lang('dict_setting.mysql_version'), "demand" => get_lang('dict_setting.mysql_ask'), "server" => $row[ 0 ][ 'verson' ] ];
// 进程
$process[] = [ "name" => "php think queue:listen", "need" => get_lang('dict_setting.php_authority_ask'), "status" => ( new SystemService() )->checkJob() ];
$data = ["server" => $server, "dirs_list" => $dirs_list, 'system_variables' => $system_variables, 'server_version' => $server_version, 'process' => $process ];
$data = [ "server" => $server, "dirs_list" => $dirs_list, 'system_variables' => $system_variables, 'server_version' => $server_version, 'process' => $process ];
return $data;
}
/**
* 清理缓存
*/
public function schemaCache(){
public function schemaCache()
{
if (is_dir(dirname($_SERVER['DOCUMENT_ROOT']) . '/runtime/schema')) {
rmdirs(dirname($_SERVER['DOCUMENT_ROOT']) . '/runtime/schema');
if (is_dir(dirname($_SERVER[ 'DOCUMENT_ROOT' ]) . '/runtime/schema')) {
rmdirs(dirname($_SERVER[ 'DOCUMENT_ROOT' ]) . '/runtime/schema');
}
return 'CLEAR_MYSQL_CACHE_SUCCESS';
}
@ -131,16 +133,17 @@ class SystemService extends BaseAdminService
*校验消息队列是否正常运行
* @return void
*/
public function checkJob(){
public function checkJob()
{
$secret = uniqid();
$file = root_path('runtime').$secret.'.job';
try{
CheckJob::invoke(['file' => $file]);
}catch(\Throwable $e){
$file = root_path('runtime') . $secret . '.job';
try {
CheckJob::invoke([ 'file' => $file ]);
} catch (\Throwable $e) {
return false;
}
sleep(3);
if(file_exists($file)){
if (file_exists($file)) {
@unlink($file);
return true;
}
@ -151,11 +154,12 @@ class SystemService extends BaseAdminService
* 校验计划任务是否正常运行
* @return bool
*/
public function checkSchedule(){
$file = root_path('runtime').'.schedule';
if(file_exists($file)){
public function checkSchedule()
{
$file = root_path('runtime') . '.schedule';
if (file_exists($file)) {
$time = file_get_contents($file);
if (!empty($time) && abs($time - time()) < 90 ) {
if (!empty($time) && abs($time - time()) < 90) {
return true;
}
}

View File

@ -71,7 +71,7 @@ class LoginService extends BaseApiService
$member_info->last_visit_time = time();
$member_info->save();
$token_info = $this->createToken($member_info);
event("memberLogin", $member_info);
event("MemberLogin", $member_info);
return [
'token' => $token_info['token'],
'expires_time' => $token_info['params']['exp'],

View File

@ -68,7 +68,7 @@ class RegisterService extends BaseApiService
}
$member_id = ( new MemberService() )->add($data);
$data[ 'member_id' ] = $member_id;
event('memberRegister', $data);
event('MemberRegister', $data);
CoreMemberService::setMemberNo($this->site_id, $member_id);
}
$member_info = $member_service->findMemberInfo([ 'member_id' => $member_id, 'site_id' => $this->site_id ]);

View File

@ -19,8 +19,6 @@ use Yansongda\Supports\Collection;
/**
* 支付业务
* Class WechatConfigService
* @package app\service\core\wechat
*/
class PayService extends BaseApiService
{
@ -32,8 +30,6 @@ class PayService extends BaseApiService
$this->core_pay_service = new CorePayService();
}
/**
* 去支付
* @param $site_id
@ -63,22 +59,6 @@ class PayService extends BaseApiService
return $this->core_pay_service->pay($this->site_id, $out_trade_no, $type, $this->channel, $openid ?? '', $return_url, $quit_url, $buyer_id);
}
/**
* 转账
* @param $site_id
* @param $from_no
* @param $product_code 支付宝用
* @param $scene
* @param $to_no
* @param $to_type 支付宝用
* @param $to_name
* @return mixed|Collection
*/
public function transfer(string $type, float $money, string $transfer_no, string $to_no, string $to_type, string $to_name, string $product_code, string $scene){
return $this->core_pay_service->transfer($this->site_id, $type, $money, $transfer_no, $to_no, $to_type, $to_name, $product_code, $scene);
}
/**
* 关闭支付
* @param $site_id
@ -90,17 +70,6 @@ class PayService extends BaseApiService
return $this->core_pay_service->close($this->site_id, $type, $out_trade_no);
}
/**
* 退款
* @param $site_id
* @param $out_trade_no
* @param $money
* @return void
*/
public function refund(string $type, string $out_trade_no, float $money){
return $this->core_pay_service->refund($this->site_id, $type, $out_trade_no, $money);
}
/**
* 支付异步通知
* @param $site_id
@ -111,42 +80,6 @@ class PayService extends BaseApiService
return $this->core_pay_service->notify($this->site_id, $channel, $type, $action);
}
/**
* 查询普通支付订单
* @param $site_id
* @param $type
* @param $out_trade_no
* @return null
*/
public function getOrder(string $type, string $out_trade_no){
return $this->core_pay_service->notify($this->site_id, $type, $out_trade_no);
}
/**
* 查询退款订单
* @param $site_id
* @param $type
* @param $out_trade_no
* @param $refund_no
* @return null
*/
public function getRefund(string $type, string $out_trade_no, string $refund_no){
return $this->core_pay_service->getRefund($this->site_id, $type, $out_trade_no, $refund_no);
}
/**
* 查询转账订单
* @param $site_id
* @param $type
* @param $transfer_no
* @return null
*/
public function getTransfer(string $type, string $transfer_no){
return $this->core_pay_service->getTransfergetTransfer($this->site_id, $type, $transfer_no);
}
/**
* 通过交易流水号查询支付信息以及支付方式
* @param $out_trade_no

View File

@ -113,7 +113,7 @@ class WeappAuthService extends BaseApiService
* @return \app\model\member\Member|array|mixed|\think\Model
* @throws InvalidArgumentException
*/
public function register(string $openid, string $mobile, string $mobile_code){
public function register(string $openid, string $mobile = '', string $mobile_code = ''){
if(empty($openid)) throw new AuthException('AUTH_LOGIN_TAG_NOT_EXIST');
//todo openid可能还需要合法性验证

View File

@ -12,7 +12,6 @@
namespace app\service\core\addon;
use app\dict\addon\AddonDict;
use app\dict\sys\AppTypeDict;
use app\job\sys\AddonInstall;
use app\service\admin\sys\MenuService;
use app\service\admin\sys\SystemService;
@ -23,7 +22,6 @@ use core\util\Terminal;
use think\db\exception\PDOException;
use think\facade\Cache;
use think\facade\Db;
use think\facade\Log;
use think\helper\Str;
/**

View File

@ -86,8 +86,4 @@ class CoreMemberAccountService extends BaseCoreService
}
}
}

View File

@ -13,7 +13,6 @@ namespace app\service\core\notice;
use app\dict\notice\NoticeDict;
use app\job\notice\Message;
use app\model\sys\SysNotice;
use core\base\BaseCoreService;
use core\exception\NoticeException;

View File

@ -14,7 +14,6 @@ namespace app\service\core\notice;
use app\dict\sys\SmsDict;
use app\service\core\sys\CoreConfigService;
use core\base\BaseCoreService;
use core\sms\SmsDriver;
use core\exception\NoticeException;
use core\sms\SmsLoader;

View File

@ -12,16 +12,9 @@
namespace app\service\core\notice;
use app\dict\pay\PayDict;
use app\job\notice\Message;
use app\job\notice\Notice;
use app\model\pay\PayChannel;
use app\model\sys\SysMessage;
use app\model\sys\SysNotice;
use app\service\core\message\CoreMessageService;
use core\base\BaseCoreService;
use core\exception\NoticeException;
use think\Model;
/**

View File

@ -11,12 +11,7 @@
namespace app\service\core\order;
use app\dict\order\OrderRefundDict;
use app\dict\pay\PayDict;
use app\model\order\Order;
use app\model\order\OrderItem;
use app\model\order\OrderItemRefund;
use app\service\core\pay\CorePayService;
use app\service\core\pay\CoreRefundService;
use core\base\BaseCoreService;
use core\exception\CommonException;

View File

@ -11,16 +11,8 @@
namespace app\service\core\order;
use app\dict\order\OrderRefundDict;
use app\dict\pay\PayDict;
use app\model\order\Order;
use app\model\order\OrderItem;
use app\model\order\OrderItemRefund;
use app\service\core\pay\CorePayService;
use app\service\core\pay\CoreRefundService;
use core\base\BaseCoreService;
use core\exception\CommonException;
use think\facade\Db;
/**
* 订单

View File

@ -93,7 +93,7 @@ class CoreRechargeRefundService extends BaseCoreService
public function refund(array $order, string $refund_no){
(new CoreMemberAccountService())->addLog($order['site_id'], $order['member_id'], 'balance', -$order['money'], 'recharge_refund', '充值订单退款', $order['order_id']);
// 调用支付退款
// (new CoreRefundService())->refund($order['site_id'], $refund_no);
(new CoreRefundService())->refund($order['site_id'], $refund_no);
}
/**

View File

@ -51,16 +51,13 @@ class CorePayChannelService extends BaseCoreService
*/
public function getAllowPayTypeByCahnnel(int $site_id, string $channel, array $pay_type_limit_list = []){
$channel_pay_list = $this->model->where([['site_id', '=', $site_id], ['channel', '=', $channel], ['status', '=', 1]])->field('type')->order('sort asc')->select()->toArray();
if(!empty($channel_pay_list)){
$temp_channel_pay_list = array_column($channel_pay_list, 'type');
if($pay_type_limit_list) $temp_channel_pay_list = array_intersect($temp_channel_pay_list, $pay_type_limit_list);
$pay_type_list = PayDict::getPayType($temp_channel_pay_list);
$allow_pay_type_list = [];
foreach($channel_pay_list as $v){
$allow_pay_type_list[] = $pay_type_list[$v['type']];
}
}
return $allow_pay_type_list ?? [];
return $pay_type_list ?? [];
}

View File

@ -16,7 +16,6 @@ use app\dict\pay\PayDict;
use app\dict\pay\TransferDict;
use core\base\BaseCoreService;
use core\exception\PayException;
use core\pay\PayDriver;
use core\pay\PayLoader;
use Yansongda\Supports\Collection;
@ -46,17 +45,20 @@ class CorePayEventService extends BaseCoreService
* @param string $type
* @return $this
*/
public function init(int $site_id, string $channel = '', string $type = ''){
public function init(int $site_id, string $channel = '', string $type = '')
{
$this->site_id = $site_id;
$this->channel = $channel;
$this->type = $type;
$this->config = (new CorePayChannelService())->getConfigByChannelAndType($this->site_id, $this->channel, $this->type);
return $this;
}
/**
* 获取实例化应用
* @param $site_id
* @return \core\pay\PayDriver
* @param string $action
* @return PayLoader
* @throws \Exception
*/
public function app(string $action = 'query')
{
@ -91,7 +93,7 @@ class CorePayEventService extends BaseCoreService
'buyer_id' => $buyer_id,
'openid' => $openid
);
switch($this->type){
switch ($this->type) {
case PayDict::WECHATPAY:
$params['money'] = $params['money'] * 100;
@ -132,7 +134,7 @@ class CorePayEventService extends BaseCoreService
break;
}
}
if(empty($pay_fun)) throw new PayException('PAYMENT_METHOD_NOT_SCENE');
if (empty($pay_fun)) throw new PayException('PAYMENT_METHOD_NOT_SCENE');
return $this->app('pay')->$pay_fun($params);
}
@ -148,10 +150,10 @@ class CorePayEventService extends BaseCoreService
* @param $to_name
* @return mixed|Collection
*/
public function transfer(float $money, string $transfer_no,string $to_no, string $to_name, string $remark, array $transfer_list = [], string $to_type = '', string $product_code = '', string $scene = '')
public function transfer(float $money, string $transfer_no, string $to_no, string $to_name, string $remark, array $transfer_list = [], string $to_type = '', string $product_code = '', string $scene = '')
{
$transfer_type = TransferDict::getPayTypeByTransfer($this->type);
switch($transfer_type){
switch ($transfer_type) {
case PayDict::WECHATPAY:
$money = $money * 100;
break;
@ -190,11 +192,15 @@ class CorePayEventService extends BaseCoreService
*/
public function refund(string $out_trade_no, float $money, float $total, string $refund_no)
{
if ($this->type == PayDict::WECHATPAY) {
$money = $money * 100;
$total = $total * 100;
}
return $this->app('refund')->refund([
'out_trade_no' => $out_trade_no,
'out_trade_no' => $money,
'out_trade_no' => $total,
'out_trade_no' => $refund_no
'money' => $money,
'total' => $total,
'refund_no' => $refund_no
]);
}
@ -202,7 +208,7 @@ class CorePayEventService extends BaseCoreService
* 支付异步通知
* @return void
*/
public function notify(string $action, Callable $callback)
public function notify(string $action, callable $callback)
{
return $this->app()->notify($action, $callback);
}

View File

@ -111,11 +111,11 @@ class CorePayService extends BaseCoreService
$money = $pay['money'];
$body = $pay['body'];
$trade_type = $pay['trade_type'];
$allow_type = OrderTypeDict::getAllowPayType($trade_type);//当前支付允许使用的支付方式
if(!in_array($type, $allow_type)){
throw new PayException('PAYMENT_METHOD_NOT_SUPPORT');//业务不支持
}
if(!in_array($type, array_column((new CorePayChannelService())->getAllowPayTypeByCahnnel($site_id, $channel), 'key'))) throw new PayException('PAYMENT_METHOD_NOT_SCENE');//场景不支持
// $allow_type = OrderTypeDict::getAllowPayType($trade_type);//当前支付允许使用的支付方式
// if(!in_array($type, $allow_type)){
// throw new PayException('PAYMENT_METHOD_NOT_SUPPORT');//业务不支持
// }
if(!in_array($type, array_column((new CorePayChannelService())->getAllowPayTypeByCahnnel($site_id, $channel, OrderTypeDict::getAllowPayType($trade_type)), 'key'))) throw new PayException('PAYMENT_METHOD_NOT_SCENE');//场景不支持
$pay_result = $this->pay_event->init($site_id, $channel, $type)->pay($out_trade_no, $money, $body, $return_url, $quit_url, $buyer_id, $openid ?? '');
//todo 特殊支付方式会直接返回支付状态,状态如果为已支付会直接支付
if(!empty($pay_result['status']) && $pay_result['status'] == PayDict::STATUS_ED){
@ -245,35 +245,6 @@ class CorePayService extends BaseCoreService
}
return true;
// $trade_type = $pay->trade_type;
// $data = array(
// 'pay_time' => time(),
// 'status' => PayDict::STATUS_ED,
// 'type' => $type,
// 'trade_no' => $params['trade_no'] ?? '',
// 'voucher' => $params['voucher'] ?? '',
// 'mch_id' => $params['mch_id'] ?? '',
// );
// //允许修改的值
// $allow_field = array('trade_no', 'voucher', 'status', 'pay_time', 'type', 'mch_id');
// // 启动事务
// Db::startTrans();
// try {
// $pay->allowField($allow_field)->save($data);
//
// $result = event('PaySuccess', ['out_trade_no' => $out_trade_no, 'trade_type' => $trade_type, 'site_id' => $site_id]);
// if(!check_event_result($result)){
// return false;
// }
// // 提交事务
// Db::commit();
// return true;
// } catch (\Throwable $e) {
// // 回滚事务
// Db::rollback();
// throw new PayException($e->getMessage());
// }
}
@ -284,7 +255,6 @@ class CorePayService extends BaseCoreService
* @return null
*/
public function notify(int $site_id, string $channel, string $type, string $action){
Log::write('pay__'.$site_id.'_'.$type.'_'.$action);
$callback = function($out_trade_no, $params) use($site_id,$type, $action){
try {
switch($action){
@ -297,40 +267,12 @@ class CorePayService extends BaseCoreService
}
} catch (PayException $e) {
Log::write('pay__'.$site_id.'_'.$type.'_'.$e->getMessage());
return false;
}
};
return $this->pay_event->init($site_id, $channel, $type)->init($site_id, $channel, $type)->notify($action, $callback);
// return true;
return $this->pay_event->init($site_id, $channel, $type)->notify($action, $callback);
}
/**
* 支付取消
* @param int $site_id
* @param string $out_trade_no
* @return void
*/
// public function cancel(int $site_id, string $out_trade_no){
// $pay = $this->findPayInfoByOutTradeNo($site_id, $out_trade_no);
// if($pay->isEmpty()) throw new PayException('ALIPAY_TRANSACTION_NO_NOT_EXIST');
// if($pay['status'] == PayDict::STATUS_ED) throw new PayException('PAY_SUCCESS');//已支付不能取消
// if($pay['status'] == PayDict::STATUS_CALCLE) throw new PayException('PAY_IS_REMOVE');//已取消不能重复取消
// $type = $pay->type;
// if($pay['status'] == PayDict::STATUS_ING){
// //尝试关闭相关支付
// $result = $this->pay_event->init($site_id, $pay->channel, $type)->close($out_trade_no);
// if($result){
//
// }else{//根据返回值来进行下一步操作 支付已完成就将支付完成
//
// }
//
// }
// }
/**
* 重置支付,更换新的交易流水号
* @param int $site_id
@ -374,7 +316,7 @@ class CorePayService extends BaseCoreService
$pay_info = $this->pay_event->init($site_id, $pay->channel, $pay->type)->getOrder($out_trade_no);
$type = $pay['type'];
if(empty($pay_info))
return $pay_info;
return false;
$status = $pay_info['status'];
switch($status){
case OnlinePayDict::SUCCESS://支付成功

View File

@ -11,7 +11,6 @@
namespace app\service\core\pay;
use app\dict\pay\PayDict;
use app\dict\pay\RefundDict;
use app\model\pay\Refund;
use core\base\BaseCoreService;
@ -54,7 +53,7 @@ class CoreRefundService extends BaseCoreService
'channel' => $pay->channel,//渠道
'out_trade_no' => $out_trade_no,
'refund_no' => $refund_no,
'status' => 0,
'status' => RefundDict::WAIT,
'reason' => $reason
);
$this->model->create($data);
@ -75,7 +74,7 @@ class CoreRefundService extends BaseCoreService
$money = $refund->money;
try{
//判断成功的话,可以直接调用退款成功
$pay_result = $this->pay_event->init($site_id, $refund->channel, $refund->type)->refund($out_trade_no, $money, $refund_no);
$pay_result = $this->pay_event->init($site_id, $refund->channel, $refund->type)->refund($out_trade_no, $money, $money, $refund_no);
$this->refundNotify($site_id, $out_trade_no, $refund->type, $pay_result);
}catch (\Throwable $e) {
throw new PayException($e->getMessage());
@ -128,7 +127,7 @@ class CoreRefundService extends BaseCoreService
$this->refundFail($site_id, [
'out_trade_no' => $out_trade_no,
'refund_no' => $refund_no,
'fail_reason' => $params['fail_reason']
'fail_reason' => $params['fail_reason'] ?? ''
]);
break;
}
@ -170,6 +169,7 @@ class CoreRefundService extends BaseCoreService
'out_trade_no' => $out_trade_no,
'refund_no' => $refund_no,
]);
break;
case RefundDict::FAIL://退款失败
$this->refundFail($site_id, [
'out_trade_no' => $out_trade_no,
@ -219,7 +219,7 @@ class CoreRefundService extends BaseCoreService
['refund_no', '=', $refund_no]
])->update([
'status' => RefundDict::SUCCESS,
'fail_reason' => $data['reason']
'fail_reason' => $data['fail_reason']
]);
return true;
}

View File

@ -15,7 +15,6 @@ use app\dict\member\MemberAccountChangeTypeDict;
use app\dict\member\MemberAccountTypeDict;
use app\dict\pay\PayDict;
use app\service\core\member\CoreMemberAccountService;
use app\service\core\member\CoreMemberService;
use app\service\core\pay\CorePayService;
use core\base\BaseCoreService;

View File

@ -62,7 +62,7 @@ class CoreScanService extends BaseCoreService
Log::write('scan_log_'.$key);
if(!empty($cache)){
$cache['is_scan'] = true;
Cache::set($cache_name, event('scan', array_merge($cache, $data))[0]);
Cache::set($cache_name, event('Scan', array_merge($cache, $data))[0]);
}
return true;
}

View File

@ -13,10 +13,8 @@ namespace app\service\core\site;
use app\dict\site\SiteDict;
use app\model\site\Site;
use app\service\api\login\BaseApiService;
use core\base\BaseCoreService;
use core\exception\CommonException;
use think\facade\Cache;
/**
* 站点服务层

View File

@ -13,7 +13,6 @@ namespace app\service\core\upload;
use app\dict\sys\FileDict;
use app\service\core\sys\CoreAttachmentService;
use core\exception\UploadFileException;
/**
* 上传服务层

View File

@ -15,10 +15,8 @@ namespace app\validate\article;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class Article
* @package app\validate\article
*/
class Article extends Validate
{

View File

@ -15,10 +15,9 @@ namespace app\validate\generator;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* 代码生成器
* Class Generator
* @package app\validate\generator
*/
class Generator extends Validate
{

View File

@ -14,10 +14,8 @@ namespace app\validate\notice;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class Menu
* @package app\validate\notice
*/
class Menu extends Validate
{

View File

@ -15,10 +15,8 @@ use app\dict\pay\PayDict;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class Pay
* @package app\validate\pay
*/
class Pay extends Validate
{

View File

@ -15,10 +15,8 @@ use app\dict\pay\PayDict;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class PayTemplate
* @package app\validate\pay
*/
class PayTemplate extends Validate
{

View File

@ -16,10 +16,8 @@ use app\dict\sys\MethodDict;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class Menu
* @package app\validate\sys
*/
class Menu extends Validate
{

View File

@ -13,12 +13,9 @@ namespace app\validate\sys;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class Role
* @package app\validate\sys
*/
class Role extends Validate
{

View File

@ -13,12 +13,9 @@ namespace app\validate\sys;
use think\Validate;
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-01-07
* Time: 18:08
* Class User
* @package app\validate\sys
*/
class User extends Validate
{

View File

@ -14,7 +14,6 @@ namespace core\dict;
use core\loader\Storage;
use think\facade\Cache;
use think\facade\Db;
use think\facade\Log;
/**
* Class BaseAddon

View File

@ -24,7 +24,7 @@ class Route extends BaseDict
foreach ($addons as $k => $v)
{
$route_path = $this->getAddonAppPath($v). DIRECTORY_SEPARATOR. $data['app_type']. DIRECTORY_SEPARATOR. "route.php";
$route_path = $this->getAddonAppPath($v). DIRECTORY_SEPARATOR. $data['app_type']. DIRECTORY_SEPARATOR. "route". DIRECTORY_SEPARATOR. "route.php";
if(is_file($route_path))
{
include $route_path;

View File

@ -22,7 +22,7 @@ abstract class Loader extends Facade
*/
public function __construct($name = '', array $config = []){
if(is_array($name)){
$config = $config;
$config = $name;
$name = null;
}
if($name){

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\oauth;

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\oauth;

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\oauth;

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\pay;

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\pay;
@ -134,7 +128,7 @@ abstract class BasePay extends Storage
[
'logger' => [
'enable' => true,
'file' => runtime_path() . 'paylog'.DIRECTORY_SEPARATOR.date('Ym').DIRECTORY_SEPARATOR.date('d').'.log',
'file' => root_path('runtime') . 'paylog'.DIRECTORY_SEPARATOR.date('Ym').DIRECTORY_SEPARATOR.date('d').'.log',
'level' => env('app_debug') ? 'debug' : 'info', // 建议生产环境等级调整为 info开发环境为 debug
'type' => 'single', // optional, 可选 daily.
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天

View File

@ -1,10 +1,4 @@
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2023-02-17
* Time: 15:58
*/
namespace core\pay;
@ -271,6 +265,7 @@ class Wechatpay extends BasePay
],
]);
$result = $this->returnFormat($result);
$refund_status_array = [
'SUCCESS' => RefundDict::SUCCESS,
'CLOSED' => RefundDict::FAIL,

View File

@ -11,7 +11,6 @@
namespace core\sms;
use core\loader\DriverConfig;
use core\loader\Storage;
/**

View File

@ -11,7 +11,6 @@
namespace core\template;
use core\loader\DriverConfig;
use core\loader\Storage;
/**

View File

@ -11,12 +11,7 @@
namespace core\template;
use AlibabaCloud\Client\AlibabaCloud;
use app\service\core\weapp\CoreWeappService;
use app\service\core\wechat\CoreWechatService;
use core\exception\NoticeException;
use core\sms\BaseSms;
use Exception;
class Weapp extends BaseTemplate

View File

@ -11,11 +11,7 @@
namespace core\template;
use AlibabaCloud\Client\AlibabaCloud;
use app\service\core\wechat\CoreWechatService;
use core\exception\NoticeException;
use core\sms\BaseSms;
use Exception;
class Wechat extends BaseTemplate

View File

@ -10,9 +10,7 @@
// +----------------------------------------------------------------------
namespace core\upload;
use app\service\core\upload\CoreUploadConfigService;
use core\exception\UploadFileException;
use core\loader\DriverConfig;
use core\loader\Storage;
/**
* Class BaseUpload

View File

@ -11,7 +11,6 @@
namespace core\util;
use think\facade\Config;
use think\facade\Queue as ThinkQueue;
use think\facade\Log;

View File

@ -2,7 +2,6 @@
namespace core\util;
use core\exception\CommonException;
class Terminal
{