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)
Esempio n. 2
0
    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,
                         }))
Esempio n. 3
0
 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)
     }
Esempio n. 4
0
    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)
Esempio n. 5
0
    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
Esempio n. 6
0
    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)]
Esempio n. 7
0
    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)]
Esempio n. 8
0
 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)
     }