Razorpay API API in Java
Razorpay API API in Java
This guide shows you how to integrate the Razorpay API into your Java application. Indian payment gateway with UPI, cards, netbanking, and wallets.
Prerequisites
- Java installed on your system
- An Razorpay API API key (sign up at https://razorpay.com)
- Basic familiarity with HTTP APIs
Installation
<!-- Maven -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
Basic Usage
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
private static final String API_KEY = System.getenv().getOrDefault("API_KEY", "YOUR_API_KEY");
private static final String BASE_URL = "https://api.razorpay.com";
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "/v1/resources"))
.header("Authorization", "Bearer " + API_KEY)
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status: " + response.statusCode());
System.out.println(response.body());
}
}
Error Handling
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class Main {
private static final String API_KEY = System.getenv().getOrDefault("API_KEY", "YOUR_API_KEY");
public static String callApiWithRetry(String url, int maxRetries) throws Exception {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
for (int attempt = 0; attempt < maxRetries; attempt++) {
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + API_KEY)
.timeout(Duration.ofSeconds(30))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 429) {
System.out.println("Rate limited. Waiting...");
Thread.sleep(60000);
continue;
}
if (response.statusCode() >= 400) {
throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
}
return response.body();
} catch (Exception e) {
System.err.println("Attempt " + (attempt + 1) + " failed: " + e.getMessage());
if (attempt == maxRetries - 1) throw e;
Thread.sleep((long) Math.pow(2, attempt) * 1000);
}
}
throw new RuntimeException("Max retries exceeded");
}
public static void main(String[] args) throws Exception {
String result = callApiWithRetry("https://api.razorpay.com/v1/resources", 3);
System.out.println(result);
}
}
Advanced Usage
import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.Map;
public class RazorpayClient {
private final String apiKey;
private final String baseUrl;
private final HttpClient httpClient;
private final Gson gson = new Gson();
public RazorpayClient(String apiKey, String baseUrl) {
this.apiKey = apiKey;
this.baseUrl = baseUrl.replaceAll("/$", "");
this.httpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
}
public String listResources() throws Exception {
return request("GET", "/v1/resources", null);
}
public String createResource(Map<String, Object> data) throws Exception {
return request("POST", "/v1/resources", gson.toJson(data));
}
private String request(String method, String path, String body) throws Exception {
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + path))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.timeout(Duration.ofSeconds(30));
if (body != null) {
builder.method(method, HttpRequest.BodyPublishers.ofString(body));
} else {
builder.method(method, HttpRequest.BodyPublishers.noBody());
}
HttpResponse<String> response = httpClient.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) {
throw new RuntimeException("API Error: " + response.statusCode() + " - " + response.body());
}
return response.body();
}
public static void main(String[] args) throws Exception {
RazorpayClient client = new RazorpayClient(
System.getenv("API_KEY"), "https://api.razorpay.com"
);
System.out.println(client.listResources());
}
}
Best Practices
- Store your API key in an environment variable, never in source code
- Implement retry logic with exponential backoff for 429 and 5xx errors
- Set reasonable timeouts (10-30 seconds) for all API calls
- Log request IDs from response headers for debugging
- Cache responses where appropriate to reduce API calls