PayPal PHP SDK 支付在 500 上崩溃
Posted
技术标签:
【中文标题】PayPal PHP SDK 支付在 500 上崩溃【英文标题】:PayPal PHP SDK Payment crash on 500 【发布时间】:2017-12-18 01:45:19 【问题描述】:bsd
您好,我正在使用 Paypal php SDK 连接 paypal。我使用的是共享主机帐户 - linux 系统。
我已经设置了所有东西,似乎没问题...但是当它到达 $payment->create
方法时,它会产生 500 错误。
我有什么遗漏吗?另外,如何检查 apiContext 是否连接正常?
require __DIR__ . '/sdk/autoload.php';
// requiring SDK uses
$api = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'...', // ClientID
'...' // ClientSecret
)
);
$api->setConfig([
'mode' => 'sandbox',
'http.ConnectionTimeOut' => 30,
'log.LogEnabled' => false,
'log.FileName' => '',
'log.LogLevel' => 'FINE',
'validation.level' => 'log'
]);
// setting up payer, details, amount, transaction, redirectUrls etc...
$payment->create($api); // crashes on a 500 error
我应该检查托管设置吗?如何调试 apiContext?
我没用过composer,有问题吗?
还没有找到解决这个问题的方法,任何帮助都会很棒
这是日志导出
这是日志输出 -
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.sandbox.paypal.com/v1/oauth2/token
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : DEBUG: Request Headers :
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : DEBUG: Request Data : grant_type=client_credentials
--------------------------------------------------------------------------------------------------------------------------------
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : INFO: Response Status : 0
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : DEBUG: Response Headers :
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : ERROR: Got Http response code 0 when accessing https://api.sandbox.paypal.com/v1/oauth2/token.
[24-07-2017 11:15:44] PayPal\Core\PayPalHttpConnection : DEBUG:
================================================================================================================================
【问题讨论】:
这里可以添加日志吗? 感谢评论,已添加日志 首先,您可以尝试从 CLI 运行它并检查结果吗?curl -v 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"
@MaxChernopolsky 我正在运行共享主机,没有 CLI
您的服务器是否安装了openssl
扩展?安装先决条件here
【参考方案1】:
有点老话题了,但是因为我偶然发现了这个,所以这就是我遇到问题的原因。
支付方式使用openssl_encrypt
加密数据。在基于 FreeBSD 的系统(包括 MacOS X Mojave + MacPorts)中使用 openssl_encrypt 时,在 PHP 7.3 中对 openssl_encrypt
的调用失败。
See discussion.
【讨论】:
【参考方案2】:我的项目中也出现了 500 错误。我的问题与 tls 问题有关,它必须是 1.2 才能满足 pci-dss。 https://github.com/paypal/TLS-update 是 PayPal 的官方声明。也许您的网络服务器也在 1.0 上运行。
【讨论】:
是否需要 https 或 ssl? tls ssl 有关系吗? ...我有一个简单的共享主机帐户。 是的。对于所有连接,您至少需要 http 1.1,在 https 上至少需要 tls 1.2。我认为 phpinfo 会转储您当前的版本。顺便说一句,我不使用 https,它正在工作。也许您的 Hoster 可以帮助您。否则你可以在本地测试它。 您好,我已经和我的共享主机谈过了,他们说这应该不是问题,您知道我可以调试整个过程的方法吗?像 apiContext 上的测试连接之类的? 请注意,在 google 上搜索“我是否必须有 SSL 才能使用 PayPal 进行销售”时也可以找到 - Paypal 需要 SSL 吗? “需要 SSL 证书来保护您的客户信息,因此如果您的网站不收集任何信息,并且仅使用 PayPal 作为支付网关,那么不,您不需要 SSL 证书,因为您的所有客户信息都在通过PayPal 网站,该网站已经...2010 年 9 月 15 日"【参考方案3】:试试这个:在文件PayPalHttpConfig.php
(位于Paypal/Core
)中更改
CURLOPT_SSLVERSION => 6,
到
CURLOPT_SSLVERSION => 1,
【讨论】:
【参考方案4】:考虑使用 HTTPS 代理,因此 Origin 标头是本地主机上的 http
【讨论】:
以上是关于PayPal PHP SDK 支付在 500 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章
使用 PayPal PHP SDK 在 PayPal Sandbox 上执行支付时,得到 Http 响应代码 400