diff --git a/app/Admin/Extensions/Grid/MiniProgramUpload.php b/app/Admin/Extensions/Grid/MiniProgramUpload.php index 341363d..c6161cd 100644 --- a/app/Admin/Extensions/Grid/MiniProgramUpload.php +++ b/app/Admin/Extensions/Grid/MiniProgramUpload.php @@ -85,7 +85,7 @@ class MiniProgramUpload extends RowAction $domain->modify($param); //服务器域名,服务器域名多次设置仅第一次成功,这里不校验返回结果正确性 $res = $domain->setWebviewDomain([$host]); //业务域名 if (!isset($res['errcode'], $res['errmsg']) || $res['errcode'] != 0 || $res['errmsg'] != 'ok') { - throw new \Exception('设置业务域名失败!'); + throw new \Exception("设置业务域名{$host}失败,原因:" . $res['errmsg'] ?? (is_array($res) ? join(',', $res) : '未知')); } /** @var Client $code */ @@ -119,6 +119,7 @@ class MiniProgramUpload extends RowAction MiniProgramUploadLog::insert([ 'agent_id' => $agent->id, 'appid' => $agent->appid, + 'user_version' => $template->user_version, 'template_id' => $templateId, 'qrcode' => "mini_program_qrcode/{$agent->id}-{$agent->appid}.jpg", 'audit_id' => $res['auditid'], diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index 4390758..ab5e599 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -135,14 +135,22 @@ class AgentProductController extends Controller //分页列表产品图片加域名 private function paginatePicAddHost($list) { - if (!$list->isEmpty()) { - $prefix = Storage::disk('public')->url(''); - foreach ($list->items() as $k=>&$v) { - $v->pictures = array_map(function($item) use ($prefix) { - return strpos($item, $prefix) === false ? $prefix . $item : $item; - }, $v->pictures); + //如果是新入驻代理商没有数据,且没有删除过的数据,则显示最早的几条 + if ($list->isEmpty()) { + if (AgentProduct::list($this->agent_id)->withTrashed()->count() === 0 && request('page', 1) <= 2) { //只获取2页数据 + $list = AgentProduct::list($this->agent_id)->orWhereRaw(1)->orderBy('id')->simplePaginate(); + } else { + return $list; //因为只获取2页数据,不return可能会导入下面的代码出错 } } + + $prefix = Storage::disk('public')->url(''); + foreach ($list->items() as $k=>&$v) { + $v->pictures = array_map(function($item) use ($prefix) { + return strpos($item, $prefix) === false ? $prefix . $item : $item; + }, $v->pictures); + } + return $list; } diff --git a/app/Http/Controllers/Api/ArticleController.php b/app/Http/Controllers/Api/ArticleController.php index c1cb8cf..a034d64 100644 --- a/app/Http/Controllers/Api/ArticleController.php +++ b/app/Http/Controllers/Api/ArticleController.php @@ -22,6 +22,14 @@ class ArticleController extends Controller ->orderBy('sort')->orderBy('id', 'DESC') ->simplePaginate()->toArray(); + //如果没有数据,且没有软删除的数据,显示默认的几条数据,主要用于新代理商入驻时显示默认文章 + if (empty($list['data'])) { + if (Article::withTrashed()->where('agent_id', $this->agent_id)->count() === 0 && request('page', 1) < 2) { + $list = Article::select('id', 'image', 'title', 'type', 'updated_at') + ->orderBy('id')->simplePaginate()->toArray(); + } + } + $new_data = []; $prefix = Storage::disk('public')->url(''); foreach ($list['data'] as $k => &$item) { diff --git a/app/Http/Controllers/Api/MiniProgramController.php b/app/Http/Controllers/Api/MiniProgramController.php index 08c037a..b8712e4 100644 --- a/app/Http/Controllers/Api/MiniProgramController.php +++ b/app/Http/Controllers/Api/MiniProgramController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\AdminSetting; use App\Models\Agent; +use App\Models\MiniProgramUploadLog; use EasyWeChat\Factory; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -90,7 +91,7 @@ class MiniProgramController extends Controller $server = $openPlatform->miniProgram($appid, $refreshToken)->server; //接收事件 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/code/audit_event.html - $server->push(function ($message) { + $server->push(function ($message) use ($appid) { DB::table('mini_program_events') ->insert([ 'type' => 1, @@ -98,22 +99,23 @@ class MiniProgramController extends Controller 'event' => $message['MsgType'] ?? '', 'created_at' => now() ]); - if (isset($message['MsgType'], $message['Event']) && $message['MsgType'] == 'event') { + //审核结果通知 + if (isset($message['MsgType'], $message['Event']) && $message['MsgType'] == 'event') { + $auditArr = [ + 'weapp_audit_success' => 0, //成功 + 'weapp_audit_fail' => 1, //拒绝 + 'weapp_audit_delay' => 4, //审核延后 + ]; + $log = MiniProgramUploadLog::query() + ->where('appid', $appid) + ->orderBy('id', 'desc') + ->first(); + $log->is_success = $auditArr[$message['Event']] ?? -1; + $log->save(); } }); - //试试还是这个? - $openPlatform->server->push(function ($message) { - DB::table('mini_program_events') - ->insert([ - 'type' => 3, - 'response' => json_encode($message), - 'event' => $message['MsgType'] ?? '', - 'created_at' => now() - ]); - }); - return $server->serve(); } } diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 5a65231..fce639f 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -132,10 +132,14 @@ class OrderController extends Controller ]); $ap = AgentProduct::query() - ->where(['id' => $formData['id'], 'status' => ProductStatus::ON_SALE]) - ->where('stock', '>=', $formData['num']) ->with(['coupon', 'product', 'agentCloudProduct:id,price']) - ->has('product') + ->where('stock', '>=', $formData['num']) + ->where(['id' => $formData['id'], 'status' => ProductStatus::ON_SALE, 'agent_id' => $this->agent_id]) //判断agent_id,防止新入驻小程序的演示产品被下单 + ->whereDoesntHave('agentProductItem', function ($query) { + return $query->whereHas('product', function ($query) { + return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); + }); + }) ->first(); if (!$ap || !$ap->product) { return $this->error('产品已下架或库存不足'); diff --git a/app/Http/Controllers/Api/TestController.php b/app/Http/Controllers/Api/TestController.php index 340fa67..58a42aa 100644 --- a/app/Http/Controllers/Api/TestController.php +++ b/app/Http/Controllers/Api/TestController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers\Api; use App\Models\AdminSetting; +use App\Models\AgentProduct; +use App\Models\MiniProgramUploadLog; use EasyWeChat\Factory; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; @@ -17,31 +19,29 @@ class TestController public function index() { $appid = 'wx5bd5789ad8f89524'; - $setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']); - $config = [ - 'app_id' => $setting['service_appid'], - 'secret' => $setting['service_appsecret'], - 'token' => $setting['service_token'], - 'aes_key' => $setting['service_aeskey'], - ]; + $message = json_decode('{"ToUserName":"gh_f4ab40774bed","FromUserName":"o4seR5d-TVCImgh2aE6UtrQn6LIM","CreateTime":"1631670431","MsgType":"event","Event":"weapp_audit_success","SuccTime":"1631670431"}', true); + DB::table('mini_program_events') + ->insert([ + 'type' => 1, + 'response' => json_encode($message), + 'event' => $message['MsgType'] ?? '', + 'created_at' => now() + ]); - $app = Factory::openPlatform($config); - $refreshToken = $app->getAuthorizer($appid)['authorization_info']['authorizer_refresh_token'] ?? null; - if (!$refreshToken) { - return $this->error('获取refresh_token失败'); + //审核结果通知 + if (isset($message['MsgType'], $message['Event']) && $message['MsgType'] == 'event') { + $auditArr = [ + 'weapp_audit_success' => 0, //成功 + 'weapp_audit_fail' => 1, //拒绝 + 'weapp_audit_delay' => 4, //审核延后 + ]; + $log = MiniProgramUploadLog::query() + ->where('appid', $appid) + ->orderBy('id', 'desc') + ->first(); + $log->is_success = $auditArr[$message['Event']] ?? -1; + $log->save(); } - $miniProgram = $app->miniProgram($appid, $refreshToken); - $domain = $miniProgram['domain']; - - $host = env('APP_URL'); - $param = [ - "action" => "add", - "requestdomain" => [$host], - "wsrequestdomain" => [str_replace('http', 'ws', $host)], - "uploaddomain" => [$host], - "downloaddomain" => [$host], - ]; - return [$domain->modify($param), $domain->setWebviewDomain([env('APP_URL')])]; } /** diff --git a/app/Models/AgentProduct.php b/app/Models/AgentProduct.php index b35ab09..04c9464 100644 --- a/app/Models/AgentProduct.php +++ b/app/Models/AgentProduct.php @@ -97,7 +97,7 @@ class AgentProduct extends BaseModel return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); }); }) - ->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE])->where('stock', '>', 0) + ->where('stock', '>', 0)->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE]) ->select('id', 'sale', 'product_id', 'price', 'original_price', 'title', 'pictures'); }