【问题标题】:Paypal: Client Authentication FailedPaypal:客户端身份验证失败
【发布时间】: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

我错过了关于 StackOverflow 的同一个问题……也没有答案。 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,所以我认为应该正确设置端点。

标签: php paypal paypal-rest-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】:

【讨论】:

  • 生成访问令牌的 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"}
    

    【讨论】:

    • 在这个答案中找不到任何东西
    猜你喜欢
    • 2021-10-28
    • 2019-01-08
    • 2016-02-22
    • 2015-04-27
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2016-09-29
    相关资源
    最近更新 更多