Subversion Repositories SmartDukaan

Rev

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;

@Component
public 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;

    @Autowired
    private RestClient restClient; // same utility you used for Knowlarity

    public 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;
    }

}