Symfony フレームワークでStripe APIを使用して支払いを行うことをテストしています。
現在、正当な電話をかけると支払いが行われ、Stripe はstatus 200
.
問題は、テスト カードの 1 つ(または作成したもの) を使用して 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 を使用しています。