Subversion Repositories SmartDukaan

Rev

Rev 34869 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
34860 ranu 1
package com.smartdukaan.cron.services.razorpayx;
2
 
3
import com.spice.profitmandi.common.web.client.RestClient;
4
import com.spice.profitmandi.service.integrations.kommuno.RecordingService;
5
import org.apache.logging.log4j.LogManager;
6
import org.apache.logging.log4j.Logger;
7
import org.json.JSONObject;
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.beans.factory.annotation.Value;
10
import org.springframework.http.HttpHeaders;
11
import org.springframework.stereotype.Component;
12
 
13
import java.nio.charset.StandardCharsets;
14
import java.util.Base64;
15
import java.util.HashMap;
16
import java.util.Map;
17
 
18
@Component
19
public class RazorpayXClient {
20
 
34872 ranu 21
    private static final Logger LOGGER = LogManager.getLogger(RazorpayXClient.class);
34860 ranu 22
 
23
    @Value("${razorpay.x.account.keyId}")
24
    private String API_KEY;
25
 
26
    @Value("${razorpay.x.account.keySecret}")
27
    private String API_SECRET;
28
 
29
    @Value("${razorpay.api.url}")
30
    private String BASE_URL;
31
 
32
    @Value("${razorpay.x.account.number}")
33
    private String RAZORPAYX_ACCOUNT;
34
 
35
    @Autowired
36
    private RestClient restClient; // same utility you used for Knowlarity
37
 
34872 ranu 38
    public String createPayoutRaw(String fundAccountId, Double amount, String idempotencyKey, String currency) throws Exception {
34860 ranu 39
        JSONObject payload = new JSONObject();
34872 ranu 40
        payload.put("account_number", RAZORPAYX_ACCOUNT);
41
        payload.put("fund_account_id", fundAccountId);
42
        payload.put("amount", (int) (amount * 100));
34860 ranu 43
        payload.put("currency", currency);
34872 ranu 44
        payload.put("mode", "IMPS");
34860 ranu 45
        payload.put("purpose", "payout");
46
        payload.put("queue_if_low_balance", true);
47
 
48
        try {
34868 ranu 49
            Map<String, String> headers = getAuthHeaders();
50
            headers.put("X-Payout-Idempotency", idempotencyKey);
34860 ranu 51
            LOGGER.info("Sending RazorpayX payout request: {}", payload);
52
            String url = BASE_URL + "/payouts";
34872 ranu 53
            return restClient.post(url, payload.toString(), headers);
34860 ranu 54
        } catch (Exception e) {
55
            LOGGER.error("Failed to create payout", e);
56
            throw e;
57
        }
58
    }
59
 
34872 ranu 60
 
34860 ranu 61
    public JSONObject fetchPayoutStatus(String payoutId) throws Exception {
62
        String url = BASE_URL + "/payouts/" + payoutId;
63
        String response = restClient.get(url,null, getAuthHeaders());
64
 
65
        return new JSONObject(response);
66
    }
67
 
68
 
69
    private Map<String, String> getAuthHeaders() {
70
        Map<String, String> headers = new HashMap<>();
71
        headers.put("Content-Type", "application/json");
72
 
73
        String auth = API_KEY + ":" + API_SECRET;
74
        String encodedAuth = Base64.getEncoder()
75
                .encodeToString(auth.getBytes(StandardCharsets.UTF_8));
76
        headers.put("Authorization", "Basic " + encodedAuth);
77
 
78
        return headers;
79
    }
80
 
81
}
82