From 2896eb17664a5d6a54b49e7ee2d9166749a66035 Mon Sep 17 00:00:00 2001
From: Ankit Das <89454448+ankitdas13@users.noreply.github.com>
Date: Mon, 1 Apr 2024 17:10:28 +0530
Subject: [PATCH 1/4] update customer endpoint (#308)
---
documents/customers.md | 245 ++++++++++++++++++
src/main/java/com/razorpay/BankAccount.java | 10 +
.../java/com/razorpay/BankAccountClient.java | 13 +
src/main/java/com/razorpay/Constants.java | 7 +
.../java/com/razorpay/CustomerClient.java | 16 ++
.../java/com/razorpay/RazorpayClient.java | 2 +
.../java/com/razorpay/CustomerClientTest.java | 165 +++++++++++-
7 files changed, 457 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/razorpay/BankAccount.java
create mode 100644 src/main/java/com/razorpay/BankAccountClient.java
diff --git a/documents/customers.md b/documents/customers.md
index dfd8e665..360f8ee7 100644
--- a/documents/customers.md
+++ b/documents/customers.md
@@ -155,6 +155,251 @@ Customer customer = instance.customers.fetch(customerId);
-------------------------------------------------------------------------------------------------------
+
+### Add Bank Account of Customer
+
+```java
+String customerId = "cust_N5mywh91sXB69O"
+
+JSONObject customerRequest = new JSONObject();
+customerRequest.put("ifsc_code","UTIB0000194");
+customerRequest.put("account_number","916010082985661");
+customerRequest.put("beneficiary_name","Pratheek");
+customerRequest.put("beneficiary_address1","address 1");
+customerRequest.put("beneficiary_address2","address 2");
+customerRequest.put("beneficiary_address3","address 3");
+customerRequest.put("beneficiary_address4","address 4");
+customerRequest.put("beneficiary_email","random@email.com");
+customerRequest.put("beneficiary_mobile","8762489310");
+customerRequest.put("beneficiary_city","Bangalore");
+customerRequest.put("beneficiary_state","KA");
+customerRequest.put("beneficiary_country","IN");
+
+BankAccount bankaccount = instance.customers.addBankAccount(customerId, customerRequest)
+```
+
+**Parameters:**
+
+| Name | Type | Description |
+|----------------------|----------|---------------------------------------------------------------|
+| customerId* | string | Unique identifier of the customer. |
+| account_number | string | Customer's bank account number. |
+| beneficiary_name | string | The name of the beneficiary associated with the bank account. |
+| beneficiary_address1 | string | The virtual payment address. |
+| beneficiary_email | string | Email address of the beneficiary. |
+| beneficiary_mobile | integer | Mobile number of the beneficiary. |
+| beneficiary_city | string | The name of the city of the beneficiary. |
+| beneficiary_state | string | The state of the beneficiary. |
+| beneficiary_pin | interger | The pin code of the beneficiary's address. |
+| ifsc_code | string | The IFSC code of the bank branch associated with the account. |
+
+**Response:**
+```json
+{
+ "id" : "cust_1Aa00000000001",
+ "entity": "customer",
+ "name" : "Saurav Kumar",
+ "email" : "Saurav.kumar@example.com",
+ "contact" : "+919000000000",
+ "gstin":"29XAbbA4369J1PA",
+ "notes" : [],
+ "created_at ": 1234567890
+}
+```
+
+-------------------------------------------------------------------------------------------------------
+
+### Delete Bank Account of Customer
+
+```java
+String customerId = "cust_N5mywh91sXB69O"
+
+String bankAccountId = "ba_N6aM8uo64IzxHu"
+
+Customer customer = instance.customers.deleteBankAccount(customerId, bankaccountId)
+```
+
+**Parameters:**
+
+| Name | Type | Description |
+|---------------|-------------|---------------------------------------------|
+| customerId* | string | Unique identifier of the customer. |
+| bankAccountId | string | The bank_id that needs to be deleted. |
+
+**Response:**
+```json
+{
+ "id": "ba_Evg09Ll05SIPSD",
+ "ifsc": "ICIC0001207",
+ "bank_name": "ICICI Bank",
+ "name": "Test R4zorpay",
+ "account_number": "XXXXXXXXXXXXXXX0434",
+ "status": "deleted"
+}
+```
+
+-------------------------------------------------------------------------------------------------------
+
+### Eligibility Check API
+
+```java
+JSONObject customerRequest = new JSONObject();
+customerRequest.put("inquiry","affordability");
+customerRequest.put("amount", 500);
+customerRequest.put("currency","INR");
+JSONObject customer = new JSONObject();
+customer.put("id","elig_xxxxxxxxxxxxx")
+customer.put("contact","+919999999999")
+customer.put("ip","105.106.107.108")
+customer.put("referrer","https://merchansite.com/example/paybill")
+customer.put("user_agent","Mozilla/5.0")
+customerRequest.put("customer",customer);
+
+Customer customer = instance.customers.requestEligibilityCheck(customerRequest)
+```
+
+**Parameters:**
+
+| Name | Type | Description |
+|---------------|-------------|---------------------------------------------|
+| inquiry | string | List of methods or instruments on which eligibility check is required. |
+| amount* | string | The amount for which the order was created, in currency subunits. |
+| currency* | string | A three-letter ISO code for the currency in which you want to accept the payment. |
+| customer* | object | Customer details. [here](https://razorpay.com/docs/payments/payment-gateway/affordability/eligibility-check/#eligibility-check-api) |
+| instruments | object | Payment instruments on which an eligibility check is required. [here](https://razorpay.com/docs/payments/payment-gateway/affordability/eligibility-check/#eligibility-check-api) |
+
+
+**Response:**
+```json
+{
+ "amount": "500000",
+ "customer": {
+ "id": "KkBhM9EC1Y0HTm",
+ "contact": "+919999999999"
+ },
+ "instruments": [
+ {
+ "method": "emi",
+ "issuer": "HDFC",
+ "type": "debit",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "eligible"
+ }
+ },
+ {
+ "method": "paylater",
+ "provider": "getsimpl",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "eligible"
+ }
+ },
+ {
+ "method": "paylater",
+ "provider": "icic",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "eligible"
+ }
+ },
+ {
+ "method": "cardless_emi",
+ "provider": "walnut369",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "ineligible",
+ "error": {
+ "code": "GATEWAY_ERROR",
+ "description": "The customer has not been approved by the partner.",
+ "source": "business",
+ "step": "inquiry",
+ "reason": "user_not_approved"
+ }
+ }
+ },
+ {
+ "method": "cardless_emi",
+ "provider": "zestmoney",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "ineligible",
+ "error": {
+ "code": "GATEWAY_ERROR",
+ "description": "The customer has exhausted their credit limit.",
+ "source": "business",
+ "step": "inquiry",
+ "reason": "credit_limit_exhausted"
+ }
+ }
+ },
+ {
+ "method": "paylater",
+ "provider": "lazypay",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "ineligible",
+ "error": {
+ "code": "GATEWAY_ERROR",
+ "description": "The order amount is less than the minimum transaction amount.",
+ "source": "business",
+ "step": "inquiry",
+ "reason": "min_amt_required"
+ }
+ }
+ }
+ ]
+}
+```
+
+-------------------------------------------------------------------------------------------------------
+
+### Fetch Eligibility by id
+
+```java
+String eligibilityId = "elig_xxxxxxxxxxxxx"
+Customer customer = instance.customers.fetchEligibility(eligibilityId)
+```
+
+**Parameters:**
+
+| Name | Type | Description |
+|---------------|-------------|---------------------------------------------|
+| eligibilityId | string | The unique identifier of the eligibility request to be retrieved. |
+
+**Response:**
+```json
+{
+ "instruments": [
+ {
+ "method": "paylater",
+ "provider": "lazypay",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "eligible"
+ }
+ },
+ {
+ "method": "paylater",
+ "provider": "getsimpl",
+ "eligibility_req_id": "elig_xxxxxxxxxxxxx",
+ "eligibility": {
+ "status": "ineligible",
+ "error": {
+ "code": "GATEWAY_ERROR",
+ "description": "The customer has exhausted their credit limit",
+ "source": "gateway",
+ "step": "inquiry",
+ "reason": "credit_limit_exhausted"
+ }
+ }
+ }
+ ]
+}
+```
+
+-------------------------------------------------------------------------------------------------------
+
**PN: * indicates mandatory fields**
diff --git a/src/main/java/com/razorpay/BankAccount.java b/src/main/java/com/razorpay/BankAccount.java
new file mode 100644
index 00000000..47b4303b
--- /dev/null
+++ b/src/main/java/com/razorpay/BankAccount.java
@@ -0,0 +1,10 @@
+package com.razorpay;
+
+import org.json.JSONObject;
+
+public class BankAccount extends Entity {
+
+ public BankAccount(JSONObject jsonObject) {
+ super(jsonObject);
+ }
+}
diff --git a/src/main/java/com/razorpay/BankAccountClient.java b/src/main/java/com/razorpay/BankAccountClient.java
new file mode 100644
index 00000000..0663714f
--- /dev/null
+++ b/src/main/java/com/razorpay/BankAccountClient.java
@@ -0,0 +1,13 @@
+package com.razorpay;
+
+import java.util.List;
+
+import org.json.JSONObject;
+
+public class BankAccountClient extends ApiClient {
+
+ BankAccountClient(String auth) {
+ super(auth);
+ }
+
+}
diff --git a/src/main/java/com/razorpay/Constants.java b/src/main/java/com/razorpay/Constants.java
index 98452716..8a6a7fc2 100755
--- a/src/main/java/com/razorpay/Constants.java
+++ b/src/main/java/com/razorpay/Constants.java
@@ -170,4 +170,11 @@ public class Constants {
static final String TOKEN = "/token";
static final String REVOKE = "/revoke";
+ static final String ADD_BANK_ACCOUNT = "customers/%s/bank_account";
+
+ static final String DELETE_BANK_ACCOUNT = "customers/%s/bank_account/%s";
+
+ static final String ELIGIBILITY = "customers/eligibility";
+
+ static final String ELIGIBILITY_FETCH = "customers/eligibility/%s";
}
diff --git a/src/main/java/com/razorpay/CustomerClient.java b/src/main/java/com/razorpay/CustomerClient.java
index aef1da36..6bbe079d 100644
--- a/src/main/java/com/razorpay/CustomerClient.java
+++ b/src/main/java/com/razorpay/CustomerClient.java
@@ -50,4 +50,20 @@ public Token fetchToken(String id, String tokenId) throws RazorpayException {
public Customer deleteToken(String id, String tokenId) throws RazorpayException {
return delete(Constants.VERSION, String.format(Constants.TOKEN_DELETE, id, tokenId), null);
}
+
+ public BankAccount addBankAccount(String id, JSONObject request) throws RazorpayException {
+ return post(Constants.VERSION, String.format(Constants.ADD_BANK_ACCOUNT, id), request);
+ }
+
+ public Customer deleteBankAccount(String id, String bankId) throws RazorpayException {
+ return delete(Constants.VERSION, String.format(Constants.DELETE_BANK_ACCOUNT, id, bankId), null);
+ }
+
+ public Customer requestEligibilityCheck(JSONObject request) throws RazorpayException {
+ return post(Constants.VERSION, Constants.ELIGIBILITY, request);
+ }
+
+ public Customer fetchEligibility(String id) throws RazorpayException {
+ return get(Constants.VERSION, String.format(Constants.ELIGIBILITY_FETCH, id), null);
+ }
}
diff --git a/src/main/java/com/razorpay/RazorpayClient.java b/src/main/java/com/razorpay/RazorpayClient.java
index f009117f..9f5e33d7 100755
--- a/src/main/java/com/razorpay/RazorpayClient.java
+++ b/src/main/java/com/razorpay/RazorpayClient.java
@@ -29,6 +29,7 @@ public class RazorpayClient {
public ProductClient product;
public WebhookClient webhook;
public TncMap tncMap;
+ public BankAccountClient bankAccount;
public RazorpayClient(String key, String secret) throws RazorpayException {
this(key, secret, false);
}
@@ -66,6 +67,7 @@ private void initializeResources(String auth, Boolean enableLogging) throws Razo
stakeholder = new StakeholderClient(auth);
product = new ProductClient(auth);
webhook = new WebhookClient(auth);
+ bankAccount = new BankAccountClient(auth);
}
public RazorpayClient addHeaders(Map headers) {
diff --git a/src/test/java/com/razorpay/CustomerClientTest.java b/src/test/java/com/razorpay/CustomerClientTest.java
index b6ab38c7..c080268e 100644
--- a/src/test/java/com/razorpay/CustomerClientTest.java
+++ b/src/test/java/com/razorpay/CustomerClientTest.java
@@ -5,6 +5,7 @@
import org.mockito.InjectMocks;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.*;
@@ -14,7 +15,8 @@ public class CustomerClientTest extends BaseTest{
protected CustomerClient customerClient = new CustomerClient(TEST_SECRET_KEY);
private static final String CUSTOMER_ID = "cust_1Aa00000000004";
-
+ private static final String BANKACCOUNT_ID = "ba_LSZht1Cm7xFTwF";
+ private static final String ELIGIBILITY_ID = "elig_F1cxDoHWD4fkQt";
private static final String TOKEN_ID = "token_Hxe0skTXLeg9pF";
/**
@@ -295,4 +297,165 @@ public void testDeleteToken() throws IOException, RazorpayException {
assertTrue(false);
}
}
+
+ /**
+ * Add Bank Account
+ */
+ @Test
+ public void testaddBankAccount() throws RazorpayException{
+
+ JSONObject request = new JSONObject();
+ request.put("account_number","916010082985661");
+ request.put("beneficiary_name","Pratheek");
+ request.put("ifsc_code","UTIB0000194");
+ request.put("beneficiary_address1","address 1");
+ request.put("beneficiary_address2","address 2");
+ request.put("beneficiary_address3","address 3");
+ request.put("beneficiary_address4","address 4");
+ request.put("beneficiary_email","random@email.com");
+ request.put("beneficiary_mobile","8762489310");
+ request.put("beneficiary_city","Bangalore");
+ request.put("beneficiary_state","KA");
+ request.put("beneficiary_country","IN");
+
+ JSONObject mockedResponseJson = new JSONObject();
+ mockedResponseJson.put("id", "ba_LSZht1Cm7xFTwF");
+ mockedResponseJson.put("entity", "bank_account");
+ mockedResponseJson.put("ifsc", "ICIC0001207");
+ mockedResponseJson.put("bank_name", "ICICI Bank");
+ mockedResponseJson.put("name", "Gaurav Kumar");
+ ArrayList notes = new ArrayList();
+ mockedResponseJson.put("notes", notes);
+ mockedResponseJson.put("account_number", "XXXXXXXXXXXXXXX0434");
+
+ try {
+ mockResponseFromExternalClient(mockedResponseJson.toString());
+ mockResponseHTTPCodeFromExternalClient(200);
+ BankAccount customer = customerClient.addBankAccount(CUSTOMER_ID,request);
+ assertNotNull(customer);
+ assertEquals(BANKACCOUNT_ID,customer.get("id"));
+ String createRequest = getHost(String.format(Constants.ADD_BANK_ACCOUNT,CUSTOMER_ID));
+ verifySentRequest(true, request.toString(), createRequest);
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ /**
+ * Delete Bank Account
+ */
+ @Test
+ public void testDeleteBankAccount() throws RazorpayException {
+
+ JSONObject mockedResponseJson = new JSONObject();
+ mockedResponseJson.put("id", "ba_LSZht1Cm7xFTwF");
+ mockedResponseJson.put("entity", "customer");
+ mockedResponseJson.put("ifsc", "ICIC0001207");
+ mockedResponseJson.put("bank_name", "ICICI Bank");
+ mockedResponseJson.put("name", "Gaurav Kumar");
+ ArrayList notes = new ArrayList();
+ mockedResponseJson.put("notes", notes);
+ mockedResponseJson.put("account_number", "XXXXXXXXXXXXXXX0434");
+
+ try {
+ mockResponseFromExternalClient(mockedResponseJson.toString());
+ mockResponseHTTPCodeFromExternalClient(200);
+ Customer fetch = customerClient.deleteBankAccount(CUSTOMER_ID, BANKACCOUNT_ID);
+ assertNotNull(fetch);
+ assertEquals(BANKACCOUNT_ID,fetch.get("id"));
+ String fetchRequest = getHost(String.format(Constants.DELETE_BANK_ACCOUNT, CUSTOMER_ID, BANKACCOUNT_ID));
+ verifySentRequest(false, null, fetchRequest);
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ /**
+ * Eligibility Check
+ */
+ @Test
+ public void testEligibilityCheck() throws RazorpayException{
+
+ JSONObject request = new JSONObject();
+ request.put("inquiry","affordability");
+ request.put("amount", 500);
+ request.put("currency","INR");
+ JSONObject customerParam = new JSONObject();
+ customerParam.put("id","elig_xxxxxxxxxxxxx");
+ customerParam.put("contact","+919999999999");
+ customerParam.put("ip","105.106.107.108");
+ customerParam.put("referrer","https://merchansite.com/example/paybill");
+ customerParam.put("user_agent","Mozilla/5.0");
+ request.put("customer",customerParam);
+
+
+ JSONObject mockedResponseJson = new JSONObject();
+ mockedResponseJson.put("amount", 500000);
+ mockedResponseJson.put("entity", "customer");
+ JSONObject _customerParam = new JSONObject();
+ _customerParam.put("id","KkBhM9EC1Y0HTm");
+ _customerParam.put("contact","+918220722114");
+ mockedResponseJson.put("customer", _customerParam);
+ ArrayList instrument = new ArrayList();
+ JSONObject instrumentObj = new JSONObject();
+ instrumentObj.put("method","emi");
+ instrumentObj.put("issuer","HDFC");
+ instrumentObj.put("type","debit");
+ instrumentObj.put("eligibility_req_id","elig_KkCNLzlNeMYQyZ");
+ JSONObject eligibilityObj = new JSONObject();
+ eligibilityObj.put("status","eligible");
+ instrument.add(instrumentObj);
+ mockedResponseJson.put("instruments", instrument);
+
+ try {
+ mockResponseFromExternalClient(mockedResponseJson.toString());
+ mockResponseHTTPCodeFromExternalClient(200);
+ Customer customer = customerClient.requestEligibilityCheck(request);
+ assertNotNull(customer);
+ assertEquals(true, customer.has("amount"));
+ assertEquals(true, customer.has("customer"));
+ String createRequest = getHost(Constants.ELIGIBILITY);
+ verifySentRequest(true, request.toString(), createRequest);
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
+
+ /**
+ * Fetch Eligibility
+ */
+ @Test
+ public void testFetchEligibility() throws RazorpayException {
+
+ JSONObject mockedResponseJson = new JSONObject();
+ mockedResponseJson.put("amount", 500000);
+ mockedResponseJson.put("entity", "customer");
+ JSONObject _customerParam = new JSONObject();
+ _customerParam.put("id","KkBhM9EC1Y0HTm");
+ _customerParam.put("contact","+918220722114");
+ mockedResponseJson.put("customer", _customerParam);
+ ArrayList instrument = new ArrayList();
+ JSONObject instrumentObj = new JSONObject();
+ instrumentObj.put("method","emi");
+ instrumentObj.put("issuer","HDFC");
+ instrumentObj.put("type","debit");
+ instrumentObj.put("eligibility_req_id","elig_KkCNLzlNeMYQyZ");
+ JSONObject eligibilityObj = new JSONObject();
+ eligibilityObj.put("status","eligible");
+ instrument.add(instrumentObj);
+ mockedResponseJson.put("instruments", instrument);
+
+ try {
+ mockResponseFromExternalClient(mockedResponseJson.toString());
+ mockResponseHTTPCodeFromExternalClient(200);
+ Customer fetch = customerClient.fetchEligibility(ELIGIBILITY_ID);
+ assertNotNull(fetch);
+ assertEquals(true, fetch.has("amount"));
+ assertEquals(true, fetch.has("customer"));
+ String fetchRequest = getHost(String.format(Constants.ELIGIBILITY_FETCH, ELIGIBILITY_ID));
+ verifySentRequest(false, null, fetchRequest);
+ } catch (IOException e) {
+ assertTrue(false);
+ }
+ }
}
\ No newline at end of file
From e74c3cac5693e8e9a149ad7f2e241f85b8b44043 Mon Sep 17 00:00:00 2001
From: Ankit Das <89454448+ankitdas13@users.noreply.github.com>
Date: Mon, 1 Apr 2024 17:32:01 +0530
Subject: [PATCH 2/4] added dispute endpoint (#309)
---
documents/dispute.md | 242 ++++++++++++++++
src/main/java/com/razorpay/Constants.java | 8 +-
src/main/java/com/razorpay/Dispute.java | 11 +
src/main/java/com/razorpay/DisputeClient.java | 41 +++
.../java/com/razorpay/RazorpayClient.java | 3 +
.../java/com/razorpay/DisputeClientTest.java | 266 ++++++++++++++++++
6 files changed, 568 insertions(+), 3 deletions(-)
create mode 100644 documents/dispute.md
create mode 100644 src/main/java/com/razorpay/Dispute.java
create mode 100644 src/main/java/com/razorpay/DisputeClient.java
create mode 100644 src/test/java/com/razorpay/DisputeClientTest.java
diff --git a/documents/dispute.md b/documents/dispute.md
new file mode 100644
index 00000000..203fb7f1
--- /dev/null
+++ b/documents/dispute.md
@@ -0,0 +1,242 @@
+## Document
+
+### Fetch All Disputes
+
+```java
+Dispute dispute = instance.dispute.fetchAll();
+```
+
+**Response:**
+```json
+{
+ "entity": "collection",
+ "count": 1,
+ "items": [
+ {
+ "id": "disp_Esz7KAitoYM7PJ",
+ "entity": "dispute",
+ "payment_id": "pay_EsyWjHrfzb59eR",
+ "amount": 10000,
+ "currency": "INR",
+ "amount_deducted": 0,
+ "reason_code": "pre_arbitration",
+ "respond_by": 1590604200,
+ "status": "open",
+ "phase": "pre_arbitration",
+ "created_at": 1590059211,
+ "evidence": {
+ "amount": 10000,
+ "summary": null,
+ "shipping_proof": null,
+ "billing_proof": null,
+ "cancellation_proof": null,
+ "customer_communication": null,
+ "proof_of_service": null,
+ "explanation_letter": null,
+ "refund_confirmation": null,
+ "access_activity_log": null,
+ "refund_cancellation_policy": null,
+ "term_and_conditions": null,
+ "others": null,
+ "submitted_at": null
+ }
+ }
+ ]
+}
+```
+-------------------------------------------------------------------------------------------------------
+
+### Fetch a Dispute
+
+```java
+String disputeId = "disp_0000000000000";
+
+Dispute dispute = instance.dispute.fetchAll(disputeId);
+```
+
+**Parameters:**
+
+| Name | Type | Description |
+|-------|-----------|--------------------------------------------------|
+| disputeId* | string | The unique identifier of the dispute. |
+
+**Response:**
+```json
+{
+ "id": "disp_AHfqOvkldwsbqt",
+ "entity": "dispute",
+ "payment_id": "pay_EsyWjHrfzb59eR",
+ "amount": 10000,
+ "currency": "INR",
+ "amount_deducted": 0,
+ "reason_code": "pre_arbitration",
+ "respond_by": 1590604200,
+ "status": "open",
+ "phase": "pre_arbitration",
+ "created_at": 1590059211,
+ "evidence": {
+ "amount": 10000,
+ "summary": "goods delivered",
+ "shipping_proof": null,
+ "billing_proof": null,
+ "cancellation_proof": null,
+ "customer_communication": null,
+ "proof_of_service": null,
+ "explanation_letter": null,
+ "refund_confirmation": null,
+ "access_activity_log": null,
+ "refund_cancellation_policy": null,
+ "term_and_conditions": null,
+ "others": null,
+ "submitted_at": null
+ }
+}
+```
+-------------------------------------------------------------------------------------------------------
+### Contest a Dispute
+
+```java
+// Use this API sample code for draft
+
+String disputeId = "disp_0000000000000";
+
+JSONObject disputeRequest = new JSONObject();
+disputeRequest.put("amount",5000);
+disputeRequest.put("summary","goods delivered");
+List