<?php namespace Modules\Channel\Http\Controllers; use Catch\Base\CatchController; use EasyWeChat\OpenPlatform\Application; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Modules\Channel\Models\WechatAuthorizationInfo; use Modules\Channel\Services\WechatOpenPlatform\WechatOpenPlatformService; use Modules\Common\Errors\Errors; use Modules\Common\Exceptions\CommonBusinessException; use Modules\User\Http\Controllers\UserTrait; class WechatOpenPlatformController extends CatchController { use UserTrait; // 授权跳转页 public function preauth(Request $request) { $currentUser = $this->getCurrentUser(); $componentInfo = WechatOpenPlatformService::getComponentInfoByCompanyUid($currentUser->pid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $url = $app->createPreAuthorizationUrl(url('/api/channel/openPlatform/auth/'.$componentInfo->app_id), []); return $url; } public function auth(Request $request, $component_appid) { $auth_code = $request->input('auth_code'); $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $client = $app->getClient(); $response = $client->post('/cgi-bin/component/api_query_auth', [ 'component_appid' => $component_appid, 'authorization_code' => $auth_code ]); $authorizer_appid = $response['authorization_info']['authorizer_appid']; $authorizer_refresh_token = $response['authorization_info']['authorizer_refresh_token']; $currentUser = $this->getCurrentUser(); WechatAuthorizationInfo::updateOrCreate([ 'authorizer_appid' => $authorizer_appid, 'component_appid' => $component_appid, 'user_id' => $currentUser->id, 'puser_id' => $currentUser->pid, ], [ 'authorizer_refresh_token' => $authorizer_refresh_token ]); return view('wechat.openPlatform.authSuccess')->with('url', url('/')); } /** * 处理授权事件 * @param Request $request * @param $component_appid */ public function authorCommand(Request $request, $component_appid) { $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $server = $app->getServer(); $server->handleAuthorized(function($message, \Closure $next) { myLog('authorCommand')->info('handleAuthorized', ['message' => $message]); return $next($message); }); return $server->serve(); } public function infoCommand(Request $request, $authorizer_appid, $component_appid) { $componentInfo = WechatOpenPlatformService::getComponentInfoByAppid($component_appid); $app = WechatOpenPlatformService::buildApplication($componentInfo); $server = $app->getServer(); return $server->serve(); } }