Rev 34869 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.smartdukaan.cron.services.razorpayx;import com.spice.profitmandi.common.web.client.RestClient;import com.spice.profitmandi.service.integrations.kommuno.RecordingService;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.json.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.http.HttpHeaders;import org.springframework.stereotype.Component;import java.nio.charset.StandardCharsets;import java.util.Base64;import java.util.HashMap;import java.util.Map;@Componentpublic class RazorpayXClient {private static final Logger LOGGER = LogManager.getLogger(RazorpayXClient.class);@Value("${razorpay.x.account.keyId}")private String API_KEY;@Value("${razorpay.x.account.keySecret}")private String API_SECRET;@Value("${razorpay.api.url}")private String BASE_URL;@Value("${razorpay.x.account.number}")private String RAZORPAYX_ACCOUNT;@Autowiredprivate RestClient restClient; // same utility you used for Knowlaritypublic String createPayoutRaw(String fundAccountId, Double amount, String idempotencyKey, String currency) throws Exception {JSONObject payload = new JSONObject();payload.put("account_number", RAZORPAYX_ACCOUNT);payload.put("fund_account_id", fundAccountId);payload.put("amount", (int) (amount * 100));payload.put("currency", currency);payload.put("mode", "IMPS");payload.put("purpose", "payout");payload.put("queue_if_low_balance", true);try {Map<String, String> headers = getAuthHeaders();headers.put("X-Payout-Idempotency", idempotencyKey);LOGGER.info("Sending RazorpayX payout request: {}", payload);String url = BASE_URL + "/payouts";return restClient.post(url, payload.toString(), headers);} catch (Exception e) {LOGGER.error("Failed to create payout", e);throw e;}}public JSONObject fetchPayoutStatus(String payoutId) throws Exception {String url = BASE_URL + "/payouts/" + payoutId;String response = restClient.get(url,null, getAuthHeaders());return new JSONObject(response);}private Map<String, String> getAuthHeaders() {Map<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");String auth = API_KEY + ":" + API_SECRET;String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));headers.put("Authorization", "Basic " + encodedAuth);return headers;}}