From b32db3a292296793ea3a3049b6c6af0082d53465 Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 15 Sep 2021 10:36:04 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0user=5Fversion=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Extensions/Grid/MiniProgramUpload.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Admin/Extensions/Grid/MiniProgramUpload.php b/app/Admin/Extensions/Grid/MiniProgramUpload.php index 341363d..1b39f66 100644 --- a/app/Admin/Extensions/Grid/MiniProgramUpload.php +++ b/app/Admin/Extensions/Grid/MiniProgramUpload.php @@ -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'], From 4fb2e79a62751143b4364bf1cc27962639b43989 Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 15 Sep 2021 13:10:44 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E4=BA=A7=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/AgentProductController.php | 18 ++++++++++++------ app/Http/Controllers/Api/OrderController.php | 10 +++++++--- app/Models/AgentProduct.php | 2 +- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index 4390758..1af06c3 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -135,14 +135,20 @@ 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)->count() === 0) { + $list = AgentProduct::list($this->agent_id)->orWhereRaw(1)->orderBy('id')->simplePaginate(); } } + + $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/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/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'); } From 853024343530511be86f2e9a64e219b1007ca587 Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 15 Sep 2021 14:00:13 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=97=B6=E5=A2=9E=E5=8A=A0=E6=BC=94=E7=A4=BA=E4=BA=A7=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/AgentProductController.php | 6 ++++-- app/Http/Controllers/Api/ArticleController.php | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index 1af06c3..ab5e599 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -135,10 +135,12 @@ class AgentProductController extends Controller //分页列表产品图片加域名 private function paginatePicAddHost($list) { - //如果是新入驻代理商没有数据,则显示最早的几条 + //如果是新入驻代理商没有数据,且没有删除过的数据,则显示最早的几条 if ($list->isEmpty()) { - if (AgentProduct::list($this->agent_id)->count() === 0) { + 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可能会导入下面的代码出错 } } 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) { From e92a350ea491be041da40c729dcfc94f9d978024 Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 15 Sep 2021 14:39:28 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Extensions/Grid/MiniProgramUpload.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Admin/Extensions/Grid/MiniProgramUpload.php b/app/Admin/Extensions/Grid/MiniProgramUpload.php index 1b39f66..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 */ From 1adc8a51fcb24c9db79e82652de7ff748f6aa4bb Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 15 Sep 2021 14:48:50 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A5=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/MiniProgramController.php | 28 +++++------ app/Http/Controllers/Api/TestController.php | 46 +++++++++---------- 2 files changed, 38 insertions(+), 36 deletions(-) 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/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')])]; } /**