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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?