diff --git a/documents/payment.md b/documents/payment.md index e1c0df8..4b1987e 100644 --- a/documents/payment.md +++ b/documents/payment.md @@ -863,6 +863,259 @@ Razorpay::Iin.fetch(tokenIin); } ``` ------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------- + +### Fetch a Payment (With Expanded EMI Details) + +```rb +Razorpay::Payment.expand_details("pay_XXXXXXXXXXXXXX",{"expand[]": "emi"}) +``` + +**Parameters:** + +| Name | Type | Description | +|-------------|---------|------------------------------------------------------------------| +| paymentId* | integer | Unique identifier of the payment | +| expand[] | string | Use to expand the `emi` details when the payment method is emi. | + +**Response:**
+ +```json +{ + "id": "pay_DG4ZdRK8ZnXC3k", + "entity": "payment", + "amount": 200000, + "currency": "INR", + "status": "authorized", + "order_id": null, + "invoice_id": null, + "international": false, + "method": "emi", + "amount_refunded": 0, + "refund_status": null, + "captured": false, + "description": null, + "card_id": "card_DG4ZdUO3xABb20", + "bank": "ICIC", + "wallet": null, + "vpa": null, + "email": "gaurav@example.com", + "contact": "+919972000005", + "notes": [], + "fee": null, + "tax": null, + "error_code": null, + "error_description": null, + "error_source": null, + "error_step": null, + "error_reason": null, + "emi": { + "issuer": "ICIC", + "rate": 1300, + "duration": 6 + }, + "acquirer_data": { + "auth_code": "828553" + }, + "created_at": 1568026077 +} +``` +------------------------------------------------------------------------------------------------------- + +### Fetch a Payment (With Expanded Card Details) + +```rb +Razorpay::Payment.expand_details("pay_XXXXXXXXXXXXXX", {"expand[]": "card"}) +``` + +**Parameters:** + +| Name | Type | Description | +|-------------|---------|---------------------------------------------------------------------| +| paymentId* | integer | Unique identifier of the payment | +| expand[] | string | Use to expand the card details when the payment method is `card`. | + +**Response:**
+ +```json +{ + "id": "pay_H9oR0gLCaVlV6m", + "entity": "payment", + "amount": 100, + "currency": "INR", + "status": "failed", + "order_id": "order_H9o58N6qmLYQKC", + "invoice_id": null, + "terminal_id": "term_G5kJnYM9GhhLYT", + "international": false, + "method": "card", + "amount_refunded": 0, + "refund_status": null, + "captured": false, + "description": null, + "card_id": "card_H9oR0ocen1cmZq", + "card": { + "id": "card_H9oR0ocen1cmZq", + "entity": "card", + "name": "Gaurav", + "last4": "1213", + "network": "RuPay", + "type": "credit", + "issuer": "UTIB", + "international": false, + "emi": false, + "sub_type": "business" + }, + "bank": null, + "wallet": null, + "vpa": null, + "email": "gaurav.kumar@example.com", + "contact": "+919000090000", + "notes": { + "email": "gaurav.kumar@example.com", + "phone": "09000090000" + }, + "fee": null, + "tax": null, + "error_code": "BAD_REQUEST_ERROR", + "error_description": "Card issuer is invalid", + "error_source": "customer", + "error_step": "payment_authentication", + "error_reason": "incorrect_card_details", + "acquirer_data": { + "auth_code": null, + "authentication_reference_number": "100222021120200000000742753928" + }, + "created_at": 1620807547 +} +``` + +------------------------------------------------------------------------------------------------------- + +### Fetch a Payment (With Expanded Offers Details) + +```rb +Razorpay::Payment.expand_details("pay_XXXXXXXXXXXXXX", {"expand[]": "offers"}) +``` + +**Parameters:** + +| Name | Type | Description | +|-------------|---------|----------------------------------------------------------------| +| paymentId* | integer | Unique identifier of the payment | +| expand[] | string | Use to expand the offers applied to a payment. | + +**Response:**
+ +```json +{ + "id": "pay_G8VaL2Z68LRtDs", + "entity": "payment", + "amount": 900, + "currency": "INR", + "status": "captured", + "order_id": "order_G8VXfKDWDEOHHd", + "invoice_id": null, + "international": false, + "method": "netbanking", + "amount_refunded": 0, + "refund_status": null, + "captured": true, + "offers": { + "entity": "collection", + "count": 1, + "items": [ + { + "id": "offer_G8VXOp0qNuEXzh" + } + ] + }, + "description": "Purchase Shoes", + "card_id": null, + "bank": "KKBK", + "wallet": null, + "vpa": null, + "email": "gaurav.kumar@example.com", + "contact": "+919000090000", + "customer_id": "cust_DitrYCFtCIokBO", + "notes": [], + "fee": 22, + "tax": 4, + "error_code": null, + "error_description": null, + "error_source": null, + "error_step": null, + "error_reason": null, + "acquirer_data": { + "bank_transaction_id": "0125836177", + "authentication_reference_number": "100222021120200000000742753928" + }, + "created_at": 1606985740 +} +``` + +------------------------------------------------------------------------------------------------------- + +### Fetch a Payment (With Expanded UPI Details) + +```rb +Razorpay::Payment.expand_details("pay_XXXXXXXXXXXXXX", {"expand[]": "upi"}) +``` + +**Parameters:** + +| Name | Type | Description | +|-------------|---------|---------------------------------------------------------------| +| paymentId* | integer | Unique identifier of the payment | +| expand[] | string | Use to expand the UPI details when the payment method is upi. | + +**Response:**
+ +```json +{ + "id": "pay_DG4ZdRK8ZnXC3k", + "entity": "payment", + "amount": 100, + "currency": "INR", + "status": "captured", + "order_id": "order_GjCr5oKh4AVC51", + "invoice_id": null, + "international": false, + "method": "upi", + "amount_refunded": 0, + "refund_status": null, + "captured": true, + "description": "Payment for Adidas shoes", + "card_id": null, + "bank": null, + "wallet": null, + "vpa": "gaurav.kumar@upi", + "email": "gaurav.kumar@example.com", + "contact": "9000090000", + "customer_id": "cust_K6fNE0WJZWGqtN", + "token_id": "token_KOdY$DBYQOv08n", + "notes": [], + "fee": 1, + "tax": 0, + "error_code": null, + "error_description": null, + "error_source": null, + "error_step": null, + "error_reason": null, + "acquirer_data": { + "rrn": "303107535132" + }, + "created_at": 1605871409, + "upi": { + "payer_account_type": "credit_card", + "vpa": "gaurav.kumar@upi", + "flow": "in_app" // appears only for Turbo UPI Payments. + } +} +``` + +------------------------------------------------------------------------------------------------------- + **PN: * indicates mandatory fields**

diff --git a/lib/razorpay/payment.rb b/lib/razorpay/payment.rb index d39f5a9..6185e1c 100644 --- a/lib/razorpay/payment.rb +++ b/lib/razorpay/payment.rb @@ -112,5 +112,9 @@ def self.create_upi(data={}) def self.validate_vpa(data={}) request.post "validate/vpa" , data end + + def self.expand_details(id, options={}) + request.get "#{id}", options + end end end diff --git a/test/fixtures/fake_payment_expanded_details.json b/test/fixtures/fake_payment_expanded_details.json new file mode 100644 index 0000000..63229f3 --- /dev/null +++ b/test/fixtures/fake_payment_expanded_details.json @@ -0,0 +1,38 @@ +{ + "id": "fake_payment_id", + "entity": "payment", + "amount": 200000, + "currency": "INR", + "status": "authorized", + "order_id": null, + "invoice_id": null, + "international": false, + "method": "emi", + "amount_refunded": 0, + "refund_status": null, + "captured": false, + "description": null, + "card_id": "card_DG4ZdUO3xABb20", + "bank": "ICIC", + "wallet": null, + "vpa": null, + "email": "gaurav@example.com", + "contact": "+919972000005", + "notes": [], + "fee": null, + "tax": null, + "error_code": null, + "error_description": null, + "error_source": null, + "error_step": null, + "error_reason": null, + "emi": { + "issuer": "ICIC", + "rate": 1300, + "duration": 6 + }, + "acquirer_data": { + "auth_code": "828553" + }, + "created_at": 1568026077 + } diff --git a/test/fixtures/fake_payment_expanded_details_card.json b/test/fixtures/fake_payment_expanded_details_card.json new file mode 100644 index 0000000..9f46783 --- /dev/null +++ b/test/fixtures/fake_payment_expanded_details_card.json @@ -0,0 +1,50 @@ +{ + "id": "fake_payment_id", + "entity": "payment", + "amount": 100, + "currency": "INR", + "status": "failed", + "order_id": "order_H9o58N6qmLYQKC", + "invoice_id": null, + "terminal_id": "term_G5kJnYM9GhhLYT", + "international": false, + "method": "card", + "amount_refunded": 0, + "refund_status": null, + "captured": false, + "description": null, + "card_id": "card_H9oR0ocen1cmZq", + "card": { + "id": "card_H9oR0ocen1cmZq", + "entity": "card", + "name": "Gaurav", + "last4": "1213", + "network": "RuPay", + "type": "credit", + "issuer": "UTIB", + "international": false, + "emi": false, + "sub_type": "business" + }, + "bank": null, + "wallet": null, + "vpa": null, + "email": "gaurav.kumar@example.com", + "contact": "+919000090000", + "notes": { + "email": "gaurav.kumar@example.com", + "phone": "09000090000" + }, + "fee": null, + "tax": null, + "error_code": "BAD_REQUEST_ERROR", + "error_description": "Card issuer is invalid", + "error_source": "customer", + "error_step": "payment_authentication", + "error_reason": "incorrect_card_details", + "acquirer_data": { + "auth_code": null, + "authentication_reference_number": "100222021120200000000742753928" + }, + "created_at": 1620807547 + } \ No newline at end of file diff --git a/test/fixtures/payment_error.json b/test/fixtures/payment_error.json new file mode 100644 index 0000000..ab33e9d --- /dev/null +++ b/test/fixtures/payment_error.json @@ -0,0 +1,10 @@ +{ + "error": { + "code": "BAD_REQUEST_ERROR", + "description": "The id provided does not exist", + "source": "business", + "step": "payment_initiation", + "reason": "input_validation_failed", + "metadata": {} + } +} \ No newline at end of file diff --git a/test/razorpay/test_payment.rb b/test/razorpay/test_payment.rb index a071f85..380c61d 100644 --- a/test/razorpay/test_payment.rb +++ b/test/razorpay/test_payment.rb @@ -298,6 +298,28 @@ def test_validate_vpa stub_post(%r{payments/validate/vpa$}, 'fake_validate_vpa',param_attr.to_json) payment = Razorpay::Payment.validate_vpa param_attr.to_json assert_equal param_attr[:vpa], payment.vpa - end + end + + def test_expand_details_emi + stub_get("#{BASE_URI}/v1/payments/#{@payment_id}/?expand[]=emi", 'fake_payment_expanded_details') + payment = Razorpay::Payment.expand_details @payment_id + assert_equal @payment_id, payment.id + end + + def test_expand_details_card + stub_get("#{BASE_URI}/v1/payments/#{@payment_id}/?expand[]=card", 'fake_payment_expanded_details') + payment = Razorpay::Payment.expand_details @payment_id + assert_equal @payment_id, payment.id + end + + def test_expand_details_failure + stub_get(%r{payments\/#{@payment_id}$}, 'payment_error') + assert_raises(Razorpay::Error) do + payment = Razorpay::Payment.expand_details(@payment_id) + if payment.error + raise Razorpay::Error.new, payment.error['code'] + end + end + end end end