Reputation: 1693
I have a mobile application with an API developed with CodeIgniter, and this API performs payments by Stripe.
These payments are recursive, so once a month I charge my users. But some users cannot be charged (for an example if an user has insufficient funds on his card), and in this case Stripe throws an exception.
I'd like to be able to perform a try/catch in my controller. For now I have this code :
try {
$charge = \Stripe\Charge::create(array(
"amount" => xxx,
"currency" => "eur",
"customer" => xxx)
);
} catch (Exception $e) {
// If user has insufficient funds, perfom this code
}
I recently saw that the piece of code in the catch was never executed, and I saw that CI had its own error handling system, and I could see in my logs that errors from controllers run by cli were displayed on this view : application/views/errors/cli/error_php.php
. So how can I simply detect if my Stripe code returns an exception ?
Thanks in advance for any answer :)
Upvotes: 0
Views: 255
Reputation: 1137
Please refer Stripe's API document carefully.
They have described error handling in a very detailed manner. You can read about it here: https://stripe.com/docs/api/php#error_handling
try {
// Use Stripe's library to make requests...
} catch(\Stripe\Error\Card $e) {
// Since it's a decline, \Stripe\Error\Card 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\Error\RateLimit $e) {
// Too many requests made to the API too quickly
} catch (\Stripe\Error\InvalidRequest $e) {
// Invalid parameters were supplied to Stripe's API
} catch (\Stripe\Error\Authentication $e) {
// Authentication with Stripe's API failed
// (maybe you changed API keys recently)
} catch (\Stripe\Error\ApiConnection $e) {
// Network communication with Stripe failed
} catch (\Stripe\Error\Base $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
}
Upvotes: 1
Reputation: 334
Try using the global namespace for your exception like this:
catch (\Exception $e) //note the backslash
Upvotes: 1