3

我正在测试使用Symfony 框架中的Stripe api进行支付。

目前,当我拨打合法电话付款时,Stripe 返回一个status 200.

当我使用其中一张测试卡(或只是一张合成的卡)强制 Stripe 返回错误时,问题就开始了,例如卡已过期,并引发异常 ( Stripe_CardError)。来自 api 的响应代码是,402但即使我为该异常添加了一个 catch 块,Symfony 也会抛出一个500 internal server error.

以下是部分代码:

require_once('../vendor/stripe/stripe-php/lib/Stripe/Stripe.php');

            try{           
                \Stripe::setApiKey($this->container->getParameter('stripe_api_key'));
                $charge = \Stripe_Charge::create(array( 
                    "amount" => 1599,               
                    "currency" => "usd",            
                    "description" => "This is a test payment from post data",
                    "card" => array(                
                        "number" => $data['cardNumber'],
                        "exp_month" => $data['expMonth'],
                        "exp_year" => $data['expYear']  
                    )));   

            } catch(Stripe_CardError $e) {  

              Do error checking stuff here...

            }catch (Exception $e) {         
                print_r($e->getMessage());      
            } catch (ErrorException $e) {   
                print_r($e->getMessage());      
            }

就像我说的那样,这段代码可以正常工作,直到抛出异常,但是当出现异常时,我似乎无法捕捉到它并对其采取行动。

在 Symfony 调试屏幕中显示从 api 返回正确的错误消息,但它没有正确的代码(应该是402):

Your card was declined.
500 Internal Server Error - Stripe_CardError

我觉得这是一个 Symfony 配置问题,但许多搜索都没有为我提供任何解决方案。有任何想法吗?

Ps 我也在使用 FOSUserBundle。

4

1 回答 1

2

帕齐是这么说的。Stripe 错误类未在当前命名空间中注册,因此需要在其前面加上斜线,就像调用 create 方法时一样。我不敢相信我错过了它,但这就是你得到的剪切和粘贴!谢谢帕子。

于 2013-09-12T20:08:35.677 回答