def get(self, request, *args, **kwargs): payment_ref = self.request.GET.get('payment_ref') try: # check payment status payment_client = PaymentClient() payment = payment_client.get_payment(payment_ref) if not payment or payment['status'] != 'pending': # bail out if accessed without specifying a payment in pending state return clear_session_view(request) kwargs.update({ 'short_payment_ref': payment_ref[:8].upper(), 'prisoner_name': payment['recipient_name'], 'amount': decimal.Decimal(payment['amount']) / 100, 'email_sent': False, }) # check gov.uk payment status govuk_id = payment['processor_id'] self.success, kwargs = payment_client.check_govuk_payment_status( payment_ref, govuk_id, kwargs ) if not self.success: return redirect(self.build_view_url(DebitCardCheckView.url_name)) except OAuth2Error: logger.exception('Authentication error while processing %s' % payment_ref) except SlumberHttpBaseException as error: error_message = 'Error while processing %s' % payment_ref if hasattr(error, 'content'): error_message += '\nReceived: %s' % error.content logger.exception(error_message) except RequestsTimeout: logger.exception('GOV.UK Pay payment check timed out for %s' % payment_ref) except RequestException as error: error_message = 'GOV.UK Pay payment check failed for %s' % payment_ref if hasattr(error, 'response') and hasattr(error.response, 'content'): error_message += '\nReceived: %s' % error.response.content logger.exception(error_message) except GovUkPaymentStatusException: logger.exception('GOV.UK Pay payment status incomplete for %s' % payment_ref) response = super().get(request, *args, **kwargs) request.session.flush() return response