php-いつTryがCatchになるのですか?
Stripeを使用して支払いを処理しようとするこのTry/Catchブロックがあります。 Charge :: createメソッドにエラーがあり、TRYブロックの残りのコードが実行されないことを確認したかったのですが。そうしないと、支払いが行われなかったとしても、私のDBが更新され、顧客にメールが送信されます。
誰かがTry/Catchの動作を明確にしてくれませんか?
try {
$charge = \Stripe\Charge::create(array(
"amount" => $charge_amount, // amount in cents, again
"currency" => CURRENCY,
"source" => $token,
"description" => $description,
"receipt_email" => $email,
"metadata" => $metadata)
);
//adjust inventory
foreach ($_SESSION['cart'] as $item => $quantity)
{
$db->query("UPDATE stock SET stock = stock - '$quantity', reserved = reserved + '$quantity' WHERE id = '$item'");
}
unset($_SESSION['cart']);
//update cart
$db->query("UPDATE cart SET paid = 1 WHERE id = '$cart_id'");
blah blah, lots of other stuff...
} catch(\Stripe\Error\Card $e) {
// The card has been declined
echo $e;
}
答え :
解決策:
はい、まさにその通りです。
(ほぼ)すべてのプログラミング言語でのtry ... catchブロックは、基本的にブロック内のコードを実行しようとしますが、エラー(具体的には例外)が発生すると停止し、CAUGHTとして処理されます。指示-catchブロックが正常に実行されたとすると、try ... catchブロックの終了後も実行が続行されます(catchステートメントの一部として実行を終了しない限り)。
答え :
解決策:
エラーがスローされると、Tryはcatchになります。これは、\ Stripe \ Charge :: Createメソッドが失敗した場合、すぐにキャッチブロックに移動し、DBの更新、顧客の電子メール、その他すべてをバイパスすることを意味します。
そうは言っても、顧客への請求と他の処理の間にコードをさらにチェックインしたいと思うかもしれません。少なくとも、$ Charge-> payed==trueであることを確認してください。もっと注意するために(ここではお金について話している)、ライブモードが真であること、通貨があなたの通貨(ドル?)であること、そして金額があなたが期待したものであることを確認してください。
詳細については、ストライプエラーの処理方法に関するLarryUllmanのサイトを確認してください。 http://www.larryullman.com/2013/01/30/handling-stripe-errors/
また:
http://www.larryullman.com/2013/01/09/writing-the-php-code-to-process-payments-with-stripe/
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。