Browse Source

Merge branch 'develop'

master
shuixiang 4 years ago
parent
commit
de25fa3bbc
  1. 21
      app/Admin/Controllers/AgentController.php
  2. 4
      app/Admin/Controllers/MiniProgramTemplateController.php
  3. 17
      app/Admin/Extensions/Grid/MiniProgramUpload.php
  4. 2
      app/Admin/Forms/Setting.php
  5. 27
      app/Http/Controllers/Api/MiniProgramController.php
  6. 15
      app/Http/Controllers/Api/OrderController.php
  7. 1
      app/Http/Controllers/Api/TestController.php
  8. 25
      app/Http/Controllers/Api/UserController.php

21
app/Admin/Controllers/AgentController.php

@ -9,6 +9,7 @@ use App\Admin\Extensions\Grid\MiniProgramUpload;
use App\Admin\Repositories\Agent; use App\Admin\Repositories\Agent;
use App\Common\AgentType; use App\Common\AgentType;
use App\Common\UserStatus; use App\Common\UserStatus;
use App\Models\MiniProgramTemplate;
use App\Models\Supplier; use App\Models\Supplier;
use Dcat\Admin\Form; use Dcat\Admin\Form;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
@ -47,6 +48,7 @@ class AgentController extends AdminController
$grid->column('rate')->editable()->help('分成百分比,如10%,则输入10'); $grid->column('rate')->editable()->help('分成百分比,如10%,则输入10');
$grid->column('created_at'); $grid->column('created_at');
$last_template_id = MiniProgramTemplate::max('template_id');
$grid->column('status', '状态') $grid->column('status', '状态')
->style('min-width:7em;') ->style('min-width:7em;')
->help('新用户入驻时,请先注册小程序。待企业法人认证通过之后,再上传小程序即可') ->help('新用户入驻时,请先注册小程序。待企业法人认证通过之后,再上传小程序即可')
@ -65,16 +67,23 @@ class AgentController extends AdminController
}) })
->if(fn() => $this->status == UserStatus::NORMAL) ->if(fn() => $this->status == UserStatus::NORMAL)
->display('') ->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)) { //注册小程序 if (empty($this->appid)) { //注册小程序
$column->append((new MiniProgramReg(null, 1))->setKey($this->id))->append(' '); $column->append((new MiniProgramReg(null, 1))->setKey($this->id))->append(' ');
$column->append((new MiniProgramReg(null, 2))->setKey($this->id)); $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)); $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('<br>(' . $statusArr[$is_success] . ')');
}
} }
}); });

4
app/Admin/Controllers/MiniProgramTemplateController.php

@ -40,8 +40,8 @@ class MiniProgramTemplateController extends AdminController
$grid->column('op') $grid->column('op')
->if(fn() => true) ->if(fn() => true)
->then(function ($column) { ->then(function ($column) {
// $column->append((new MiniProgramUpload(null, 2))->setKey($this->id))->append('&nbsp;');
$column->append(new MiniProgramDelTemp)->append('&nbsp;');
// $column->append((new MiniProgramUpload(null, 2))->setKey($this->template_id))->append('&nbsp;');
$column->append((new MiniProgramDelTemp)->setKey($this->template_id))->append('&nbsp;');
}); });
}); });
} }

17
app/Admin/Extensions/Grid/MiniProgramUpload.php

