La capture de Bande erreurs avec Try/Catch méthode PHP
Lors de mon test de BANDE dans un site web, j'ai intégré le code comme ceci:
try {
$charge = Stripe_Charge::create(array(
"amount" => $clientPriceStripe, //amount in cents
"currency" => "usd",
"customer" => $customer->id,
"description" => $description));
$success = 1;
$paymentProcessor="Credit card (www.stripe.com)";
}
catch (Stripe_InvalidRequestError $a) {
//Since it's a decline, Stripe_CardError will be caught
$error3 = $a->getMessage();
}
catch (Stripe_Error $e) {
//Since it's a decline, Stripe_CardError will be caught
$error2 = $e->getMessage();
$error = 1;
}
if ($success!=1)
{
$_SESSION['error3'] = $error3;
$_SESSION['error2'] = $error2;
header('Location: checkout.php');
exit();
}
Le problème est que, parfois, il y a une erreur avec la carte (pas piégé par la "capture" des arguments que j'ai là) et de les "essayer" d'échec et la page immédiatement les messages d'erreur à l'écran au lieu d'aller dans le "si" et la redirection de retour à checkout.php.
Comment dois-je structure mon erreur de manipulation, donc je reçois le message d'erreur et immédiatement de redirection checkout.php et l'affichage de l'erreur là?
Merci!
Erreur renvoyé:
Fatal error: Uncaught exception 'Stripe_CardError' with message 'Your card was declined.' in ............
/lib/Stripe/ApiRequestor.php on line 92
- Seulement cette solution m'a aidé.
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il est plus que ces exceptions (Stripe_InvalidRequestError et Stripe_Error) à attraper.
Le code ci-dessous est de Bande le site web de. Probablement, ces exceptions supplémentaires, que vous n'avez pas pensé, se produit et votre code ne fonctionne pas parfois.
EDIT:
Maintenant, vous pourrez attraper toutes les exceptions possibles et vous pouvez afficher les messages d'erreur que vous le souhaitez. Et aussi $error6 est pour indépendants des exceptions.
$paymentProcessor="Credit card (www.stripe.com)";
faire?Si vous utilisez la Bande de bibliothèques PHP et ils ont été des espaces (tels que lorsqu'ils sont installés par le Compositeur), vous pouvez prendre tous Bande exceptions:
Stripe\Error\Base
n'est pas assez.Stripe\Error\Base
, et la premièrecatch
bloc correspond à tous ces sous-classes. J'ai ajouté un deuxièmecatch
qui est plus robuste, et gère les cas où une Bande appel d'API ne retourne pas une Bande d'exception.} catch (\Stripe\Error\Base $e) {
Vous pouvez soin de changer si ce serait une erreur pour d'autres gens aussi.Base
de la résoudre pour la plupart des erreurs, et le reste de laException
classes deStripe
peut être utilisé pour la connexion à des questions spécifiques.Je suis peut être en retard à cette question, mais j'ai rencontré le même problème et a trouvé ça.
Vous avez juste besoin d'utiliser "Stripe_Error" de la classe.
Après avoir déclaré qu', j'ai été en mesure d'intercepter les erreurs avec succès.
C'est une mise à jour à une autre réponse, mais les docs ont changé très légèrement, donc j'ai eu du succès en utilisant la méthode suivante:
Vous pouvez trouver la source de ce dans la Bande de docs ici:
https://stripe.com/docs/api?lang=php#handling-errors
C'est de cette façon Bande intercepte les erreurs: La Documentation.
Ensuite, vous pouvez intercepter l'erreur en ajax, avec le code suivant:
Je pense que tous vous avez vraiment besoin de vérifier, c'est la classe d'erreur de base de Bande et l'exception, si ce n'est pas relié à la Bande. Voici comment je le fais.
getJsonBody()
etgetHttpStatus()
sont stripe fonctions et ne s'appliquent pas lors de la capture de l'exception.