コード例 #1
0
    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