【问题标题】:PayPal API: Exception: 401 when accessing https://api.sandbox.paypal.com/v1/oauth2/tokenPayPal API:异常:访问 https://api.sandbox.paypal.com/v1/oauth2/token 时出现 401
【发布时间】:2013-11-19 13:13:49
【问题描述】:

我得到的具体401 错误消息是:

"error":"invalid_client","error_description":"The client credentials are invalid"}"

PayPal 文档中的任何地方都没有列出此错误。我确定我正在使用测试凭据并使用正确的沙盒端点。当我尝试获取访问令牌时发生错误。

这是检索访问令牌的类:

private function _generateAccessToken($config) {

$base64ClientID = base64_encode($this->clientId . ":" . $this->clientSecret);                           
$headers = array(
    "User-Agent" => PPUserAgent::getValue(RestHandler::$sdkName, RestHandler::$sdkVersion), 
    "Authorization" => "Basic " . $base64ClientID,
    "Accept" => "*/*"
);      
$httpConfiguration = $this->getOAuthHttpConfiguration($config); 
$httpConfiguration->setHeaders($headers); 

$connection = PPConnectionManager::getInstance()->getConnection($httpConfiguration, $config);
//print_r($connection); die;
$res = $connection->execute("grant_type=client_credentials");       

$jsonResponse = json_decode($res, true);
if($jsonResponse == NULL || 
        !isset($jsonResponse["access_token"]) || !isset($jsonResponse["expires_in"]) ) {
    $this->accessToken = NULL;
    $this->tokenExpiresIn = NULL;   
    $this->logger->warning("Could not generate new Access token. Invalid response from server: " . $jsonResponse);      
} else {
    $this->accessToken = $jsonResponse["access_token"];
    $this->tokenExpiresIn = $jsonResponse["expires_in"];
}
$this->tokenCreateTime = time();
return $this->accessToken;
}

这是我在print_r 时拥有的$connection 变量(我删除了授权字符串):

PayPal\Core\PPHttpConnection Object( [httpConfig:PayPal\Core\PPHttpConnection:private] => PayPal\Core\PPHttpConfig Object ( [headers:PayPal\Core\PPHttpConfig:private] => Array ( [User-    Agent] => PayPalSDK/rest-sdk-php 0.6.0 (lang=PHP;v=5.4.21;bit=64;os=Linux_2.6.18-    308.16.1.el5;machine=x86_64;openssl=0.9.8e-fips-rhel5;curl=7.24.0) [Authorization] => Basic     REMOVED AUTHORIZATION STRING == [Accept] => */* ) [curlOptions:PayPal\Core\PPHttpConfig:private]     => Array ( [32] => 3 [78] => 30 [19913] => 1 [13] => 60 [10018] => PayPal-PHP-SDK [10023] => Array ( ) [81] => 2 [64] => 1 ) [url:PayPal\Core\PPHttpConfig:private] => https://api.sandbox.paypal.com/v1/oauth2/token [method:PayPal\Core\PPHttpConfig:private] => POST [retryCount:PayPal\Core\PPHttpConfig:private] => 1 ) [logger:PayPal\Core\PPHttpConnection:private] => PayPal\Core\PPLoggingManager Object ( [loggerName:PayPal\Core\PPLoggingManager:private] => PayPal\Core\PPHttpConnection [isLoggingEnabled:PayPal\Core\PPLoggingManager:private] => 1 [loggingLevel:PayPal\Core\PPLoggingManager:private] => 3 [loggerFile:PayPal\Core\PPLoggingManager:private] => PayPal.log ))

据我所知,我有正确的凭据、正确的端点,但不确定还有什么?

【问题讨论】:

  • 我也遇到了这个问题。我的沙盒帐户上周运行良好,但现在突然不行了。
  • 如果您找到解决方案,请告诉我,我也会这样做!
  • 好吧,废话,我的问题最终变成了一个 WordPress 问题:我试图访问实时 API,而不是沙盒 API。显然,这就是“凭证”的含义:API 设置,而不是我一开始怀疑的卡号。您也没有使用 WordPress,是吗?

标签: php paypal oauth-2.0


【解决方案1】:

如果 client_id/secret 未被识别(环境凭据错误或凭据无效),则会返回 /token 上的 HTTP401。

您能否通过 cURL 运行测试以排除任何环境/代码特定问题?

curl -v -u "client_id:secret" "https://api.sandbox.paypal.com/v1/oauth2/token" -X POST -d "response_type=token&grant_type=client_credentials"

(将上面的 client_id 和 secret 替换为您自己的)

【讨论】:

  • 我运行了 cUrl 测试,它确实返回了我的访问令牌。我从我的代码中复制并粘贴了我的凭据。我也使用了相同的沙盒端点。如果它不是我的凭据,也不是我的端点,那还能是什么?还有什么可以使我的凭据无效?
  • 问题最终出在 SDK 配置文件上。我认为 constants.php 文件可以访问整个 SDK 中的凭据。我也将凭据添加到了 sdkconfig。
  • 我也收到此错误。您是如何将凭据添加到 sdkconfig 的?我无法在我的项目中的任何地方找到此文件。
【解决方案2】:

确保支付 $config 模式为 Sandbox,并且 clientId 和 clientSecret 密钥同时为 Sandbox。

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2014-12-24
    • 2021-02-28
    • 2015-05-23
    • 2019-12-04
    • 2019-08-07
    • 2020-11-20
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多