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:由于身份验证凭据无效或缺少授权标头,身份验证失败