def execute_transaction(self, transaction, request): """ :param transaction: A Instamojo transaction in Initial or Pending state. :param transaction: The HTTP Request :return: True on success, False on failure. """ # customer_details = transaction.payment_method.archived_customer customer = transaction.payment_method.customer instamojo_request = dict( redirect_url=request.build_absolute_uri( get_payment_complete_url(transaction, request)), buyer_name=customer.first_name, webhook=request.build_absolute_uri( reverse('instamojo-webhook', kwargs=dict(token=_get_jwt_token(transaction))))) try: instamojo_response = self.instamojo_wrapper.payment_request_create( 'SpotDraft Subscription Charges', str(transaction.amount), **instamojo_request) except Exception as error: logger.error("Instamojo create request failed %r", error) transaction.fail(fail_reason=str(error)) transaction.save() return False return self._parse_result(transaction, instamojo_response)
def test_complete_payment_view_without_return_url(self): transaction = TransactionFactory.create(state=Transaction.States.Settled) response = self.client.get(get_payment_complete_url(transaction, None)) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(force_text(response.content), render_to_string('transactions/complete_payment.html', { 'expired': False, 'transaction': transaction, 'document': transaction.document, }))
def get_context_data(self): return { 'payment_method': self.transaction.payment_method, 'transaction': self.transaction, 'document': self.transaction.document, 'customer': self.transaction.customer, 'provider': self.transaction.provider, 'entries': list(self.transaction.document._entries), 'form': self.form, 'payment_complete_url': get_payment_complete_url(self.transaction, self.request) }
def test_complete_payment_view_with_return_url(self): transaction = TransactionFactory.create(state=Transaction.States.Settled) return_url = 'http://home.com' complete_url = "{}?return_url={}".format(get_payment_complete_url(transaction, None), return_url) expected_url = "{}?transaction_uuid={}".format(return_url, transaction.uuid) response = self.client.get(complete_url, follow=False) self.assertRedirects(response, expected_url, fetch_redirect_response=False)
def _build_form_body(self, transaction, request): form_body = { 'ORDER_REF': str(transaction.uuid), 'ORDER_DATE': datetime.now(pytz.UTC).strftime('%Y-%m-%d %H:%M:%S'), 'PRICES_CURRENCY': transaction.currency, 'CURRENCY': transaction.currency, 'PAY_METHOD': 'CCVISAMC', 'AUTOMODE': '1', 'BACK_REF': get_payment_complete_url(transaction, request), 'ORDER': self._get_order(transaction) } if self.triggered: form_body['LU_ENABLE_TOKEN'] = '1' return form_body
def test_get_payment_complete_url(self): transaction = TransactionFactory() expected_url = '/pay/token/complete?return_url=http://google.com' mocked_request = MagicMock(GET={'return_url': 'http://google.com'}, versioning_scheme=None) mocked_request.build_absolute_uri.return_value = '/pay/token/complete' with patch('silver.utils.payments._get_jwt_token') as mocked_token: mocked_token.return_value = 'token' self.assertEqual(get_payment_complete_url(transaction, mocked_request), expected_url) assert mocked_token.mock_calls == [call(transaction)]