我正在使用 paypal checkout(在 php 中)制作付款页面,当我处于沙盒模式时一切正常,但是当我上线时,我在付款后收到此错误...
Fatal error: Uncaught PayPal\Exception\PayPalConnectionException: Got Http response code 401 when accessing https://api.sandbox.paypal.com/v1/oauth2/token. in www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php:207
Stack trace: #0 www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Auth/OAuthTokenCredential.php(252): PayPal\Core\PayPalHttpConnection->execute('grant_type=clie...')
#1 www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Auth/OAuthTokenCredential.php(280): PayPal\Auth\OAuthTokenCredential->getToken(Array, 'qsdqsdqsdqsd', 'qdsqdsdqsdsqd', 'grant_type=clie...')
#2 www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Auth/OAuthTokenCredential.php(216): PayPal\Auth\OAuthTokenCredential->generateAccessToken(Array, NULL)
#3 www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Auth/OAuthTokenCredential.php(166): PayPal\Auth\OAuthTokenCredential->updateAccessToken(Array)
#4 www/src/package/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php on line 207
你能帮我吗? 谢谢
答案 0 :(得分:1)
如评论中所述,您似乎已将凭据更改为实时状态,而没有将环境从沙箱更改为实时环境,因此这些实时凭据正用于沙箱端点,这将不起作用。这两个环境是完全独立的。
此外,您似乎在使用已弃用的 v1/payments SDK,但不支持该 SDK。您应该将集成更改为当前的 v2/checkout/orders Checkout-PHP-SDK...
在您的服务器上创建两条路由,一条用于“创建订单”,另一条用于“捕获订单”,documented here。这些路由应该只返回 JSON 数据(没有 HTML 或文本)。后者应该(成功时)在返回之前将付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id
,PayPal 交易 ID)
将这两条路线与以下审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
答案 1 :(得分:0)
我找到了一个解决方案,也许不是更好,但它有效: 我编辑了这个文件: paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalConstants.php :
const REST_SANDBOX_ENDPOINT = "https://api.sandbox.paypal.com/";
const OPENID_REDIRECT_SANDBOX_URL = "https://www.sandbox.paypal.com";
const REST_LIVE_ENDPOINT = "https://api.paypal.com/";
const OPENID_REDIRECT_LIVE_URL = "https://www.paypal.com"; `
到这里
const REST_SANDBOX_ENDPOINT = "https://api.paypal.com/";
const OPENID_REDIRECT_SANDBOX_URL = "https://www.paypal.com";
const REST_LIVE_ENDPOINT = "https://api.paypal.com/";
const OPENID_REDIRECT_LIVE_URL = "https://www.paypal.com";