Retry later on some StripeError depending of the code
The code lock_timeout and token_in_use must be retried as it is an unexpected behavior from Stripe service. Also some calls did not catch APIConnectionError for retry. issue8871 review270611002
This commit is contained in:
1 parent
522b6e6650
commit
44e0bd5e47
1 file changed
+23
-6
+23
-6
@@ -31,6 +31,8 @@ __all__ = ['Journal', 'Group', 'Payment', 'Account', 'Customer',
|
||||
'Checkout', 'CheckoutPage']
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
RETRY_CODES = {'lock_timeout', 'token_in_use'}
|
||||
|
||||
|
||||
class Journal(metaclass=PoolMeta):
|
||||
__name__ = 'account.payment.journal'
|
||||
@@ -587,6 +589,9 @@ class Payment(CheckoutMixin, metaclass=PoolMeta):
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
except stripe.error.StripeError as e:
|
||||
if e.code in RETRY_CODES:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
payment.stripe_error_message = str(e)
|
||||
if isinstance(e, stripe.error.CardError):
|
||||
payment.stripe_error_code = e.code
|
||||
@@ -688,6 +693,9 @@ class Payment(CheckoutMixin, metaclass=PoolMeta):
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
except stripe.error.StripeError as e:
|
||||
if e.code in RETRY_CODES:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
payment.stripe_error_message = str(e)
|
||||
payment.save()
|
||||
cls.fail([payment])
|
||||
@@ -1245,10 +1253,14 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
|
||||
description=customer.rec_name,
|
||||
email=customer.party.email,
|
||||
source=customer.stripe_token)
|
||||
except stripe.error.RateLimitError:
|
||||
logger.warning("Rate limit error")
|
||||
except (stripe.error.RateLimitError,
|
||||
stripe.error.APIConnectionError) as e:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
except stripe.error.StripeError as e:
|
||||
if e.code in RETRY_CODES:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
customer.stripe_error_message = str(e)
|
||||
if isinstance(e, stripe.error.CardError):
|
||||
customer.stripe_error_code = e.code
|
||||
@@ -1286,8 +1298,9 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
|
||||
api_key=customer.stripe_account.secret_key,
|
||||
id=customer.stripe_customer_id)
|
||||
cu.delete()
|
||||
except stripe.error.RateLimitError:
|
||||
logger.warning("Rate limit error")
|
||||
except (stripe.error.RateLimitError,
|
||||
stripe.error.APIConnectionError) as e:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
except Exception:
|
||||
logger.error(
|
||||
@@ -1426,10 +1439,14 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
|
||||
email=customer.party.email,
|
||||
payment_method=setup_intent.payment_method)
|
||||
customer.stripe_customer_id = cu.id
|
||||
except stripe.error.RateLimitError:
|
||||
logger.warning("Rate limit error")
|
||||
except (stripe.error.RateLimitError,
|
||||
stripe.error.APIConnectionError) as e:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
except stripe.error.StripeError as e:
|
||||
if e.code in RETRY_CODES:
|
||||
logger.warning(str(e))
|
||||
continue
|
||||
customer.stripe_error_message = str(e)
|
||||
except Exception:
|
||||
logger.error(
|
||||
|
||||
Reference in new issue
Block a user