98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| namespace app\controller;
 | ||
| 
 | ||
| use app\service\GoogleOAuthService;
 | ||
| use support\Request;
 | ||
| use support\Response;
 | ||
| use DI\Annotation\Inject;
 | ||
| 
 | ||
| 
 | ||
| class NoticeController
 | ||
| {
 | ||
| 
 | ||
|     /**
 | ||
|      * @Inject
 | ||
|      * @var GoogleOAuthService
 | ||
|      */
 | ||
|     private $googleOAuthService;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     public function handleGoogleBindingAccounts(Request $request)
 | ||
|     {
 | ||
| //        $state = $request->input('state') ?? $request->jwtClaims['uid'];
 | ||
|         $state = $request->input('state') ?? $request->jwtClaims['merchant_id'];
 | ||
|         $code  = $request->input('code'); // 授权码
 | ||
| 
 | ||
|         if (!$state) {
 | ||
|             return $this->errorResponse(300, 'Invalid state parameter');
 | ||
|         }
 | ||
|         // state值验证通过,继续处理授权码
 | ||
|         $googleOAuthService = new GoogleOAuthService();
 | ||
| 
 | ||
|         $tokens = $googleOAuthService->getRefreshToken($code);
 | ||
| 
 | ||
|         if (!isset($tokens['refresh_token'])) {
 | ||
|             if (isset($tokens['access_token'])) {
 | ||
|                 return $this->errorResponse(300, 'Google Ads Account is Authorized');
 | ||
|             }
 | ||
|             return $this->errorResponse(300, 'Refresh Token getting failed');
 | ||
|         } else {
 | ||
|             $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state);
 | ||
|         }
 | ||
| 
 | ||
|         return $this->successResponse($tokens, $request);
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     public function initNewGoogleAdsAccountData(Request $request)
 | ||
|     {
 | ||
|         $state = $request->input('state') ??'';
 | ||
|         if ($state != 'sdf^&^*7hkjhjk') {
 | ||
|             return $this->errorResponse(300, 'Invalid state parameter');
 | ||
|         }
 | ||
|         $refresh_token  = $request->input('refresh_token'); // 授权码
 | ||
|         // state值验证通过,继续处理授权码
 | ||
|         $googleOAuthService = new GoogleOAuthService();
 | ||
| 
 | ||
|         if (!isset($refresh_token)) {
 | ||
|             return $this->errorResponse(300, 'Refresh Token getting failed');
 | ||
|         } else {
 | ||
|             $googleOAuthService->initNewGoogleAdsAccountData($refresh_token);
 | ||
|         }
 | ||
| 
 | ||
|         return $this->successResponse('', $request);
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     // 可以加入一些公共方法
 | ||
|     protected function successResponse($data, Request $request): Response
 | ||
|     {
 | ||
| //        if ($request->jwtNewToken) {
 | ||
| //            return new Response(200,
 | ||
| //                [
 | ||
| //                    'Content-Type' => 'application/json',
 | ||
| //                    'X-New-Token' => $request->jwtNewToken
 | ||
| //                ],
 | ||
| //                json_encode($data, JSON_UNESCAPED_UNICODE));
 | ||
| //        } else {
 | ||
|             return Json([
 | ||
|                 'code' => 0,
 | ||
|                 'msg' => 'ok',
 | ||
|                 'data' => $data,
 | ||
|             ]);
 | ||
| //        }
 | ||
|     }
 | ||
| 
 | ||
|     protected function errorResponse($code, $message, $data = []): Response
 | ||
|     {
 | ||
|         return Json([
 | ||
|             'code' => $code,
 | ||
|             'msg' => $message ?: 'error',
 | ||
|             'data' => $data
 | ||
|         ]);
 | ||
|     }
 | ||
| 
 | ||
| } | 
