使用条纹结算我有一个表格,我提交信息并下订单后发生错误....
Unexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com. (Network error [errno 77]: error setting certificate verify locations: CAfile: C:\xampp\htdocs\PhpProject2\app\Lib\Stripe/../data/ca-certificates.crt CApath: none )
我的控制器操作代码
if(!empty($this->request->data)){
$email = $this->request->data['email'];
$credit_card = $this->request->data['card_number'];
$expire_month = $this->request->data['expiration_month'];
$expire_year = $this->request->data['expiration_year'];
$cvc = $this->request->data['cvc'];
//require_once('./lib/Stripe.php');
require_once "./../lib/Stripe.php";
Stripe::setApiKey("sk_test_KEY");
$token = Stripe_Token::create(array(
"card" => array(
"number" => $credit_card,
"exp_month" => $expire_month,
"exp_year" => $expire_year,
"cvc" => $cvc)));
和我的观点
<?php
echo $this->Form->create(false, array('action' => 'index'));
echo $this->Form->input('email', array('id' => 'email'));
echo $this->Form->input('card_number');
$options = array('1' => 'January', '2' => 'February', '3' => 'March', '4' => 'April',
'5' =>'May', '6' => 'June', '7' => 'July', '8' => 'August', '9' => 'September',
'10' => 'October',
'11' => 'November', '12' => 'December');
$start_year =array('1'=>2013,'2'=>2014,'3'=>2015,'4'=>2016,
'5'=>2017,'6'=>2018,'7'=>2019,'8'=>2020,'9'=>2021);
echo $this->Form->input('expiration_month', array('type' => 'select', 'options' => $options));
echo $this->Form->input('cvc');
echo $this->Form->end('place order', array('controller' => 'stripes', 'action' => 'index'));
?>
任何帮助将不胜感激
答案 0 :(得分:9)
如果您没有ssl支持,您将在localhost上收到此错误。
在拨打电话之前,您可以使用以下内容来解决此问题。
\Stripe\Stripe::setVerifySslCerts(false);
答案 1 :(得分:3)
在测试/本地环境中,禁用SSL证书验证(\Stripe\Stripe::setVerifySslCerts(false);
suggested by ykay)对我很有用,但是在生产中,仍然需要进行此验证。
所以我联系了Stripe支持人员,他们向我建议了一些步骤(如下所述),最终使我想到了真正的问题,即文件结构:
getDefaultCABundlePath()
由dirname(__FILE__) . '/../data/ca-certificates.crt'
引用,如果找不到此文件,则可能会收到一个ApiConnection
错误,并且输出的属性为空,就像在this other question中发布的一样。因此,解决方案要么只是将文件确切地放置在该路径上,要么将其移动到特定目录并在 Stripe.php 中更新其引用(例如,相同文件夹=> dirname(__FILE__) . '/ca-certificates.crt'
)。
在服务器中测试TLS :在通过条纹支持的this script确保TLSv1.2在服务器中可运行之后,产生以下输出:
- TLS测试(默认):TLS 1.2
- TLS测试(TLS_v1):TLS 1.2
- TLS测试(TLS_v1_2):TLS 1.2
然后他们建议我检查兼容性问题:
https://github.com/stripe/stripe-php#ssl--tls-compatibility-issues
这导致我在升级cURL和OpenSSL包中运行脚本 ,该脚本测试并使用Stripe的PHP集成(需要Stripe的init.php
代码):
产生了以下内容:
不支持TLS 1.2。您将需要升级集成。
由于服务器正在运行Ubuntu(cat /etc/*-release
),因此我 升级了OpenSSL版本 :
https://support.stripe.com/questions/how-do-i-upgrade-my-openssl-to-support-tls-1-2
使用以下命令:
sudo apt-get update && sudo apt-get install --only-upgrade openssl
sudo apt-get update && sudo apt-get install --only-upgrade libssl-dev
由于这些软件包是服务器中的最新版本,我决定再次查看Stripe的zip文件结构,并发现当我解压缩文件时,是 ca-certificates.crt的路径与 Stripe.php 中的问题(导致问题的原因)不同。
答案 2 :(得分:2)
不确定,但您的代码可能正在运行。问题是它们需要通过证书文件完成的加密通信,在使用库或路径是不可解析的时候(在库本身,SDK经常像这样工作)(混合前进/后退\斜杠)