@ -70,10 +70,20 @@ class MiniProgramUpload extends RowAction
} }
$miniProgram = $openPlatform->miniProgram($agent->appid, $refreshToken); $miniProgram = $openPlatform->miniProgram($agent->appid, $refreshToken);
//设置业务域名
//设置域名
/** @var \EasyWeChat\OpenPlatform\Authorizer\MiniProgram\Domain\Client $domain */ /** @var \EasyWeChat\OpenPlatform\Authorizer\MiniProgram\Domain\Client $domain */
$domain = $miniProgram['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') { if (!isset($res['errcode'], $res['errmsg']) || $res['errcode'] != 0 || $res['errmsg'] != 'ok') {
throw new \Exception('设置业务域名失败!'); throw new \Exception('设置业务域名失败!');
} }
@ -133,8 +143,9 @@ class MiniProgramUpload extends RowAction
public function confirm() public function confirm()
{ {
$last_template_id = MiniProgramTemplate::max('template_id');
if ($this->action == 1) { if ($this->action == 1) {
return ["确定要为此代理商上传小程序吗?", ''];
return ["确定要上传模板ID为{$last_template_id}小程序吗?", ''];
} else { } else {
return ['上传确认', '确定要将此小程序模板上传给所有已审核的代理商吗?']; return ['上传确认', '确定要将此小程序模板上传给所有已审核的代理商吗?'];
} }

2
app/Admin/Forms/Setting.php

@ -38,7 +38,7 @@ class Setting extends Form
$this->text('service_appsecret', '小程序第三方平台APP_SECRET'); $this->text('service_appsecret', '小程序第三方平台APP_SECRET');
$this->text('service_token', '消息校验Token')->help('跟小程序管理后台的一致,请勿随意更改'); $this->text('service_token', '消息校验Token')->help('跟小程序管理后台的一致,请勿随意更改');
$this->text('service_aeskey', '消息加解密Key')->help('跟小程序管理后台的一致,请勿随意更改'); $this->text('service_aeskey', '消息加解密Key')->help('跟小程序管理后台的一致,请勿随意更改');
$this->text('service_component_phone', '联系电话')->help('主要用于当注册小程序失败时,腾讯可能会通过此电话反馈问题');
$this->text('service_component_phone', '联系电话')->help('为代理商注册小程序时,腾讯下发注册认证信息时,代理商会看到此电话');
}); });
} }

27
app/Http/Controllers/Api/MiniProgramController.php

@ -64,6 +64,7 @@ class MiniProgramController extends Controller
public function msgEvent(Request $request) public function msgEvent(Request $request)
{ {
$appid = $request->route('appid', ''); $appid = $request->route('appid', '');
DB::table('mini_program_events') DB::table('mini_program_events')
->insert([ ->insert([
'type' => 1, 'type' => 1,
@ -82,15 +83,37 @@ class MiniProgramController extends Controller
]; ];
$openPlatform = Factory::openPlatform($config); $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) { $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') { 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(); return $server->serve();
} }
} }

15
app/Http/Controllers/Api/OrderController.php

@ -411,11 +411,20 @@ class OrderController extends Controller
//如果有核销码,生成核销二维码 //如果有核销码,生成核销二维码
if ($order->verify_code) { if ($order->verify_code) {
$setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
$config = [ $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']); $response = $app->app_code->getUnlimit($order->verify_code, ['page' => 'pages/verification/index']);

1
app/Http/Controllers/Api/TestController.php

@ -37,6 +37,7 @@ class TestController
$param = [ $param = [
"action" => "add", "action" => "add",
"requestdomain" => [$host], "requestdomain" => [$host],
"wsrequestdomain" => [str_replace('http', 'ws', $host)],
"uploaddomain" => [$host], "uploaddomain" => [$host],
"downloaddomain" => [$host], "downloaddomain" => [$host],
]; ];

25
app/Http/Controllers/Api/UserController.php

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\AdminSetting;
use App\Models\Agent; use App\Models\Agent;
use App\Models\User; use App\Models\User;
use EasyWeChat\Factory; use EasyWeChat\Factory;
@ -36,18 +37,30 @@ class UserController extends Controller
]); ]);
$agent = Agent::query()->find($this->agent_id); //代理商数据 $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); $session = Cache::get('session_key_' . $this->user_id);
if (!$session) { if (!$session) {
return $this->error('无效的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 { try {
$decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']); $decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']);
$user = User::find($this->user_id); $user = User::find($this->user_id);

Loading…
Cancel
Save