Subversion Repositories SmartDukaan

Rev

Rev 34868 | Go to most recent revision | Details | 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
 
21
    private static final Logger LOGGER = LogManager.getLogger(RecordingService.class);
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
 
38
    public String createPayout(String fundAccountId, Double amount, String currency) throws Exception {
39
        JSONObject payload = new JSONObject();
40
        payload.put("account_number", RAZORPAYX_ACCOUNT);   // RazorpayX virtual account
41
        payload.put("fund_account_id", fundAccountId);      // partner fund account id
42
        payload.put("amount", (int) (amount * 100));         // amount in paise
43
        payload.put("currency", currency);
44
        payload.put("mode", "IMPS");                        // or NEFT, UPI
45
        payload.put("purpose", "payout");
46
        payload.put("queue_if_low_balance", true);
47
 
48
        try {
49
            LOGGER.info("Sending RazorpayX payout request: {}", payload);
50
            String url = BASE_URL + "/payouts";
51
            String response = restClient.post(url, payload.toString(), getAuthHeaders());
52
            LOGGER.info("RazorpayX payout response: {}", response);
53
 
54
            JSONObject json = new JSONObject(response);
55
            return json.getString("id"); // payoutId
56
        } catch (Exception e) {
57
            LOGGER.error("Failed to create payout", e);
58
            throw e;
59
        }
60
    }
61
 
62
    public JSONObject fetchPayoutStatus(String payoutId) throws Exception {
63
        String url = BASE_URL + "/payouts/" + payoutId;
64
        String response = restClient.get(url,null, getAuthHeaders());
65
 
66
        return new JSONObject(response);
67
    }
68
 
69
 
70
    private Map<String, String> getAuthHeaders() {
71
        Map<String, String> headers = new HashMap<>();
72
        headers.put("Content-Type", "application/json");
73
 
74
        String auth = API_KEY + ":" + API_SECRET;
75
        String encodedAuth = Base64.getEncoder()
76
                .encodeToString(auth.getBytes(StandardCharsets.UTF_8));
77
        headers.put("Authorization", "Basic " + encodedAuth);
78
 
79
        return headers;
80
    }
81
 
82
}
83