Paypal:客户端身份验证失败

Posted

技术标签:

【中文标题】Paypal:客户端身份验证失败【英文标题】:Paypal: Client Authentication Failed 【发布时间】:2019-06-27 22:14:15 【问题描述】:

试图让我的 paypal REST api 网站上线。它在沙盒模式下运行良好,传输经过验证。

当我为实时客户端 ID 和密码切换沙箱时,我收到错误

"error":"invalid_client","error_description":"Client Authentication failed"   

我检查并确保我的代码应该上线

$apiContext = new \PayPal\Rest\ApiContext(
 new \PayPal\Auth\OAuthTokenCredential(
  PP_CLIENT_ID ,     // ClientID
  PP_CLIENT_SECRET      // ClientSecret
 )
);

// setting mode to live
// https://github.com/paypal/PayPal-php-SDK/wiki/Going-Live

$apiContext->setConfig([
 'mode' => 'live',
]);

通过 wp_ajax 运行它

任何帮助将不胜感激!谢谢!

2/5/2019:似乎其他人也遇到了这个问题:https://github.com/paypal/PayPal-PHP-SDK/issues/435

我错过了关于 *** 的同一个问题……也没有答案。 PayPal App works perfectly as Sandbox, Client Authentication failed on Live: list of steps to check?

【问题讨论】:

双重和三重检查客户端 ID 和秘密,因为这似乎是 API 抱怨的内容。 感谢@MagnusEriksson,我从现场网站一遍又一遍地复制和粘贴,只是为了确保我没有错过字符串中的任何字符。 不熟悉 paypal API 但可能端点 URL 在两种情况下都不同?从看起来不像的代码来看,但这个 API 需要设置端点 URL 吗? 感谢@ron 的回复,这绝对是一个好点。但是我使用的是他们的 Paypal SDK,所以我认为应该正确设置端点。 【参考方案1】:

尝试改变 return new SandboxEnvironment($clientId, $clientSecret);

return new ProductionEnvironment($clientId, $clientSecret); 在您的 PayPalClient.php 类中

【讨论】:

您还应该解释为什么您的解决方案有助于解决现有问题 非常感谢。这就是问题所在,(即使在使用 Node 时) 原因是 SandboxEnvironment 类用于测试支付到您的沙盒帐户,而 ProductionEnvironment 类用于实时支付到您的贝宝帐户。您可以使用三元运算符在测试和实时模式之间轻松切换。 return PAYPAL_MODE == 'test' ? return new SandboxEnvironment($clientId, $clientSecret) : new ProductionEnvironment($clientId, $clientSecret);我希望这能回答你的问题。【参考方案2】:

https://developer.paypal.com/docs/api/overview/#api-requests

使用实时凭据时 网址应为https://api.paypal.com 反而 https://api.sandbox.paypal.com

参考 https://github.com/paypal/PayPal-PHP-SDK/issues/435#issuecomment-462133355

【讨论】:

生成访问令牌的 URL:https://api.paypal.com/v1/oauth2/token。此外,检查订阅的 URL:https://api-m.paypal.com/v1/billing/subscriptions/$subscriptionid【参考方案3】:

我在尝试生成 REST API 令牌时遇到了类似的问题,遵循沙盒 API 工作的 PayPal REST API 文档。生活应该是一样的。确保您获取的是 REST API 凭据,而不是获取“NVP/SOAP API 应用程序”机密。

去这里:https://developer.paypal.com/developer/applications/

在顶部选择 Sandbox 或 Live

点击REST API apps下的Create App,而不是NVP/SOAP API apps

这将为您提供客户端 ID 和机密,两者看起来都像一个大小写字母数字字符串,长度约为 40-50 个字符。

使用这些凭据,运行此 curl 命令以获取您的访问令牌,以便您可以调用 REST API,替换您的客户端 ID 和密码:

curl -v POST https://api.sandbox.paypal.com/v1/oauth2/token \
  -H "Accept: application/json" \
  -H "Accept-Language: en_US" \
  -u "CLIENT_ID:SECRET" \
  -d "grant_type=client_credentials"

这应该会返回您的令牌:

Sample response

    "scope": "https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions https://uri.paypal.com/services/applications/webhooks",
    "access_token": "A21AAFEpH4PsADK7qSS7pSRsgzfENtu-Q1ysgEDVDESseMHBYXVJYE8ovjj68elIDy8nF26AwPhfXTIeWAZHSLIsQkSYz9ifg",
    "token_type": "Bearer",
    "app_id": "APP-80W284485P519543T",
    "expires_in": 31668,
    "nonce": "2020-04-03T15:35:36ZaYZlGvEkV4yVSz8g6bAKFoGSEzuy3CQcz3ljhibkOHg"

您通常不会将这些东西集成到您的应用程序中,而是您只需执行一次,然后将 REST API 令牌嵌入到您的应用程序中。

我知道这有点重复显而易见的事情,但我希望这会有所帮助。

在此处查看更多说明:https://developer.paypal.com/docs/platforms/get-started/#step-1-get-api-credentials

【讨论】:

【参考方案4】:

所以我已经为此苦苦挣扎了一个小时。从 Sandbox 切换到 Live 会出现此错误。客户端 ID 和密码正确。我正在使用 sdk 中的 LiveEnvironment。

解决方案: 删除生产应用程序并重新创建它。突然间,一切正常。

【讨论】:

这里也一样。默认应用程序不起作用,添加了一个新应用程序并立即运行。【参考方案5】:

我知道这是一个旧帖子,但万一其他人遇到这个问题:开发者帐户没有能力实际处理卡片,所以尝试点击生产端点 (https://api-m.paypal.com/v1/) 将返回:

"error":"invalid_client","error_description":"Client Authentication failed"

【讨论】:

在这个答案中找不到任何东西

以上是关于Paypal:客户端身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

带有 paypal api 的客户端无效,使用 HTTPoison.post 的客户端身份验证失败!/3

贝宝客户端身份验证失败

PayPal PHP SDK:由于身份验证凭据无效或缺少授权标头,身份验证失败

Paypal NVP 身份验证失败

PayPal 自适应付款身份验证失败,输入是名称值对。在java中

身份验证请求失败 PayPal Android SDK 示例