diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html
index 57e1f02104..af4c0808c1 100644
--- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html
+++ b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/presale_head.html
@@ -5,5 +5,9 @@
{% compress js %}
{% endcompress %}
-
+{% if settings.endpoint == "test" and settings.publishable_test_key %}
+
+{% else %}
+
+{% endif %}
diff --git a/src/pretix/plugins/stripe/views.py b/src/pretix/plugins/stripe/views.py
index 141c8ab82f..3e2cfdb2bc 100644
--- a/src/pretix/plugins/stripe/views.py
+++ b/src/pretix/plugins/stripe/views.py
@@ -62,6 +62,7 @@ def oauth_return(request, *args, **kwargs):
}))
gs = GlobalSettingsObject()
+ testdata = {}
try:
resp = requests.post('https://connect.stripe.com/oauth/token', data={
@@ -82,8 +83,27 @@ def oauth_return(request, *args, **kwargs):
logger.exception('Failed to obtain OAuth token')
messages.error(request, _('An error occured during connecting with Stripe, please try again.'))
else:
+ if data['livemode']:
+ try:
+ testresp = requests.post('https://connect.stripe.com/oauth/token', data={
+ 'grant_type': 'refresh_token',
+ 'client_secret': gs.settings.payment_stripe_connect_test_secret_key,
+ 'refresh_token': data['refresh_token']
+ })
+ testdata = testresp.json()
+ except:
+ logger.exception('Failed to obtain OAuth token')
+ messages.error(request, _('An error occured during connecting with Stripe, please try again.'))
+ return redirect(reverse('control:event.settings.payment.provider', kwargs={
+ 'organizer': event.organizer.slug,
+ 'event': event.slug,
+ 'provider': 'stripe_settings'
+ }))
+
if 'error' in data:
messages.error(request, _('Stripe returned an error: {}').format(data['error_description']))
+ elif data['livemode'] and 'error' in testdata:
+ messages.error(request, _('Stripe returned an error: {}').format(testdata['error_description']))
else:
messages.success(request, _('Your Stripe account is now connected to pretix. You can change the settings in '
'detail below.'))
@@ -93,6 +113,11 @@ def oauth_return(request, *args, **kwargs):
event.settings.payment_stripe_connect_user_id = data['stripe_user_id']
event.settings.payment_stripe_connect_user_name = account['business_name']
+ if data['livemode']:
+ event.settings.payment_stripe_publishable_test_key = testdata['stripe_publishable_key']
+ else:
+ event.settings.payment_stripe_publishable_test_key = event.settings.payment_stripe_publishable_key
+
if request.session.get('payment_stripe_oauth_enable', False):
event.settings.payment_stripe__enabled = True
del request.session['payment_stripe_oauth_enable']
@@ -233,6 +258,7 @@ def source_webhook(event, event_json, source_id):
@require_POST
def oauth_disconnect(request, **kwargs):
del request.event.settings.payment_stripe_publishable_key
+ del request.event.settings.payment_stripe_publishable_test_key
del request.event.settings.payment_stripe_connect_access_token
del request.event.settings.payment_stripe_connect_refresh_token
del request.event.settings.payment_stripe_connect_user_id