|
@@ -0,0 +1,96 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Modules\Channel\Http\Controllers;
|
|
|
+
|
|
|
+use Catch\Base\CatchController;
|
|
|
+use EasyWeChat\OpenPlatform\Application;
|
|
|
+use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Support\Facades\Cache;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
+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;
|
|
|
+use Symfony\Component\Cache\Adapter\RedisAdapter;
|
|
|
+
|
|
|
+class WechatOpenPlatformController extends CatchController
|
|
|
+{
|
|
|
+ use UserTrait;
|
|
|
+ use ValidatesRequests;
|
|
|
+ // 授权跳转页
|
|
|
+ public function preauth(Request $request) {
|
|
|
+ $this->validate($request, [
|
|
|
+ 'user_id' => 'required'
|
|
|
+ ]);
|
|
|
+// $currentUser = $this->getCurrentUser();
|
|
|
+ $componentInfo = WechatOpenPlatformService::getComponentInfoByCompanyUid(2);
|
|
|
+ $app = WechatOpenPlatformService::buildApplication($componentInfo);
|
|
|
+ $user_id = $request->input('user_id');
|
|
|
+ $url = $app->createPreAuthorizationUrl(sprintf('%s/api/channel/openPlatform/auth/%s/%s',config('app.url'), $componentInfo->app_id, $user_id), []);
|
|
|
+ return redirect($url);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function auth(Request $request, $component_appid, $user_id) {
|
|
|
+ $auth_code = $request->input('auth_code');
|
|
|
+ $auth_user = DB::table('users')
|
|
|
+ ->where([
|
|
|
+ 'id' => $user_id, 'deleted_at' => 0, 'status' => 1
|
|
|
+ ])
|
|
|
+ ->where('pid', '<>', 0)
|
|
|
+ ->select('pid', 'id')->first();
|
|
|
+ if(!$auth_user) {
|
|
|
+ CommonBusinessException::throwError(Errors::OPENPLATFORM_OPTIMIZER_INFO_ERROR);
|
|
|
+ }
|
|
|
+ $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'];
|
|
|
+
|
|
|
+ WechatAuthorizationInfo::updateOrCreate([
|
|
|
+ 'authorizer_appid' => $authorizer_appid,
|
|
|
+ 'component_appid' => $component_appid,
|
|
|
+ 'user_id' => $user_id,
|
|
|
+ 'puser_id' => $auth_user->pid,
|
|
|
+ ], [
|
|
|
+ 'authorizer_refresh_token' => $authorizer_refresh_token
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return view('wechat.openPlatform.authSuccess')->with('url', sprintf('%s/#/user/advertiser',config('app.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();
|
|
|
+ }
|
|
|
+}
|