2017-01-07 3 views
1

을 얻을 반환서버 내가 <code>refresh token</code> 서버 수익을 얻을 수 <code>phpmailer/get_outh_token.php</code>에 액세스하려고하면 phpmailer에 500 오류가 OUTH 토큰 파일

HTTP ERROR 500

Client ID, Secret keyredirect Uri이 올바른지, 그리고 난 Wordpress에서 이미 사용하고 있습니다.

phpmailer의 최종 버전을 다운로드했으며, 이전 버전과 동일한 결과가 테스트되었습니다.

나는이 원인, 그것은이 부분이 무엇인지 발견

namespace League\OAuth2\Client\Provider; 

Provider namespace is not loaded.

웹 사이트가 PHP 7.

작업 때문에 그 과정의 오류가있는 다음 스크립트 부하를 제거하면 이것은 get_outh_token.php의 전체 코드이며 원본입니다 (자격 증명은 물론 다릅니다) :

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 
/** 
* Get an OAuth2 token from Google. 
* * Install this script on your server so that it's accessible 
* as [https/http]://<yourdomain>/<folder>/get_oauth_token.php 
* e.g.: http://localhost/phpmail/get_oauth_token.php 
* * Ensure dependencies are installed with 'composer install' 
* * Set up an app in your Google developer console 
* * Set the script address as the app's redirect URL 
* If no refresh token is obtained when running this file, revoke access to your app 
* using link: https://accounts.google.com/b/0/IssuedAuthSubTokens and run the script again. 
* This script requires PHP 5.4 or later 
* PHP Version 5.4 
*/ 

namespace League\OAuth2\Client\Provider; //when i remove this line, than page load without 500, but with errors. 

require 'vendor/autoload.php'; 

use League\OAuth2\Client\Provider\Exception\IdentityProviderException; 
use League\OAuth2\Client\Token\AccessToken; 
use League\OAuth2\Client\Tool\BearerAuthorizationTrait; 
use Psr\Http\Message\ResponseInterface; 

session_start(); 

//If this automatic URL doesn't work, set it yourself manually 
$redirectUri = 'https://www.secret.co/phpmailer/get_oauth_token.php'; 

//These details obtained are by setting up app in Google developer console. 
$clientId = 'secret.apps.googleusercontent.com'; 
$clientSecret = 'secret'; 

class Google extends AbstractProvider 
{ 
    use BearerAuthorizationTrait; 

    const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'id'; 

    /** 
    * @var string If set, this will be sent to google as the "access_type" parameter. 
    * @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline 
    */ 
    protected $accessType; 

    /** 
    * @var string If set, this will be sent to google as the "hd" parameter. 
    * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param 
    */ 
    protected $hostedDomain; 

    /** 
    * @var string If set, this will be sent to google as the "scope" parameter. 
    * @link https://developers.google.com/gmail/api/auth/scopes 
    */ 
    protected $scope; 

    public function getBaseAuthorizationUrl() 
    { 
     return 'https://accounts.google.com/o/oauth2/auth'; 
    } 

    public function getBaseAccessTokenUrl(array $params) 
    { 
     return 'https://accounts.google.com/o/oauth2/token'; 
    } 

    public function getResourceOwnerDetailsUrl(AccessToken $token) 
    { 
    return ' '; 
    } 

    protected function getAuthorizationParameters(array $options) 
    { 
    if (is_array($this->scope)) { 
      $separator = $this->getScopeSeparator(); 
      $this->scope = implode($separator, $this->scope); 
     } 

     $params = array_merge(
      parent::getAuthorizationParameters($options), 
      array_filter([ 
       'hd'   => $this->hostedDomain, 
       'access_type' => $this->accessType, 
     'scope'  => $this->scope, 
       // if the user is logged in with more than one account ask which one to use for the login! 
       'authuser' => '-1' 
      ]) 
     ); 
     return $params; 
    } 

    protected function getDefaultScopes() 
    { 
     return [ 
      'email', 
      'openid', 
      'profile', 
     ]; 
    } 

    protected function getScopeSeparator() 
    { 
     return ' '; 
    } 

    protected function checkResponse(ResponseInterface $response, $data) 
    { 
     if (!empty($data['error'])) { 
      $code = 0; 
      $error = $data['error']; 

      if (is_array($error)) { 
       $code = $error['code']; 
       $error = $error['message']; 
      } 

      throw new IdentityProviderException($error, $code, $data); 
     } 
    } 

    protected function createResourceOwner(array $response, AccessToken $token) 
    { 
     return new GoogleUser($response); 
    } 
} 


//Set Redirect URI in Developer Console as [https/http]://<yourdomain>/<folder>/get_oauth_token.php 

$provider = new Google(
    array(
     'clientId' => $clientId, 
     'clientSecret' => $clientSecret, 
     'redirectUri' => $redirectUri, 
     'scope' => array('https://mail.google.com/'), 
    'accessType' => 'offline' 
    ) 
); 

if (!isset($_GET['code'])) { 
    // If we don't have an authorization code then get one 
    $authUrl = $provider->getAuthorizationUrl(); 
    $_SESSION['oauth2state'] = $provider->getState(); 
    header('Location: ' . $authUrl); 
    exit; 
// Check given state against previously stored one to mitigate CSRF attack 
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { 
    unset($_SESSION['oauth2state']); 
    exit('Invalid state'); 
} else { 
    // Try to get an access token (using the authorization code grant) 
    $token = $provider->getAccessToken(
     'authorization_code', 
     array(
      'code' => $_GET['code'] 
     ) 
    ); 

    // Use this to get a new access token if the old one expires 
    echo 'Refresh Token: ' . $token->getRefreshToken(); 
} 
+0

그'namespace' 행을 삭제해야합니다. 그럴 필요가 없습니다. 또한 상태 변수의 값이 잘못되었습니다. 이 코드를 복사하여 붙여 넣은 것 같아서 읽지 않았습니다. 또한 파일 상단에서 세션을 시작하는 이유는 무엇입니까? 함수가 발생한 후에 만 ​​세션을 시작해야합니다. 주석은 도움이되지 않습니다. 코드는 코드가하는 것과 똑같은 것을 말합니다. 코드는 읽기가 훨씬 쉽습니다. – Rafael

+0

@Rafael 이것은 마지막 phpmailer의 phpmailer get_oauth_token.php 파일입니다. 내 자격 증명을 붙여 넣기 만하면됩니다. – DocNet

+0

@Rafael 제거 할 때 다음을 얻습니다. 치명적인 오류 : require() : 'vendor/autoload.php'(include_path = '. :/usr/share/php :/usr/share/pear ') /home/xx/zzazfhvsnt/public_html/phpmailer/get_oauth_token.php 20 행 – DocNet

답변

1

나는이 질문이 오래된 것을 알고 있지만, 나는 똑같은 문제를 안고있었습니다. 내가 한 모든

This helped me figure it out

composer require league/oauth2-google 
이 일부 다른 도움을 희망 작곡가를 통해 리그/OAuth2를-구글을 설치했다.