Esempio n. 1
0
    def create_payment(self):
        """
        Create a new payment
        """

        if self.order_payment.amount.currency != XOF:
            raise PaymentException(
                "Can only do Vitepay payments in XOF, Communauté Financière Africaine (BCEAO)."
            )

        if self.merchant != 'vitepay':
            raise PaymentException(
                "Not a VitePay order-payment. Merchant is {0}".format(
                    self.merchant))

        payment = self.MODEL_CLASSES[0](order_payment=self.order_payment)
        # Amount on the payment should be in CFA * 100
        payment.amount_100 = int(self.order_payment.amount.amount * 100)
        payment.description = "Thanks for your donation!"
        payment.callback_url = self._get_callback_url()
        payment.return_url = '{0}/orders/{1}/success'.format(
            get_current_host(), self.order_payment.order.id)

        payment.decline_url = '{0}/orders/{1}/failed'.format(
            get_current_host(), self.order_payment.order.id)

        payment.cancel_url = '{0}/orders/{1}/failed'.format(
            get_current_host(), self.order_payment.order.id)

        payment.order_id = 'opc-{0}'.format(self.order_payment.id)
        payment.save()
        return payment
Esempio n. 2
0
 def get_redirect_url(self, *args, **kwargs):
     order_payment = get_object_or_404(OrderPayment,
                                       id=kwargs['order_payment_id'])
     service = PaymentService(order_payment)
     try:
         service.check_payment_status()
         return "{0}/orders/{1}/success".format(get_current_host(),
                                                order_payment.order.id)
     except PaymentException:
         return "{0}/orders/{1}/failed".format(get_current_host(),
                                               order_payment.order.id)
Esempio n. 3
0
 def create_payment(self):
     """
     Create a new payment
     """
     payment = self.MODEL_CLASSES[0](order_payment=self.order_payment)
     payment.product_id = self.credentials['product_id']
     payment.pay_item_id = self.credentials['item_id']
     # Amount on the payment should be in kobo/cents
     payment.amount = int(self.order_payment.amount.amount * 100)
     if self.order_payment.amount.currency != NGN:
         raise PaymentException(
             "Can only do Interswitch payments in Nigerian Naira (NGN).")
     payment.site_redirect_url = '{0}/payments_interswitch/payment_response/{1}'.format(
         get_current_host(), self.order_payment.id)
     tenant = connection.tenant
     payment.site_name = str(tenant.domain_url)
     try:
         payment.cust_id = self.order_payment.user.id
         payment.cust_name = unicode(self.order_payment.user.full_name)
     except AttributeError:
         # Anonymous order
         pass
     payment.txn_ref = '{0}-{1}'.format(tenant.name, self.order_payment.id)
     payment.save()
     return payment
Esempio n. 4
0
    def get_authorization_action(self):

        client = gateway.DocdataClient(self.credentials, self.live_mode)

        # Get the language that the user marked as his / her primary language
        # or fallback on the default LANGUAGE_CODE in settings

        try:
            client_language = self.order_payment.order.user.primary_language
        except AttributeError:
            client_language = properties.LANGUAGE_CODE

        if self.order_payment.payment_method == 'docdataDirectdebit':
            try:
                client.start_remote_payment(
                    order_key=self.payment.payment_cluster_key,
                    payment=self.payment,
                    payment_method='SEPA_DIRECT_DEBIT'
                )
                return {'type': 'success'}
            except DocdataPaymentException as i:
                raise PaymentException(i)
        else:
            return_url_base = get_current_host()
        try:
            url = client.get_payment_menu_url(
                order_key=self.payment.payment_cluster_key,
                credentials=self.credentials,
                order_id=self.order_payment.order_id,
                return_url=return_url_base,
                client_language=client_language,
            )
        except DocdataPaymentException as i:
            raise PaymentException(i)

        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True
        if self.payment.default_pm == 'paypal_express_checkout':
            default_act = True

        url = client.get_payment_menu_url(
            order_key=self.payment.payment_cluster_key,
            order_id=self.order_payment.order_id,
            credentials=self.credentials,
            return_url=return_url_base,
            client_language=client_language,
        )

        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True

        params = {
            'default_pm': self.payment.default_pm,
            'ideal_issuer_id': self.payment.ideal_issuer_id,
            'default_act': default_act
        }
        url += '&' + urlencode(params)
        return {'type': 'redirect', 'method': 'get', 'url': url}
