海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

108 lines
3.2 KiB

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\AdminSetting;
use App\Models\Agent;
use EasyWeChat\Factory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* 小程序授权等相关
* Class MiniProgramController
* @package App\Http\Controllers\Api
*/
class MiniProgramController extends Controller
{
// 第三方平台授权事件通知
public function authEvent(Request $request)
{
DB::table('mini_program_events')
->insert([
'type' => 0,
'response' => json_encode($request->all()),
'event' => 'all',
'created_at' => now(),
]);
$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'],
];
$openPlatform = Factory::openPlatform($config);
$server = $openPlatform->server;
// 处理授权成功事件:Guard::EVENT_AUTHORIZED
// 处理授权更新事件:Guard::EVENT_UPDATE_AUTHORIZED
// 处理授权取消事件:Guard::EVENT_UNAUTHORIZED
$server->push(function ($message) {
DB::table('mini_program_events')
->insert([
'type' => 0,
'response' => json_encode($message),
'event' => $message['InfoType'] ?? '',
'created_at' => now()
]);
if (isset($message['InfoType'], $message['status'], $message['msg'], $message['info']) && $message['status'] == 0 && $message['msg'] == 'OK') {
//注册成功授权通知
if ($message['InfoType'] == 'notify_third_fasteregister') {
Agent::where(['company_name' => $message['info']['name'], 'credit_codes' => $message['info']['code']])
->update(['appid' => $message['appid']]);
}
}
});
return $server->serve();
}
public function msgEvent(Request $request)
{
$appid = $request->route('appid', '');
DB::table('mini_program_events')
->insert([
'type' => 1,
'response' => json_encode($request->all()),
'appid' => $appid,
'event' => 'all',
'created_at' => now(),
]);
$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'],
];
$openPlatform = Factory::openPlatform($config);
$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') {
}
});
return $server->serve();
}
}