def transfer_cancel(payment_id): payment = get_user_payment_or_abort( payment_id, 'banktransfer', valid_states=['new', 'inprogress', 'cancelled'], ) if payment.state == 'cancelled': logger.info('Payment %s has already been cancelled', payment.id) flash('Payment has already been cancelled') return redirect(url_for('tickets')) form = TransferCancelForm(request.form) if form.validate_on_submit(): if form.yes.data: logger.info('Cancelling bank transfer %s', payment.id) for t in payment.tickets.all(): t.expires = datetime.utcnow() payment.state = 'cancelled' db.session.commit() logging.info('Payment %s cancelled', payment.id) flash('Payment cancelled') return redirect(url_for('tickets')) return render_template('transfer-cancel.html', payment=payment, form=form)
def stripe_capture(payment_id): payment = get_user_payment_or_abort( payment_id, 'stripe', valid_states=['new'], ) if not app.config.get('STRIPE'): logger.warn('Unable to capture payment as Stripe is disabled') flash('Stripe is currently unavailable. Please try again later') return redirect(url_for('tickets')) form = StripeAuthorizeForm(request.form) if form.validate_on_submit(): try: logger.info("Stripe payment %s captured, token %s", payment.id, payment.token) payment.token = form.token.data payment.state = 'captured' db.session.commit() except Exception, e: logger.warn("Exception %r updating payment", e) flash('An error occurred with your payment, please try again') return redirect(url_for('stripe_tryagain', payment_id=payment.id)) return charge_stripe(payment)
def gocardless_cancel(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=[ 'new', 'cancelled' ], # once it's inprogress, there's potentially money moving around ) if payment.state == 'cancelled': logger.info('Payment %s has already been cancelled', payment.id) flash('Payment has already been cancelled') return redirect(url_for('tickets')) form = GoCardlessCancelForm(request.form) if form.validate_on_submit(): if form.yes.data: logger.info('Cancelling GoCardless payment %s', payment.id) for t in payment.tickets.all(): t.expires = datetime.utcnow() payment.state = 'cancelled' db.session.commit() logger.info('Payment %s cancelled', payment.id) flash('Payment cancelled') return redirect(url_for('tickets')) return render_template('gocardless-cancel.html', payment=payment, form=form)
def gocardless_cancel(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=['new', 'cancelled'], # once it's inprogress, there's potentially money moving around ) if payment.state == 'cancelled': logger.info('Payment %s has already been cancelled', payment.id) flash('Payment has already been cancelled') return redirect(url_for('tickets')) form = GoCardlessCancelForm(request.form) if form.validate_on_submit(): if form.yes.data: logger.info('Cancelling GoCardless payment %s', payment.id) for t in payment.tickets.all(): t.expires = datetime.utcnow() payment.state = 'cancelled' db.session.commit() logger.info('Payment %s cancelled', payment.id) flash('Payment cancelled') return redirect(url_for('tickets')) return render_template('gocardless-cancel.html', payment=payment, form=form)
def transfer_waiting(payment_id): payment = get_user_payment_or_abort( payment_id, 'banktransfer', valid_states=['inprogress'], ) return render_template('transfer-waiting.html', payment=payment, days=app.config['EXPIRY_DAYS_TRANSFER'])
def gocardless_waiting(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=['new', 'inprogress', 'paid'], ) return render_template('gocardless-waiting.html', payment=payment, days=app.config['EXPIRY_DAYS_GOCARDLESS'])
def stripe_waiting(payment_id): payment = get_user_payment_or_abort( payment_id, 'stripe', valid_states=['charged', 'paid'], ) return render_template('stripe-waiting.html', payment=payment, days=app.config['EXPIRY_DAYS_STRIPE'])
def gocardless_tryagain(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=['new'], ) if not app.config.get('GOCARDLESS'): logger.error('Unable to retry payment %s as GoCardless is disabled', payment.id) flash('GoCardless is currently unavailable. Please try again later') return redirect(url_for('tickets')) logger.info("Trying payment %s again", payment.id) bill_url = payment.bill_url("Electromagnetic Field Tickets") logger.debug('Bill URL for GoCardless: %s', bill_url) return redirect(bill_url)
def gocardless_tryagain(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=['new', 'inprogress'], ) if not app.config.get('GOCARDLESS'): logger.error('Unable to retry payment %s as GoCardless is disabled', payment.id) flash('GoCardless is currently unavailable. Please try again later') return redirect(url_for('tickets')) logger.info("Trying payment %s again", payment.id) bill_url = payment.bill_url("Electromagnetic Field Tickets") logger.debug('Bill URL for GoCardless: %s', bill_url) return redirect(bill_url)
def gocardless_complete(payment_id): payment = get_user_payment_or_abort( payment_id, 'gocardless', valid_states=['new'], ) logger.info("Completing payment %s, gcid %s", payment.id, request.args.get('resource_id')) try: gocardless.client.confirm_resource(request.args) if request.args["resource_type"] != "bill": raise ValueError("GoCardless resource type %s, not bill" % request.args['resource_type']) gcid = request.args["resource_id"] except Exception, e: logger.error("Exception %r confirming payment", e) flash("An error occurred with your payment, please contact %s" % app.config['TICKETS_EMAIL'][1]) return redirect(url_for('tickets'))
def stripe_tryagain(payment_id): payment = get_user_payment_or_abort( payment_id, 'stripe', valid_states=['new', 'captured'], # once it's charged it's too late ) if not app.config.get('STRIPE'): logger.warn('Unable to retry payment as Stripe is disabled') flash('Stripe is currently unavailable. Please try again later') return redirect(url_for('tickets')) if payment.state == 'new': return redirect(url_for('stripe_capture', payment_id=payment.id)) form = StripeChargeAgainForm() if form.validate_on_submit(): logger.info("Trying to charge payment %s again", payment.id) return charge_stripe(payment) return render_template('stripe-tryagain.html', payment=payment, form=form)
def stripe_cancel(payment_id): payment = get_user_payment_or_abort( payment_id, 'stripe', valid_states=['new', 'captured'], ) form = StripeCancelForm(request.form) if form.validate_on_submit(): if form.yes.data: logger.info('Cancelling Stripe payment %s', payment.id) payment.cancel() db.session.commit() if payment.token: logger.warn('Stripe payment has outstanding token %s', payment.token) logger.info('Payment %s cancelled', payment.id) flash('Payment cancelled') return redirect(url_for('tickets')) return render_template('stripe-cancel.html', payment=payment, form=form)