Esempio n. 5
0
 def looker_host(self):
     if hasattr(settings, 'LOOKER_HOST'):
         return settings.LOOKER_HOST
     else:
         return 'looker.{}'.format(
             get_current_host(False)
         )
Esempio n. 6
0
    def _get_callback_url(self):
        host = get_current_host()
        if 'localhost' in host:
            # Use a mocked url that will always return the expected result
            return 'http://www.mocky.io/v2/5810a2873a0000a1056097c7'

        return urljoin(host, reverse('vitepay-status-update'))
Esempio n. 7
0
 def get_absolute_url(self):
     domain = get_current_host()
     language = get_current_language()
     link = u"{}/{}/initiatives/activities/details/{}/{}/{}".format(
         domain, language, self.__class__.__name__.lower(), self.pk,
         self.slug)
     return link
Esempio n. 8
0
    def get_authorization_action(self):

        client = gateway.DocdataClient(self.credentials, self.live_mode)

        # Get the language that the user marked as his / her primary language
        # or fallback on the default LANGUAGE_CODE in settings

        try:
            client_language = self.order_payment.order.user.primary_language
        except AttributeError:
            client_language = properties.LANGUAGE_CODE

        if self.order_payment.payment_method == 'docdataDirectdebit':
            try:
                client.start_remote_payment(
                    order_key=self.payment.payment_cluster_key,
                    payment=self.payment,
                    payment_method='SEPA_DIRECT_DEBIT')
                return {'type': 'success'}
            except DocdataPaymentException as i:
                raise PaymentException(i)
        else:
            return_url_base = get_current_host()
        try:
            url = client.get_payment_menu_url(
                order_key=self.payment.payment_cluster_key,
                credentials=self.credentials,
                order_id=self.order_payment.order_id,
                return_url=return_url_base,
                client_language=client_language,
            )
        except DocdataPaymentException as i:
            raise PaymentException(i)

        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True
        if self.payment.default_pm == 'paypal_express_checkout':
            default_act = True

        url = client.get_payment_menu_url(
            order_key=self.payment.payment_cluster_key,
            order_id=self.order_payment.order_id,
            credentials=self.credentials,
            return_url=return_url_base,
            client_language=client_language,
        )

        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True

        params = {
            'default_pm': self.payment.default_pm,
            'ideal_issuer_id': self.payment.ideal_issuer_id,
            'default_act': default_act
        }
        url += '&' + urlencode(params)
        return {'type': 'redirect', 'method': 'get', 'url': url}
Esempio n. 9
0
    def get_authorization_action(self):

        #FIXME: get rid of these testing
        testing_mode = settings.DOCDATA_SETTINGS['testing_mode']
        client = gateway.DocdataClient(testing_mode)
        client_language = get_language()

        if self.order_payment.payment_method == 'docdataDirectdebit':
            try:
                reply = client.start_remote_payment(
                    order_key=self.payment.payment_cluster_key,
                    payment=self.payment,
                    payment_method='SEPA_DIRECT_DEBIT'
                )
                return {'type': 'success'}
            except DocdataPaymentException as i:
                raise PaymentException(i)
        else:
            return_url_base = get_current_host()
        try:
            url = client.get_payment_menu_url(
                order_key=self.payment.payment_cluster_key,
                order_id=self.order_payment.order_id,
                return_url=return_url_base,
                client_language=client_language,
            )
        except DocdataPaymentException as i:
            raise PaymentException(i)

        integration_data = self.order_payment.integration_data
        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True
        if self.payment.default_pm == 'paypal_express_checkout':
            default_act = True

        url = client.get_payment_menu_url(
            order_key=self.payment.payment_cluster_key,
            order_id=self.order_payment.order_id,
            return_url=return_url_base,
            client_language=client_language,
        )

        default_act = False
        if self.payment.ideal_issuer_id:
            default_act = True

        params = {
             'default_pm': self.payment.default_pm,
             'ideal_issuer_id': self.payment.ideal_issuer_id,
             'default_act': default_act
        }
        url += '&' + urlencode(params)
        return {'type': 'redirect', 'method': 'get', 'url': url}
