与Stripe通信时出现意外错误

时间:2013-12-11 07:32:46

标签: cakephp-2.0 stripe-payments

使用条纹结算我有一个表格,我提交信息并下订单后发生错误....

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'));
?>

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:9)

如果您没有ssl支持,您将在localhost上收到此错误。

在拨打电话之前,您可以使用以下内容来解决此问题。

\Stripe\Stripe::setVerifySslCerts(false);

答案 1 :(得分:3)

在测试/本地环境中,禁用SSL证书验证(\Stripe\Stripe::setVerifySslCerts(false); suggested by ykay)对我很有用,但是在生产中,仍然需要进行此验证。

所以我联系了Stripe支持人员,他们向我建议了一些步骤(如下所述),最终使我想到了真正的问题,即文件结构:

  • data / ca-certificates.crt Stripe.php getDefaultCABundlePath()dirname(__FILE__) . '/../data/ca-certificates.crt'引用,如果找不到此文件,则可能会收到一个ApiConnection错误,并且输出的属性为空,就像在this other question中发布的一样。

因此,解决方案要么只是将文件确切地放置在该路径上,要么将其移动到特定目录并在 Stripe.php 中更新其引用(例如,相同文件夹=> dirname(__FILE__) . '/ca-certificates.crt')。

如果正确引用了所有Stripe文件:验证TLSv1.2支持的步骤

  1. 在服务器中测试TLS :在通过条纹支持的this script确保TLSv1.2在服务器中可运行之后,产生以下输出:

      
        
    • TLS测试(默认):TLS 1.2
    •   
    • TLS测试(TLS_v1):TLS 1.2
    •   
    • TLS测试(TLS_v1_2):TLS 1.2
    •   
  2. 然后他们建议我检查兼容性问题

    https://github.com/stripe/stripe-php#ssl--tls-compatibility-issues

  3. 这导致我升级cURL和OpenSSL包中运行脚本 ,该脚本测试并使用Stripe的PHP集成(需要Stripe的init.php代码):

    https://support.stripe.com/questions/how-do-i-upgrade-my-stripe-integration-from-tls-1-0-to-tls-1-2#php

    产生了以下内容:

      

    不支持TLS 1.2。您将需要升级集成。

  4. 由于服务器正在运行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经常像这样工作)(混合前进/后退\斜杠)