Catching Stripe Errors With Try/Catch PHP Method
Answer :
If you're using the Stripe PHP libraries and they have been namespaced (such as when they're installed via Composer) you can catch all Stripe exceptions with:
<?php try { // Use a Stripe PHP library method that may throw an exception.... \Stripe\Customer::create($args); } catch (\Stripe\Error\Base $e) { // Code to do something with the $e exception object when an error occurs echo($e->getMessage()); } catch (Exception $e) { // Catch any other non-Stripe exceptions }
I think there is more than these exceptions (Stripe_InvalidRequestError and Stripe_Error) to catch.
The code below is from Stripe's web site. Probably, these additional exceptions, which you didn't consider, occurs and your code fails sometimes.
try { // Use Stripe's bindings... } catch(Stripe_CardError $e) { // Since it's a decline, Stripe_CardError will be caught $body = $e->getJsonBody(); $err = $body['error']; print('Status is:' . $e->getHttpStatus() . "\n"); print('Type is:' . $err['type'] . "\n"); print('Code is:' . $err['code'] . "\n"); // param is '' in this case print('Param is:' . $err['param'] . "\n"); print('Message is:' . $err['message'] . "\n"); } catch (Stripe_InvalidRequestError $e) { // Invalid parameters were supplied to Stripe's API } catch (Stripe_AuthenticationError $e) { // Authentication with Stripe's API failed // (maybe you changed API keys recently) } catch (Stripe_ApiConnectionError $e) { // Network communication with Stripe failed } catch (Stripe_Error $e) { // Display a very generic error to the user, and maybe send // yourself an email } catch (Exception $e) { // Something else happened, completely unrelated to Stripe }
EDIT:
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_CardError $e) { $error1 = $e->getMessage(); } catch (Stripe_InvalidRequestError $e) { // Invalid parameters were supplied to Stripe's API $error2 = $e->getMessage(); } catch (Stripe_AuthenticationError $e) { // Authentication with Stripe's API failed $error3 = $e->getMessage(); } catch (Stripe_ApiConnectionError $e) { // Network communication with Stripe failed $error4 = $e->getMessage(); } catch (Stripe_Error $e) { // Display a very generic error to the user, and maybe send // yourself an email $error5 = $e->getMessage(); } catch (Exception $e) { // Something else happened, completely unrelated to Stripe $error6 = $e->getMessage(); } if ($success!=1) { $_SESSION['error1'] = $error1; $_SESSION['error2'] = $error2; $_SESSION['error3'] = $error3; $_SESSION['error4'] = $error4; $_SESSION['error5'] = $error5; $_SESSION['error6'] = $error6; header('Location: checkout.php'); exit(); }
Now, you will catch all possible exceptions and you can display error message as you wish. And also $error6 is for unrelated exceptions.
I may be late to this question, but I ran into the same issue and found this.
You just need to use "Stripe_Error" class.
use Stripe_Error;
After declaring that, I was able to catch errors successfully.
Comments
Post a Comment