Esempio n. 10
0
    def create_payment(self):
        """
        Create a new payment
        """
        self.card_data = self.order_payment.card_data

        if 'mobile' not in self.card_data:
            raise PaymentException('Mobile is required')

        mobile = self.card_data['mobile']
        if mobile[0:2] == '07':
            mobile = '+256' + mobile[1:]

        payment = BeyonicPayment(order_payment=self.order_payment,
                                 mobile=mobile)
        payment.amount = int(self.order_payment.amount.amount)
        payment.currency = str(self.order_payment.amount.currency)

        payment.metadata = {'order_id': self.order_payment.id}

        if not self.credentials['live']:
            # Testing currency
            payment.currency = 'BXC'

        tenant = connection.tenant
        payment.description = '{0}-{1}'.format(tenant.name,
                                               self.order_payment.id)

        beyonic.api_key = self.credentials['merchant_key']
        callback_url = '{0}/payments_beyonic/update/'.format(
            get_current_host())
        response = beyonic.CollectionRequest.create(
            phonenumber=payment.mobile,
            amount=payment.amount,
            currency=payment.currency,
            description=payment.description,
            callback_url=callback_url,
            metadata=payment.metadata,
            send_instructions=True)

        payment.transaction_reference = response['id']
        payment.status = self.status_mapping[response['status']]
        payment.response = response
        payment.save()

        self.payment = payment
        # Check status right away so the payment gets processed
        self.check_payment_status()
        return payment
Esempio n. 11
0
    def create_payment(self):
        self.card_data = self.order_payment.card_data

        if not {'card_number', 'expiry_month', 'expiry_year', 'cvv'}.issubset(
                self.card_data):
            logger.warn('payment_tracer: {}, '
                        'event: payment.flutterwave.invalid_credentials,'
                        'card_number: {}, '
                        'expiry_month: {}, '
                        'expiry_year: {}, '
                        'cvv: {}'.format(
                            self.payment_tracer,
                            getattr(self.card_data, 'card_number', None),
                            getattr(self.card_data, 'expiry_month', None),
                            getattr(self.card_data, 'expiry_year', None),
                            getattr(self.card_data, 'cvv', None)))
            raise PaymentException(
                'Card number, expiry month/year and cvv is required')

        payment = FlutterwavePayment(order_payment=self.order_payment,
                                     card_number="**** **** **** " +
                                     self.card_data['card_number'][-4:])
        if 'pin' in self.card_data and self.card_data['pin']:
            payment.auth_model = 'PIN'
        else:
            payment.auth_model = 'VBVSECURECODE'
        payment.amount = str(self.order_payment.amount.amount)
        payment.currency = str(self.order_payment.amount.currency)
        payment.customer_id = str(self.order_payment.user or 1)
        payment.narration = "Donation {0}".format(self.order_payment.id)
        payment.response_url = '{0}/payments_flutterwave/payment_response/{1}'.format(
            get_current_host(), self.order_payment.id)
        tenant = connection.tenant
        payment.site_name = str(tenant.domain_url)
        try:
            payment.cust_id = self.order_payment.user.id
            payment.cust_name = unicode(self.order_payment.user.full_name)
        except AttributeError:
            # Anonymous order
            pass
        payment.txn_ref = '{0}-{1}'.format(tenant.name, self.order_payment.id)
        payment.save()
        self.payment_logger.log(
            payment, 'info', 'payment_tracer: {}, '
            'event: payment.flutterwave.create_payment.success'.format(
                self.payment_tracer))
        return payment
Esempio n. 12
0
    def get_redirect_url(self, *args, **kwargs):
        order_payment = get_object_or_404(OrderPayment, id=kwargs['order_payment_id'])
        service = PaymentService(order_payment)
        service.check_payment_status()

        return "{0}/orders/{1}/success".format(get_current_host(), order_payment.order.id)
Esempio n. 13
0
 def get_admin_url(self):
     domain = get_current_host()
     url = reverse('admin:initiatives_initiative_change', args=(self.id, ))
     link = '{}/{}'.format(domain, url)
     return link
Esempio n. 14
0
 def get_absolute_url(self):
     domain = get_current_host()
     language = get_current_language()
     link = '{}/{}/initiatives/details/{}/{}'.format(
         domain, language, self.id, self.slug)
     return link