def create(cls, params, client, idempotency_key=None):
        """
        Create payment

        :param params: data passed to API
        :param idempotency_key:
        :return: PaymentResponse
        """
        instance = cls()
        path = cls.base_path

        if not idempotency_key:
            idempotency_key = uuid.uuid4()

        headers = {'Idempotence-Key': str(idempotency_key)}

        if isinstance(params, dict):
            params_object = PaymentRequest(params)
        elif isinstance(params, PaymentRequest):
            params_object = params
        else:
            raise TypeError('Invalid params value type')

        response = client.request(HttpVerb.POST, path, None, headers,
                                  params_object)
        return PaymentResponse(response)
    def capture(cls, payment_id, client, params=None, idempotency_key=None):
        """
        Capture payment

        :param payment_id:
        :param params: data passed to capture payment
        :param idempotency_key:
        :return: PaymentResponse
        """
        instance = cls()
        if not isinstance(payment_id, str) or not payment_id:
            raise ValueError('Invalid payment_id value')

        path = instance.base_path + '/' + payment_id + '/capture'

        if not idempotency_key:
            idempotency_key = uuid.uuid4()

        headers = {'Idempotence-Key': str(idempotency_key)}

        if isinstance(params, dict):
            params_object = CapturePaymentRequest(params)
        elif isinstance(params, CapturePaymentRequest):
            params_object = params
        else:
            params_object = None

        response = client.request(HttpVerb.POST, path, None, headers,
                                  params_object)
        return PaymentResponse(response)
 def object(self, value):
     if isinstance(value, dict) and value:
         self.__object = PaymentResponse(value)
     elif not value:
         raise ValueError('Parameter object is empty')
     else:
         raise TypeError('Invalid object type')
    def find_one(cls, payment_id, client):
        """
        Get information about payment

        :param payment_id:
        :return: PaymentResponse
        """
        instance = cls()
        if not isinstance(payment_id, str) or not payment_id:
            raise ValueError('Invalid payment_id value')

        path = instance.base_path + '/' + payment_id
        response = client.request(HttpVerb.GET, path)
        return PaymentResponse(response)
    def cancel(cls, payment_id, client, idempotency_key=None):
        """
        Cancel payment

        :param payment_id:
        :param idempotency_key:
        :return: PaymentResponse
        """
        instance = cls()
        if not isinstance(payment_id, str) or not payment_id:
            raise ValueError('Invalid payment_id value')

        if not idempotency_key:
            idempotency_key = uuid.uuid4()

        path = instance.base_path + '/' + payment_id + '/cancel'
        headers = {'Idempotence-Key': str(idempotency_key)}
        response = client.request(HttpVerb.POST, path, None, headers)
        return PaymentResponse(response)
