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
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)
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
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}
def looker_host(self): if hasattr(settings, 'LOOKER_HOST'): return settings.LOOKER_HOST else: return 'looker.{}'.format( get_current_host(False) )
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'))
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
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}
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}
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
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
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)
def get_admin_url(self): domain = get_current_host() url = reverse('admin:initiatives_initiative_change', args=(self.id, )) link = '{}/{}'.format(domain, url) return link
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