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支付时http响应码500

使用 PayPal PHP SDK 在 PayPal Sandbox 上执行支付时,得到 Http 响应代码 400

使用 PayPal-PHP-SDK 进行第三方支付的 Paypal 沙盒测试

Thinkphp整合添加paypal sdk进行支付的测试

Thinkphp整合添加paypal sdk进行支付的测试

与 Paypal 的 PHP REST SDK 的支付协议