forked from CGM_Public/pretix_original
PayPal: Improve handling of exceptions form paypalrestsdk
This commit is contained in:
@@ -5,6 +5,7 @@ from collections import OrderedDict
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import paypalrestsdk
|
import paypalrestsdk
|
||||||
|
import paypalrestsdk.exceptions
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
@@ -196,6 +197,7 @@ class Paypal(BasePaymentProvider):
|
|||||||
if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs:
|
if request.resolver_match and 'cart_namespace' in request.resolver_match.kwargs:
|
||||||
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
|
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
|
||||||
|
|
||||||
|
try:
|
||||||
if request.event.settings.payment_paypal_connect_user_id:
|
if request.event.settings.payment_paypal_connect_user_id:
|
||||||
try:
|
try:
|
||||||
tokeninfo = Tokeninfo.create_with_refresh_token(request.event.settings.payment_paypal_connect_refresh_token)
|
tokeninfo = Tokeninfo.create_with_refresh_token(request.event.settings.payment_paypal_connect_refresh_token)
|
||||||
@@ -258,6 +260,9 @@ class Paypal(BasePaymentProvider):
|
|||||||
})
|
})
|
||||||
request.session['payment_paypal_payment'] = None
|
request.session['payment_paypal_payment'] = None
|
||||||
return self._create_payment(request, payment)
|
return self._create_payment(request, payment)
|
||||||
|
except paypalrestsdk.exceptions.ConnectionError as e:
|
||||||
|
messages.error(request, _('We had trouble communicating with PayPal'))
|
||||||
|
logger.exception('Error on creating payment: ' + str(e))
|
||||||
|
|
||||||
def format_price(self, value):
|
def format_price(self, value):
|
||||||
return str(round_decimal(value, self.event.currency, {
|
return str(round_decimal(value, self.event.currency, {
|
||||||
@@ -292,7 +297,6 @@ class Paypal(BasePaymentProvider):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _create_payment(self, request, payment):
|
def _create_payment(self, request, payment):
|
||||||
try:
|
|
||||||
if payment.create():
|
if payment.create():
|
||||||
if payment.state not in ('created', 'approved', 'pending'):
|
if payment.state not in ('created', 'approved', 'pending'):
|
||||||
messages.error(request, _('We had trouble communicating with PayPal'))
|
messages.error(request, _('We had trouble communicating with PayPal'))
|
||||||
@@ -312,9 +316,6 @@ class Paypal(BasePaymentProvider):
|
|||||||
else:
|
else:
|
||||||
messages.error(request, _('We had trouble communicating with PayPal'))
|
messages.error(request, _('We had trouble communicating with PayPal'))
|
||||||
logger.error('Error on creating payment: ' + str(payment.error))
|
logger.error('Error on creating payment: ' + str(payment.error))
|
||||||
except Exception as e:
|
|
||||||
messages.error(request, _('We had trouble communicating with PayPal'))
|
|
||||||
logger.exception('Error on creating payment: ' + str(e))
|
|
||||||
|
|
||||||
def checkout_confirm_render(self, request) -> str:
|
def checkout_confirm_render(self, request) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -375,7 +376,7 @@ class Paypal(BasePaymentProvider):
|
|||||||
])
|
])
|
||||||
try:
|
try:
|
||||||
payment.execute({"payer_id": request.session.get('payment_paypal_payer')})
|
payment.execute({"payer_id": request.session.get('payment_paypal_payer')})
|
||||||
except Exception as e:
|
except paypalrestsdk.exceptions.ConnectionError as e:
|
||||||
messages.error(request, _('We had trouble communicating with PayPal'))
|
messages.error(request, _('We had trouble communicating with PayPal'))
|
||||||
logger.exception('Error on creating payment: ' + str(e))
|
logger.exception('Error on creating payment: ' + str(e))
|
||||||
|
|
||||||
@@ -511,6 +512,7 @@ class Paypal(BasePaymentProvider):
|
|||||||
def payment_prepare(self, request, payment_obj):
|
def payment_prepare(self, request, payment_obj):
|
||||||
self.init_api()
|
self.init_api()
|
||||||
|
|
||||||
|
try:
|
||||||
if request.event.settings.payment_paypal_connect_user_id:
|
if request.event.settings.payment_paypal_connect_user_id:
|
||||||
try:
|
try:
|
||||||
tokeninfo = Tokeninfo.create_with_refresh_token(request.event.settings.payment_paypal_connect_refresh_token)
|
tokeninfo = Tokeninfo.create_with_refresh_token(request.event.settings.payment_paypal_connect_refresh_token)
|
||||||
@@ -577,6 +579,9 @@ class Paypal(BasePaymentProvider):
|
|||||||
})
|
})
|
||||||
request.session['payment_paypal_payment'] = payment_obj.pk
|
request.session['payment_paypal_payment'] = payment_obj.pk
|
||||||
return self._create_payment(request, payment)
|
return self._create_payment(request, payment)
|
||||||
|
except paypalrestsdk.exceptions.ConnectionError as e:
|
||||||
|
messages.error(request, _('We had trouble communicating with PayPal'))
|
||||||
|
logger.exception('Error on creating payment: ' + str(e))
|
||||||
|
|
||||||
def shred_payment_info(self, obj):
|
def shred_payment_info(self, obj):
|
||||||
if obj.info:
|
if obj.info:
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import logging
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import paypalrestsdk
|
import paypalrestsdk
|
||||||
|
import paypalrestsdk.exceptions
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
@@ -55,7 +56,7 @@ def oauth_return(request, *args, **kwargs):
|
|||||||
try:
|
try:
|
||||||
tokeninfo = Tokeninfo.create(request.GET.get('code'))
|
tokeninfo = Tokeninfo.create(request.GET.get('code'))
|
||||||
userinfo = Tokeninfo.create_with_refresh_token(tokeninfo['refresh_token']).userinfo()
|
userinfo = Tokeninfo.create_with_refresh_token(tokeninfo['refresh_token']).userinfo()
|
||||||
except:
|
except paypalrestsdk.exceptions.ConnectionError:
|
||||||
logger.exception('Failed to obtain OAuth token')
|
logger.exception('Failed to obtain OAuth token')
|
||||||
messages.error(request, _('An error occurred during connecting with PayPal, please try again.'))
|
messages.error(request, _('An error occurred during connecting with PayPal, please try again.'))
|
||||||
else:
|
else:
|
||||||
@@ -170,7 +171,7 @@ def webhook(request, *args, **kwargs):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
sale = paypalrestsdk.Sale.find(saleid)
|
sale = paypalrestsdk.Sale.find(saleid)
|
||||||
except:
|
except paypalrestsdk.exceptions.ConnectionError:
|
||||||
logger.exception('PayPal error on webhook. Event data: %s' % str(event_json))
|
logger.exception('PayPal error on webhook. Event data: %s' % str(event_json))
|
||||||
return HttpResponse('Sale not found', status=500)
|
return HttpResponse('Sale not found', status=500)
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ def webhook(request, *args, **kwargs):
|
|||||||
if event_json['resource_type'] == 'refund':
|
if event_json['resource_type'] == 'refund':
|
||||||
try:
|
try:
|
||||||
refund = paypalrestsdk.Refund.find(event_json['resource']['id'])
|
refund = paypalrestsdk.Refund.find(event_json['resource']['id'])
|
||||||
except:
|
except paypalrestsdk.exceptions.ConnectionError:
|
||||||
logger.exception('PayPal error on webhook. Event data: %s' % str(event_json))
|
logger.exception('PayPal error on webhook. Event data: %s' % str(event_json))
|
||||||
return HttpResponse('Refund not found', status=500)
|
return HttpResponse('Refund not found', status=500)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user