diff --git a/app/Admin/Controllers/AgentController.php b/app/Admin/Controllers/AgentController.php index 87f5e32..cee2dbc 100644 --- a/app/Admin/Controllers/AgentController.php +++ b/app/Admin/Controllers/AgentController.php @@ -9,6 +9,7 @@ use App\Admin\Extensions\Grid\MiniProgramUpload; use App\Admin\Repositories\Agent; use App\Common\AgentType; use App\Common\UserStatus; +use App\Models\MiniProgramTemplate; use App\Models\Supplier; use Dcat\Admin\Form; use Dcat\Admin\Grid; @@ -47,6 +48,7 @@ class AgentController extends AdminController $grid->column('rate')->editable()->help('分成百分比,如10%,则输入10'); $grid->column('created_at'); + $last_template_id = MiniProgramTemplate::max('template_id'); $grid->column('status', '状态') ->style('min-width:7em;') ->help('新用户入驻时,请先注册小程序。待企业法人认证通过之后,再上传小程序即可') @@ -65,16 +67,23 @@ class AgentController extends AdminController }) ->if(fn() => $this->status == UserStatus::NORMAL) ->display('') - ->then(function ($column) { + ->then(function ($column) use ($last_template_id) { + $is_success = $this->miniUpload->is_success ?? null; + $template_id = $this->miniUpload->template_id ?? null; + if (empty($this->appid)) { //注册小程序 $column->append((new MiniProgramReg(null, 1))->setKey($this->id))->append(' '); $column->append((new MiniProgramReg(null, 2))->setKey($this->id)); - } else if (empty($this->miniUpload)) { - $column->append((new MiniProgramUpload(null, 1))->setKey($this->id)); - } else if ($this->miniUpload->is_success == 0) { - $column->append("已发布(模板:{$this->miniUpload->template_id})"); - } else { + } else if ($is_success === 0 && $template_id === $last_template_id) { + $column->append("已发布(模板:{$template_id})"); + } else if (in_array($is_success, [-1, 2, 4])) { //如果状态是-1未检查过,或2审核中,或4审核延后,则显示审核状态按钮 $column->append((new MiniProgramAuditStatus(null, 1))->setKey($this->id)); + } else { + $column->append((new MiniProgramUpload(null, 1))->setKey($this->id)); + $statusArr = [0 => '审核成功', 1 => '审核被拒绝', 2 => '审核中', 3 => '已撤回', 4 => '审核延后']; + if (isset($is_success, $statusArr[$is_success])) { + $column->append('
(' . $statusArr[$is_success] . ')'); + } } }); diff --git a/app/Admin/Controllers/MiniProgramTemplateController.php b/app/Admin/Controllers/MiniProgramTemplateController.php index 79a622e..1d13201 100644 --- a/app/Admin/Controllers/MiniProgramTemplateController.php +++ b/app/Admin/Controllers/MiniProgramTemplateController.php @@ -40,8 +40,8 @@ class MiniProgramTemplateController extends AdminController $grid->column('op') ->if(fn() => true) ->then(function ($column) { -// $column->append((new MiniProgramUpload(null, 2))->setKey($this->id))->append(' '); - $column->append(new MiniProgramDelTemp)->append(' '); +// $column->append((new MiniProgramUpload(null, 2))->setKey($this->template_id))->append(' '); + $column->append((new MiniProgramDelTemp)->setKey($this->template_id))->append(' '); }); }); } diff --git a/app/Admin/Extensions/Grid/MiniProgramUpload.php b/app/Admin/Extensions/Grid/MiniProgramUpload.php index 20cf969..341363d 100644 --- a/app/Admin/Extensions/Grid/MiniProgramUpload.php +++ b/app/Admin/Extensions/Grid/MiniProgramUpload.php @@ -70,10 +70,20 @@ class MiniProgramUpload extends RowAction } $miniProgram = $openPlatform->miniProgram($agent->appid, $refreshToken); - //设置业务域名 + //设置域名 /** @var \EasyWeChat\OpenPlatform\Authorizer\MiniProgram\Domain\Client $domain */ $domain = $miniProgram['domain']; - $res = $domain->setWebviewDomain([env('APP_URL')]); + + $host = env('APP_URL'); + $param = [ + "action" => "add", + "requestdomain" => [$host], + "wsrequestdomain" => [str_replace('http', 'ws', $host)], + "uploaddomain" => [$host], + "downloaddomain" => [$host], + ]; + $domain->modify($param); //服务器域名,服务器域名多次设置仅第一次成功,这里不校验返回结果正确性 + $res = $domain->setWebviewDomain([$host]); //业务域名 if (!isset($res['errcode'], $res['errmsg']) || $res['errcode'] != 0 || $res['errmsg'] != 'ok') { throw new \Exception('设置业务域名失败!'); } @@ -133,8 +143,9 @@ class MiniProgramUpload extends RowAction public function confirm() { + $last_template_id = MiniProgramTemplate::max('template_id'); if ($this->action == 1) { - return ["确定要为此代理商上传小程序吗?", '']; + return ["确定要上传模板ID为{$last_template_id}的小程序吗?", '']; } else { return ['上传确认', '确定要将此小程序模板上传给所有已审核的代理商吗?']; } diff --git a/app/Admin/Forms/Setting.php b/app/Admin/Forms/Setting.php index 4d349f4..93951bf 100644 --- a/app/Admin/Forms/Setting.php +++ b/app/Admin/Forms/Setting.php @@ -38,7 +38,7 @@ class Setting extends Form $this->text('service_appsecret', '小程序第三方平台APP_SECRET'); $this->text('service_token', '消息校验Token')->help('跟小程序管理后台的一致,请勿随意更改'); $this->text('service_aeskey', '消息加解密Key')->help('跟小程序管理后台的一致,请勿随意更改'); - $this->text('service_component_phone', '联系电话')->help('主要用于当注册小程序失败时,腾讯可能会通过此电话反馈问题'); + $this->text('service_component_phone', '联系电话')->help('为代理商注册小程序时,腾讯下发注册认证信息时,代理商会看到此电话'); }); } diff --git a/app/Http/Controllers/Api/MiniProgramController.php b/app/Http/Controllers/Api/MiniProgramController.php index cd1893e..08c037a 100644 --- a/app/Http/Controllers/Api/MiniProgramController.php +++ b/app/Http/Controllers/Api/MiniProgramController.php @@ -64,6 +64,7 @@ class MiniProgramController extends Controller public function msgEvent(Request $request) { $appid = $request->route('appid', ''); + DB::table('mini_program_events') ->insert([ 'type' => 1, @@ -82,15 +83,37 @@ class MiniProgramController extends Controller ]; $openPlatform = Factory::openPlatform($config); - $server = $openPlatform->server; + $refreshToken = $openPlatform->getAuthorizer($appid)['authorization_info']['authorizer_refresh_token'] ?? null; + if (!$refreshToken) { + return $this->error('获取refresh_token失败'); + } + $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) { + DB::table('mini_program_events') + ->insert([ + 'type' => 1, + 'response' => json_encode($message), + 'event' => $message['MsgType'] ?? '', + 'created_at' => now() + ]); if (isset($message['MsgType'], $message['Event']) && $message['MsgType'] == 'event') { } }); + //试试还是这个? + $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 8de8516..5a65231 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -411,11 +411,20 @@ class OrderController extends Controller //如果有核销码,生成核销二维码 if ($order->verify_code) { + $setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']); $config = [ - 'app_id' => $order->agent->appid, - 'secret' => $order->agent->appsecret, + 'app_id' => $setting['service_appid'], + 'secret' => $setting['service_appsecret'], + 'token' => $setting['service_token'], + 'aes_key' => $setting['service_aeskey'], ]; - $app = Factory::miniProgram($config); + + $app = Factory::openPlatform($config); + $refreshToken = $app->getAuthorizer($order->agent->appid)['authorization_info']['authorizer_refresh_token'] ?? null; + if (!$refreshToken) { + return $this->error('获取refresh_token失败'); + } + $app = $app->miniProgram($order->agent->appid, $refreshToken); $response = $app->app_code->getUnlimit($order->verify_code, ['page' => 'pages/verification/index']); diff --git a/app/Http/Controllers/Api/TestController.php b/app/Http/Controllers/Api/TestController.php index b59f1dc..340fa67 100644 --- a/app/Http/Controllers/Api/TestController.php +++ b/app/Http/Controllers/Api/TestController.php @@ -37,6 +37,7 @@ class TestController $param = [ "action" => "add", "requestdomain" => [$host], + "wsrequestdomain" => [str_replace('http', 'ws', $host)], "uploaddomain" => [$host], "downloaddomain" => [$host], ]; diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 0d2251a..a3e6ee5 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; +use App\Models\AdminSetting; use App\Models\Agent; use App\Models\User; use EasyWeChat\Factory; @@ -36,18 +37,30 @@ class UserController extends Controller ]); $agent = Agent::query()->find($this->agent_id); //代理商数据 - $config = config('wechat.mini_program.default'); - $config = array_merge($config, [ - 'app_id' => $agent->appid, - 'secret' => $agent->appsecret, - ]); $session = Cache::get('session_key_' . $this->user_id); if (!$session) { return $this->error('无效的session,请重新登录'); } - $app = Factory::miniProgram($config); + // 如果有appsecret,使用原来的逻辑,否则使用第三方平台逻辑 + if ($agent['appsecret']) { + $config = config('wechat.mini_program.default'); + $config = array_merge($config, [ + 'app_id' => $agent->appid, + 'secret' => $agent->appsecret, + ]); + $app = Factory::miniProgram($config); + } else { + $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'], + ]; + $app = Factory::miniProgram($config); + } try { $decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']); $user = User::find($this->user_id);