示例#6
0
    def test_response_cast(self):
        response = PaymentResponse({
            "id": "21b23365-000f-500b-9000-070fa3554403",
            "amount": {
                "value": "1000.00",
                "currency": "RUB"
            },
            "confirmation": {
                "type": "redirect",
                "return_url": "https://test.test/test",
                "confirmation_url": "https://url",
                "enforce": False
            },
            "payment_method": {
                "type": "bank_card",
                "id": "21b23365-000f-500b-9000-070fa3554403",
                "saved": False
            },
            "status": "pending",
            "recipient": {
                "account_id": "67192",
                "gateway_id": "352780"
            },
            "refunded_amount": {
                "value": "1000.00",
                "currency": "RUB"
            },
            "receipt_registration": "pending",
            "created_at": "2017-11-30T15:11:33+00:00",
            "expires_at": "2017-11-30T15:11:33+00:00",
            "captured_at": "2017-11-30T15:11:33+00:00",
            "paid": False,
            "refundable": False,
            "test": False,
            "metadata": {
                "float_value": "123.32",
                "key": "data"
            },
            'cancellation_details': {
                'party': 'yandex_checkout',
                'reason': 'fraud_suspected'
            },
            'authorization_details': {
                'rrn': 'rrn',
                'auth_code': 'auth_code'
            }
        })

        self.assertIsInstance(response.amount, Amount)
        self.assertIsInstance(response.recipient, Recipient)
        self.assertIsInstance(response.payment_method, PaymentDataBankCard)
        self.assertIsInstance(response.confirmation, Confirmation)
        self.assertIsInstance(response.cancellation_details, CancellationDetails)
        self.assertIsInstance(response.authorization_details, AuthorizationDetails)
        self.assertEqual(response.metadata, {
            "float_value": "123.32",
            "key": "data"
        })
        self.assertFalse(response.paid)
        self.assertFalse(response.refundable)
        self.assertFalse(response.test)
        self.assertEqual(response.id, "21b23365-000f-500b-9000-070fa3554403")
        self.assertEqual(response.status, "pending")
        self.assertEqual(response.created_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.expires_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.captured_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.receipt_registration, "pending")
        self.assertEqual(response.refunded_amount, {
            "value": "1000.00",
            "currency": "RUB"
        })
 def items(self, value):
     if isinstance(value, list):
         self.__items = [PaymentResponse(payment) for payment in value]
     else:
         self.__items = value
    def test_response_cast(self):
        self.maxDiff = None
        response = PaymentResponse({
            "id": "21b23365-000f-500b-9000-070fa3554403",
            "amount": {
                "value": "1000.00",
                "currency": "RUB"
            },
            "description": "Заказ №72",
            "confirmation": {
                "type": "redirect",
                "return_url": "https://test.test/test",
                "confirmation_url": "https://url",
                "enforce": False
            },
            "payment_method": {
                "type": "bank_card",
                "id": "21b23365-000f-500b-9000-070fa3554403",
                "saved": False
            },
            "status": "pending",
            "recipient": {
                "account_id": "67192",
                "gateway_id": "352780"
            },
            "requestor": {
                "type": "merchant",
                "account_id": "67192",
            },
            "refunded_amount": {
                "value": "1000.00",
                "currency": "RUB"
            },
            "receipt_registration": "pending",
            "created_at": "2017-11-30T15:11:33+00:00",
            "expires_at": "2017-11-30T15:11:33+00:00",
            "captured_at": "2017-11-30T15:11:33+00:00",
            "paid": False,
            "refundable": False,
            "test": False,
            "metadata": {
                "float_value": "123.32",
                "key": "data"
            },
            "cancellation_details": {
                "party": "yandex_checkout",
                "reason": "fraud_suspected"
            },
            "authorization_details": {
                "rrn": "rrn",
                "auth_code": "auth_code"
            },
            "transfers": [
                {
                    "account_id": "79990000000",
                    "amount": {
                        "value": 100.01,
                        "currency": "RUB"
                    },
                    "status": "succeeded"
                }
            ],
            "income_amount": {
                "value": "990.00",
                "currency": "RUB"
            }
        })

        self.assertIsInstance(response.amount, Amount)
        self.assertIsInstance(response.recipient, Recipient)
        self.assertIsInstance(response.requestor, RequestorMerchant)
        self.assertIsInstance(response.payment_method, PaymentDataBankCard)
        self.assertIsInstance(response.confirmation, Confirmation)
        self.assertIsInstance(response.cancellation_details, CancellationDetails)
        self.assertIsInstance(response.authorization_details, AuthorizationDetails)
        self.assertIsInstance(response.transfers, list)
        self.assertIsInstance(response.income_amount, Amount)

        self.assertEqual(response.metadata, {
            "float_value": "123.32",
            "key": "data"
        })
        self.assertFalse(response.paid)
        self.assertFalse(response.refundable)
        self.assertFalse(response.test)
        self.assertEqual(response.id, "21b23365-000f-500b-9000-070fa3554403")
        self.assertEqual(response.status, "pending")
        self.assertEqual(response.amount.value, 1000.00)

        self.assertEqual(response.recipient.account_id, "67192")
        self.assertEqual(response.requestor.type, RequestorType.MERCHANT)
        self.assertEqual(response.requestor.account_id, "67192")

        self.assertEqual(response.description, "Заказ №72")
        self.assertEqual(response.created_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.expires_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.captured_at, "2017-11-30T15:11:33+00:00")
        self.assertEqual(response.receipt_registration, "pending")
        self.assertEqual(dict(response.refunded_amount), {
            "value": Decimal("1000.00"),
            "currency": "RUB"
        })
        self.assertEqual(response.refunded_amount.value, 1000.00)

        self.assertEqual(dict(response.income_amount), {
            "value": Decimal("990.00"),
            "currency": "RUB"
        })
        self.assertEqual(response.income_amount.value, 990.00)

        self.assertEqual(dict(response.transfers[0]), dict({
            "account_id": "79990000000",
            "amount": {
                "value": 100.01,
                "currency": Currency.RUB
            },
            "status": TransferStatus.SUCCEEDED
        }))

        response.transfers = None
        self.assertEqual(response.transfers, None)

        with self.assertRaises(TypeError):
            response.transfers = {}