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)
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 = {}