56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
|
import stripe
|
||
|
|
||
|
def handle_stripe_error(f):
|
||
|
def handle_problems(*args, **kwargs):
|
||
|
response = {
|
||
|
'paid': False,
|
||
|
'response_object': None,
|
||
|
'error': None
|
||
|
}
|
||
|
|
||
|
common_message = "Currently it's not possible to make payments."
|
||
|
try:
|
||
|
response_object = f(*args, **kwargs)
|
||
|
response = {
|
||
|
'response_object': response_object,
|
||
|
'error': None
|
||
|
}
|
||
|
return response
|
||
|
except stripe.error.CardError as e:
|
||
|
# Since it's a decline, stripe.error.CardError will be caught
|
||
|
body = e.json_body
|
||
|
err = body['error']
|
||
|
response.update({'error': err['message']})
|
||
|
logging.error(str(e))
|
||
|
return response
|
||
|
except stripe.error.RateLimitError:
|
||
|
response.update(
|
||
|
{'error': "Too many requests made to the API too quickly"})
|
||
|
return response
|
||
|
except stripe.error.InvalidRequestError as e:
|
||
|
logging.error(str(e))
|
||
|
response.update({'error': "Invalid parameters"})
|
||
|
return response
|
||
|
except stripe.error.AuthenticationError as e:
|
||
|
# Authentication with Stripe's API failed
|
||
|
# (maybe you changed API keys recently)
|
||
|
logging.error(str(e))
|
||
|
response.update({'error': common_message})
|
||
|
return response
|
||
|
except stripe.error.APIConnectionError as e:
|
||
|
logging.error(str(e))
|
||
|
response.update({'error': common_message})
|
||
|
return response
|
||
|
except stripe.error.StripeError as e:
|
||
|
# maybe send email
|
||
|
logging.error(str(e))
|
||
|
response.update({'error': common_message})
|
||
|
return response
|
||
|
except Exception as e:
|
||
|
# maybe send email
|
||
|
logging.error(str(e))
|
||
|
response.update({'error': common_message})
|
||
|
return response
|
||
|
|
||
|
return handle_problems
|