medusa-hdfc-payment 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,12 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleError = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/utils");
|
|
5
5
|
const handleError = (error) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
error
|
|
6
|
+
// If error is already a MedusaError, re-throw it to avoid double-wrapping
|
|
7
|
+
if (error instanceof utils_1.MedusaError) {
|
|
8
|
+
throw error;
|
|
9
|
+
}
|
|
10
|
+
// Handle network errors (DNS, connection issues)
|
|
11
|
+
// AxiosError without response indicates a network error
|
|
12
|
+
const isAxiosError = error && typeof error === 'object' && 'isAxiosError' in error;
|
|
13
|
+
const isNetworkError = !isAxiosError || (isAxiosError && !error.response);
|
|
14
|
+
if (isNetworkError) {
|
|
15
|
+
const errorMessage = error.message || "Unknown network error";
|
|
16
|
+
if (errorMessage.includes("ENOTFOUND") || errorMessage.includes("getaddrinfo")) {
|
|
17
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `HDFC API endpoint not found. Please verify the API endpoint URL is correct. Error: ${errorMessage}. Check your HDFC payment gateway configuration.`);
|
|
18
|
+
}
|
|
19
|
+
if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ETIMEDOUT")) {
|
|
20
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Cannot connect to HDFC payment gateway. Please check your network connection and API endpoint. Error: ${errorMessage}`);
|
|
21
|
+
}
|
|
22
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `HDFC API network error: ${errorMessage}`);
|
|
23
|
+
}
|
|
24
|
+
// Handle Axios errors with response (HTTP errors)
|
|
25
|
+
const axiosError = error;
|
|
26
|
+
const message = axiosError.response?.data?.error_message ||
|
|
27
|
+
axiosError.response?.data?.message ||
|
|
28
|
+
axiosError.message ||
|
|
9
29
|
"HDFC API error";
|
|
10
|
-
const code =
|
|
11
|
-
const errorCode =
|
|
30
|
+
const code = axiosError.response?.status || 500;
|
|
31
|
+
const errorCode = axiosError.response?.data?.error_code;
|
|
32
|
+
const fullErrorData = axiosError.response?.data;
|
|
33
|
+
// Log detailed error information for debugging
|
|
34
|
+
console.error(`[HDFC Error Handler] HTTP Status: ${code}`);
|
|
35
|
+
console.error(`[HDFC Error Handler] Error Code: ${errorCode || 'N/A'}`);
|
|
36
|
+
console.error(`[HDFC Error Handler] Error Message: ${message}`);
|
|
37
|
+
console.error(`[HDFC Error Handler] Full Error Response: ${JSON.stringify(fullErrorData)}`);
|
|
12
38
|
if (code === 401) {
|
|
13
39
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Authentication failed with HDFC payment gateway");
|
|
14
40
|
}
|
|
@@ -18,11 +44,19 @@ const handleError = (error) => {
|
|
|
18
44
|
if (code === 429) {
|
|
19
45
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Rate limit exceeded. Please try again later.");
|
|
20
46
|
}
|
|
21
|
-
if (code === 400
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.
|
|
25
|
-
|
|
47
|
+
if (code === 400) {
|
|
48
|
+
// Handle validation errors with detailed messages
|
|
49
|
+
if (axiosError.response?.data?.errors) {
|
|
50
|
+
const validationErrors = Object.entries(axiosError.response.data.errors)
|
|
51
|
+
.map(([field, msgs]) => `${field}: ${Array.isArray(msgs) ? msgs.join(", ") : msgs}`)
|
|
52
|
+
.join("; ");
|
|
53
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `HDFC validation failed: ${validationErrors}. Full response: ${JSON.stringify(fullErrorData)}`);
|
|
54
|
+
}
|
|
55
|
+
// For 400 errors, include full error details
|
|
56
|
+
const errorDetails = errorCode
|
|
57
|
+
? `Error Code: ${errorCode}. ${message}`
|
|
58
|
+
: message;
|
|
59
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `HDFC API Bad Request: ${errorDetails}. Full response: ${JSON.stringify(fullErrorData)}`);
|
|
26
60
|
}
|
|
27
61
|
// Map HDFC specific error codes to Medusa error types
|
|
28
62
|
if (errorCode) {
|
|
@@ -43,4 +77,4 @@ const handleError = (error) => {
|
|
|
43
77
|
: utils_1.MedusaError.Types.UNEXPECTED_STATE, `HDFC payment error: ${message}`);
|
|
44
78
|
};
|
|
45
79
|
exports.handleError = handleError;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9oZGZjL2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTZDO0FBSXRDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBa0QsRUFBUyxFQUFFO0lBQ3ZGLDBFQUEwRTtJQUMxRSxJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7UUFDakMsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0lBRUQsaURBQWlEO0lBQ2pELHdEQUF3RDtJQUN4RCxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLGNBQWMsSUFBSSxLQUFLLENBQUE7SUFDbEYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBRSxLQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXpGLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQTtRQUU3RCxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsc0ZBQXNGLFlBQVksa0RBQWtELENBQ3JKLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNoRixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLHlHQUF5RyxZQUFZLEVBQUUsQ0FDeEgsQ0FBQTtRQUNILENBQUM7UUFFRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLDJCQUEyQixZQUFZLEVBQUUsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQTtJQUNqRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhO1FBQ3hDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU87UUFDbEMsVUFBVSxDQUFDLE9BQU87UUFDbEIsZ0JBQWdCLENBQUE7SUFDaEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksR0FBRyxDQUFBO0lBQy9DLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQTtJQUN2RCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQTtJQUUvQywrQ0FBK0M7SUFDL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUN2RSxPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRTNGLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGlEQUFpRCxDQUNsRCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLDJEQUEyRCxDQUM1RCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDhDQUE4QyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7aUJBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMkJBQTJCLGdCQUFnQixvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUMvRixDQUFBO1FBQ0gsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxNQUFNLFlBQVksR0FBRyxTQUFTO1lBQzVCLENBQUMsQ0FBQyxlQUFlLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlCQUF5QixZQUFZLG9CQUFvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQ3pGLENBQUE7SUFDSCxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVCQUF1QixPQUFPLEVBQUUsQ0FDakMsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9CQUFvQixPQUFPLEVBQUUsQ0FDOUIsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixPQUFPLEVBQUUsQ0FDL0IsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLElBQUksS0FBSyxHQUFHO1FBQ1YsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDN0IsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHO1lBQ2QsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDaEMsQ0FBQyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUN0Qyx1QkFBdUIsT0FBTyxFQUFFLENBQ2pDLENBQUE7QUFDSCxDQUFDLENBQUE7QUEzSFksUUFBQSxXQUFXLGVBMkh2QiJ9
|
|
@@ -9,16 +9,17 @@ const handle_error_1 = require("./handle-error");
|
|
|
9
9
|
class HDFCClient {
|
|
10
10
|
constructor(options) {
|
|
11
11
|
this.isDisposed = false;
|
|
12
|
-
if (!options.merchant_id || !options.api_key || !options.
|
|
13
|
-
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "HDFC API credentials are required (merchant_id, api_key,
|
|
12
|
+
if (!options.merchant_id || !options.api_key || !options.payment_page_client_id) {
|
|
13
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "HDFC API credentials are required (merchant_id, api_key, payment_page_client_id)");
|
|
14
14
|
}
|
|
15
15
|
this.merchantId = options.merchant_id;
|
|
16
16
|
this.apiKey = options.api_key;
|
|
17
|
-
this.
|
|
17
|
+
this.paymentPageClientId = options.payment_page_client_id;
|
|
18
18
|
this.environment = options.environment || "sandbox";
|
|
19
|
+
// Correct base URLs from official integration kit
|
|
19
20
|
const baseURL = this.environment === "production"
|
|
20
|
-
? "https://
|
|
21
|
-
: "https://
|
|
21
|
+
? "https://smartgateway.hdfc.bank.in"
|
|
22
|
+
: "https://smartgateway.hdfcuat.bank.in";
|
|
22
23
|
this.axios = axios_1.default.create({
|
|
23
24
|
baseURL,
|
|
24
25
|
headers: {
|
|
@@ -32,10 +33,12 @@ class HDFCClient {
|
|
|
32
33
|
if (this.isDisposed) {
|
|
33
34
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Cannot use disposed HDFC client");
|
|
34
35
|
}
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
config.headers["
|
|
38
|
-
config.headers["
|
|
36
|
+
// Use Basic Auth with base64 encoded API_KEY
|
|
37
|
+
const base64ApiKey = Buffer.from(this.apiKey).toString("base64");
|
|
38
|
+
config.headers["Authorization"] = `Basic ${base64ApiKey}`;
|
|
39
|
+
config.headers["x-merchantid"] = this.merchantId;
|
|
40
|
+
config.headers["version"] = "2024-06-24";
|
|
41
|
+
config.headers["User-Agent"] = "MEDUSA_HDFC_PLUGIN/1.0.0";
|
|
39
42
|
return config;
|
|
40
43
|
});
|
|
41
44
|
// Add response interceptor for error handling
|
|
@@ -52,22 +55,49 @@ class HDFCClient {
|
|
|
52
55
|
*/
|
|
53
56
|
async initiate(data) {
|
|
54
57
|
try {
|
|
55
|
-
const
|
|
56
|
-
|
|
58
|
+
const requestUrl = `${this.axios.defaults.baseURL}/session`;
|
|
59
|
+
// Build request payload, filtering out undefined/null values
|
|
60
|
+
const requestPayload = {
|
|
61
|
+
payment_page_client_id: this.paymentPageClientId,
|
|
57
62
|
order_id: data.order_id,
|
|
58
63
|
amount: data.amount,
|
|
59
|
-
currency: data.currency,
|
|
60
|
-
customer_email: data.customer_email,
|
|
61
|
-
customer_phone: data.customer_phone,
|
|
64
|
+
currency: data.currency ? data.currency.toUpperCase() : data.currency, // Ensure uppercase
|
|
62
65
|
return_url: data.return_url,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
};
|
|
67
|
+
// Only include optional fields if they have values
|
|
68
|
+
if (data.customer_id) {
|
|
69
|
+
requestPayload.customer_id = data.customer_id;
|
|
70
|
+
}
|
|
71
|
+
if (data.customer_email) {
|
|
72
|
+
requestPayload.customer_email = data.customer_email;
|
|
73
|
+
}
|
|
74
|
+
if (data.customer_phone) {
|
|
75
|
+
requestPayload.customer_phone = data.customer_phone;
|
|
76
|
+
}
|
|
77
|
+
// Metadata removed - HDFC API may not accept nested objects
|
|
78
|
+
console.log(`[HDFC Client] Initiate - Request URL: ${requestUrl}`);
|
|
79
|
+
console.log(`[HDFC Client] Initiate - Request Payload: ${JSON.stringify(requestPayload)}`);
|
|
80
|
+
const response = await this.axios.post("/session", requestPayload);
|
|
81
|
+
console.log(`[HDFC Client] Initiate - Raw Axios Response Status: ${response.status}`);
|
|
82
|
+
console.log(`[HDFC Client] Initiate - Raw Axios Response Headers: ${JSON.stringify(response.headers)}`);
|
|
83
|
+
console.log(`[HDFC Client] Initiate - Response Data: ${JSON.stringify(response.data)}`);
|
|
84
|
+
const responseData = response.data;
|
|
85
|
+
console.log(`[HDFC Client] Initiate - Returning response data: ${JSON.stringify(responseData)}`);
|
|
86
|
+
return responseData;
|
|
67
87
|
}
|
|
68
88
|
catch (error) {
|
|
89
|
+
// Log full error details including request payload for debugging
|
|
90
|
+
const axiosError = error;
|
|
91
|
+
if (axiosError.response) {
|
|
92
|
+
console.error(`[HDFC Client] Initiate - Error Response Status: ${axiosError.response.status}`);
|
|
93
|
+
console.error(`[HDFC Client] Initiate - Error Response Data: ${JSON.stringify(axiosError.response.data)}`);
|
|
94
|
+
console.error(`[HDFC Client] Initiate - Error Code: ${axiosError.response.data?.error_code || 'N/A'}`);
|
|
95
|
+
console.error(`[HDFC Client] Initiate - Error Message: ${axiosError.response.data?.error_message || axiosError.response.data?.message || 'N/A'}`);
|
|
96
|
+
}
|
|
97
|
+
console.error(`[HDFC Client] Initiate - Full Error:`, error);
|
|
98
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
69
99
|
(0, handle_error_1.handleError)(error);
|
|
70
|
-
throw
|
|
100
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
71
101
|
}
|
|
72
102
|
}
|
|
73
103
|
/**
|
|
@@ -90,8 +120,9 @@ class HDFCClient {
|
|
|
90
120
|
return response.data;
|
|
91
121
|
}
|
|
92
122
|
catch (error) {
|
|
123
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
93
124
|
(0, handle_error_1.handleError)(error);
|
|
94
|
-
throw
|
|
125
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
95
126
|
}
|
|
96
127
|
}
|
|
97
128
|
/**
|
|
@@ -106,8 +137,9 @@ class HDFCClient {
|
|
|
106
137
|
return response.data;
|
|
107
138
|
}
|
|
108
139
|
catch (error) {
|
|
140
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
109
141
|
(0, handle_error_1.handleError)(error);
|
|
110
|
-
throw
|
|
142
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
111
143
|
}
|
|
112
144
|
}
|
|
113
145
|
/**
|
|
@@ -115,33 +147,32 @@ class HDFCClient {
|
|
|
115
147
|
*/
|
|
116
148
|
async refund(data) {
|
|
117
149
|
try {
|
|
118
|
-
const
|
|
119
|
-
|
|
150
|
+
const requestPayload = {
|
|
151
|
+
order_id: data.order_id,
|
|
120
152
|
amount: data.amount,
|
|
121
|
-
|
|
122
|
-
}
|
|
153
|
+
unique_request_id: data.unique_request_id || `refund_${Date.now()}`,
|
|
154
|
+
};
|
|
155
|
+
const response = await this.axios.post(`/refunds`, requestPayload);
|
|
123
156
|
return response.data;
|
|
124
157
|
}
|
|
125
158
|
catch (error) {
|
|
159
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
126
160
|
(0, handle_error_1.handleError)(error);
|
|
127
|
-
throw
|
|
161
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
128
162
|
}
|
|
129
163
|
}
|
|
130
164
|
/**
|
|
131
165
|
* Get payment status
|
|
132
166
|
*/
|
|
133
|
-
async getStatus(
|
|
167
|
+
async getStatus(orderId) {
|
|
134
168
|
try {
|
|
135
|
-
const response = await this.axios.get(`/
|
|
136
|
-
params: {
|
|
137
|
-
merchant_id: this.merchantId,
|
|
138
|
-
},
|
|
139
|
-
});
|
|
169
|
+
const response = await this.axios.get(`/orders/${orderId}`);
|
|
140
170
|
return response.data;
|
|
141
171
|
}
|
|
142
172
|
catch (error) {
|
|
173
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
143
174
|
(0, handle_error_1.handleError)(error);
|
|
144
|
-
throw
|
|
175
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
145
176
|
}
|
|
146
177
|
}
|
|
147
178
|
/**
|
|
@@ -154,10 +185,11 @@ class HDFCClient {
|
|
|
154
185
|
});
|
|
155
186
|
}
|
|
156
187
|
catch (error) {
|
|
188
|
+
// handleError will throw, so this is unreachable but satisfies TypeScript
|
|
157
189
|
(0, handle_error_1.handleError)(error);
|
|
158
|
-
throw
|
|
190
|
+
throw error; // Unreachable, but satisfies TypeScript's return type check
|
|
159
191
|
}
|
|
160
192
|
}
|
|
161
193
|
}
|
|
162
194
|
exports.default = HDFCClient;
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2hkZmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE2QztBQUM3QyxpREFBNEM7QUFlNUMsTUFBcUIsVUFBVTtJQVE3QixZQUFZLE9BQTBCO1FBRjlCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFHeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0ZBQWtGLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFBO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUE7UUFFbkQsa0RBQWtEO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssWUFBWTtZQUMvQyxDQUFDLENBQUMsbUNBQW1DO1lBQ3JDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQTtRQUUxQyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTztZQUNQLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxRQUFRLEVBQUUsa0JBQWtCO2FBQzdCO1lBQ0QsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUE7UUFFRixpQ0FBaUM7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
|
|
@@ -3,9 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const utils_1 = require("@medusajs/utils");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const client_1 = __importDefault(require("./client"));
|
|
8
8
|
class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
9
|
+
static validateOptions(options) {
|
|
10
|
+
if (!(0, utils_1.isDefined)(options.merchant_id)) {
|
|
11
|
+
throw new Error("Required option `merchant_id` is missing in HDFC plugin");
|
|
12
|
+
}
|
|
13
|
+
if (!(0, utils_1.isDefined)(options.api_key)) {
|
|
14
|
+
throw new Error("Required option `api_key` is missing in HDFC plugin");
|
|
15
|
+
}
|
|
16
|
+
if (!(0, utils_1.isDefined)(options.payment_page_client_id)) {
|
|
17
|
+
throw new Error("Required option `payment_page_client_id` is missing in HDFC plugin");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
9
20
|
constructor({ logger }, options) {
|
|
10
21
|
super({}, options);
|
|
11
22
|
this.logger_ = logger;
|
|
@@ -13,113 +24,176 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
13
24
|
this.client = new client_1.default({
|
|
14
25
|
merchant_id: options.merchant_id,
|
|
15
26
|
api_key: options.api_key,
|
|
16
|
-
|
|
27
|
+
payment_page_client_id: options.payment_page_client_id,
|
|
28
|
+
response_key: options.response_key,
|
|
17
29
|
environment: options.environment || "sandbox",
|
|
18
30
|
});
|
|
19
31
|
}
|
|
32
|
+
buildError(message, error) {
|
|
33
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
34
|
+
return new Error(`${message}: ${errorMessage}`.trim());
|
|
35
|
+
}
|
|
20
36
|
/**
|
|
21
37
|
* Initialize a payment session
|
|
22
38
|
*/
|
|
23
39
|
async initiatePayment(context) {
|
|
24
40
|
try {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
41
|
+
this.logger_.info(`[HDFC Payment] Initiate - Context received: ${JSON.stringify(context)}`);
|
|
42
|
+
// Extract from top level or nested context structure (Medusa v2 format)
|
|
43
|
+
// Following Stripe's pattern of extracting typed parameters from context
|
|
44
|
+
const nestedContext = context.context || {};
|
|
45
|
+
const extractedAmount = context.amount || nestedContext.amount;
|
|
46
|
+
const extractedCurrencyCode = context.currency_code || nestedContext.currency_code;
|
|
47
|
+
const data = context.data;
|
|
48
|
+
// Extract session_id from multiple possible locations
|
|
49
|
+
const topLevelData = data;
|
|
50
|
+
const nestedData = nestedContext.data;
|
|
51
|
+
const sessionId = topLevelData?.session_id ||
|
|
52
|
+
nestedData?.session_id ||
|
|
53
|
+
undefined;
|
|
54
|
+
const customer = context.customer || nestedContext.customer;
|
|
55
|
+
const returnUrl = context.return_url || nestedContext.return_url;
|
|
56
|
+
const cancelUrl = context.cancel_url || nestedContext.cancel_url;
|
|
57
|
+
// Use session_id as order_id if order_id is not available
|
|
58
|
+
const order_id = context.order_id || sessionId || nestedContext.idempotency_key;
|
|
59
|
+
// Convert currency to uppercase (HDFC expects "INR" not "inr")
|
|
60
|
+
const currency = extractedCurrencyCode ? extractedCurrencyCode.toUpperCase() : undefined;
|
|
61
|
+
this.logger_.info(`[HDFC Payment] Initiate - Extracted values: order_id=${order_id}, amount=${extractedAmount}, currency=${currency}, sessionId=${sessionId}`);
|
|
62
|
+
if (!order_id || !extractedAmount || !currency) {
|
|
63
|
+
this.logger_.warn(`[HDFC Payment] Initiate - Missing required fields. order_id: ${order_id}, amount: ${extractedAmount}, currency: ${currency}`);
|
|
64
|
+
throw this.buildError("Missing required fields: order_id (or session_id), amount, currency_code", new Error("Missing required fields"));
|
|
30
65
|
}
|
|
31
|
-
const
|
|
66
|
+
const customerId = customer?.id || undefined;
|
|
67
|
+
const customerEmail = customer?.email || undefined;
|
|
68
|
+
const customerPhone = customer?.phone || undefined;
|
|
69
|
+
// Build return URL with payment session ID for frontend linking
|
|
70
|
+
const baseReturnUrl = returnUrl || this.options_.return_url || "";
|
|
71
|
+
const returnUrlWithSession = sessionId
|
|
72
|
+
? `${baseReturnUrl}${baseReturnUrl.includes('?') ? '&' : '?'}payment_session_id=${sessionId}`
|
|
73
|
+
: baseReturnUrl;
|
|
74
|
+
// Build request data, only including fields with actual values (no undefined/null)
|
|
75
|
+
const requestData = {
|
|
32
76
|
order_id,
|
|
33
|
-
amount: Math.round(
|
|
77
|
+
amount: Math.round(extractedAmount),
|
|
34
78
|
currency,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
});
|
|
79
|
+
return_url: returnUrlWithSession,
|
|
80
|
+
...(customerId && { customer_id: customerId }),
|
|
81
|
+
...(customerEmail && { customer_email: customerEmail }),
|
|
82
|
+
...(customerPhone && { customer_phone: customerPhone }),
|
|
83
|
+
};
|
|
84
|
+
// Note: Metadata removed as HDFC API might not accept nested objects
|
|
85
|
+
// If needed, metadata can be added as flat key-value pairs
|
|
86
|
+
this.logger_.info(`[HDFC Payment] Initiate - Request to HDFC API: ${JSON.stringify(requestData)}`);
|
|
87
|
+
const response = await this.client.initiate(requestData);
|
|
88
|
+
this.logger_.info(`[HDFC Payment] Initiate - API Response received: ${JSON.stringify(response)}`);
|
|
89
|
+
// Map payment_links.web to payment_url (official API structure)
|
|
90
|
+
const paymentUrl = response.payment_links?.web;
|
|
91
|
+
this.logger_.info(`[HDFC Payment] Initiate - Payment URL extracted: ${paymentUrl ? paymentUrl : 'NOT FOUND'}`);
|
|
92
|
+
this.logger_.info(`[HDFC Payment] Initiate - Response has payment_links.web: ${!!response.payment_links?.web}`);
|
|
93
|
+
if (!paymentUrl) {
|
|
94
|
+
this.logger_.warn(`[HDFC Payment] Initiate - HDFC API did not return payment_links.web for order ${order_id}. Response: ${JSON.stringify(response)}`);
|
|
95
|
+
throw this.buildError("HDFC payment gateway did not return a payment URL. Please check your HDFC API configuration and ensure the session endpoint returns 'payment_links.web'.", new Error("Payment URL not found in response"));
|
|
96
|
+
}
|
|
97
|
+
// Store HDFC order_id and Medusa session_id in payment session data
|
|
98
|
+
// This allows authorizePayment to link back to the correct HDFC order
|
|
99
|
+
// Use response.id (HDFC order ID like "ordeh_...") as the primary order_id for status checks
|
|
100
|
+
// response.order_id is the Medusa session ID we sent
|
|
101
|
+
const hdfcOrderId = response.id || response.order_id;
|
|
102
|
+
const finalData = {
|
|
103
|
+
order_id: hdfcOrderId, // HDFC order_id (response.id) - used to check status
|
|
104
|
+
payment_url: paymentUrl,
|
|
105
|
+
session_id: sessionId, // Medusa payment session ID (for reference)
|
|
106
|
+
hdfc_order_id: hdfcOrderId, // Explicit HDFC order_id (alias for clarity)
|
|
107
|
+
medusa_session_id: response.order_id, // The Medusa session ID we sent to HDFC
|
|
108
|
+
};
|
|
109
|
+
this.logger_.info(`[HDFC Payment] Initiate - Final response data: ${JSON.stringify(finalData)}`);
|
|
110
|
+
this.logger_.info(`[HDFC Payment] Initiate - Stored HDFC order_id: ${hdfcOrderId}, Medusa session_id: ${sessionId}`);
|
|
43
111
|
return {
|
|
44
|
-
data:
|
|
45
|
-
payment_id: response.payment_id,
|
|
46
|
-
order_id: response.order_id,
|
|
47
|
-
payment_url: response.payment_url || response.redirect_url,
|
|
48
|
-
},
|
|
112
|
+
data: finalData,
|
|
49
113
|
};
|
|
50
114
|
}
|
|
51
115
|
catch (error) {
|
|
52
116
|
this.logger_.error("HDFC initiate payment error:", error);
|
|
53
|
-
|
|
54
|
-
error: error.message || "Failed to initiate payment",
|
|
55
|
-
};
|
|
117
|
+
throw this.buildError("An error occurred in InitiatePayment", error);
|
|
56
118
|
}
|
|
57
119
|
}
|
|
58
120
|
/**
|
|
59
121
|
* Authorize a payment
|
|
122
|
+
* Note: With HDFC, authorization happens on the payment page.
|
|
123
|
+
* This method checks the order status to see if payment was completed.
|
|
60
124
|
*/
|
|
61
125
|
async authorizePayment(paymentSessionData, context) {
|
|
62
126
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
127
|
+
// Priority: Use HDFC order_id from payment session data (stored during initiate)
|
|
128
|
+
// The order_id should be response.id from HDFC API (e.g., "ordeh_...")
|
|
129
|
+
// Fallback: Try to extract from context or URL params
|
|
130
|
+
const orderId = paymentSessionData.order_id ||
|
|
131
|
+
paymentSessionData.hdfc_order_id ||
|
|
132
|
+
context.order_id ||
|
|
133
|
+
context.hdfc_order_id;
|
|
134
|
+
this.logger_.info(`[HDFC Payment] Authorize - Payment session data: ${JSON.stringify(paymentSessionData)}`);
|
|
135
|
+
this.logger_.info(`[HDFC Payment] Authorize - Context: ${JSON.stringify(context)}`);
|
|
136
|
+
this.logger_.info(`[HDFC Payment] Authorize - Extracted order_id: ${orderId}`);
|
|
137
|
+
if (!orderId) {
|
|
138
|
+
this.logger_.warn(`[HDFC Payment] Authorize - Missing order_id. Payment session data keys: ${Object.keys(paymentSessionData).join(', ')}`);
|
|
139
|
+
throw this.buildError("Missing order_id in payment session data. The HDFC order_id should be stored during payment initiation.", new Error("Missing order_id"));
|
|
68
140
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
}
|
|
141
|
+
// Check the order status (authorization happens on HDFC payment page)
|
|
142
|
+
this.logger_.info(`[HDFC Payment] Authorize - Checking HDFC order status for order_id: ${orderId}`);
|
|
143
|
+
const response = await this.client.getStatus(orderId);
|
|
144
|
+
// Map HDFC status to Medusa status
|
|
145
|
+
let medusaStatus = "pending";
|
|
146
|
+
if (response.status === "CHARGED") {
|
|
147
|
+
medusaStatus = "authorized";
|
|
148
|
+
this.logger_.info(`[HDFC Payment] Authorize - Payment CHARGED, returning authorized status. Order will be created after checkout completion.`);
|
|
149
|
+
}
|
|
150
|
+
else if (response.status === "PENDING" || response.status === "PENDING_VBV") {
|
|
151
|
+
medusaStatus = "pending";
|
|
152
|
+
this.logger_.info(`[HDFC Payment] Authorize - Payment status: ${response.status}, returning pending status.`);
|
|
153
|
+
}
|
|
154
|
+
else if (response.status === "AUTHORIZATION_FAILED" || response.status === "AUTHENTICATION_FAILED") {
|
|
155
|
+
medusaStatus = "error";
|
|
156
|
+
this.logger_.warn(`[HDFC Payment] Authorize - Payment failed: ${response.status}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.logger_.warn(`[HDFC Payment] Authorize - Unknown HDFC status: ${response.status}, returning pending`);
|
|
160
|
+
}
|
|
161
|
+
this.logger_.info(`[HDFC Payment] Authorize - Final status: ${medusaStatus}, HDFC status: ${response.status}`);
|
|
162
|
+
this.logger_.info(`[HDFC Payment] Authorize - IMPORTANT: After authorization, frontend must call cart.complete() to create the order`);
|
|
82
163
|
return {
|
|
83
|
-
status:
|
|
164
|
+
status: medusaStatus,
|
|
84
165
|
data: {
|
|
85
|
-
transaction_id: response.transaction_id,
|
|
86
|
-
payment_id: response.payment_id,
|
|
87
166
|
order_id: response.order_id,
|
|
88
167
|
amount: response.amount,
|
|
89
168
|
currency: response.currency,
|
|
90
169
|
status: response.status,
|
|
91
|
-
payment_url: response.payment_url || response.redirect_url,
|
|
92
170
|
},
|
|
93
171
|
};
|
|
94
172
|
}
|
|
95
173
|
catch (error) {
|
|
96
174
|
this.logger_.error("HDFC authorize payment error:", error);
|
|
97
|
-
|
|
98
|
-
error: error.message || "Failed to authorize payment",
|
|
99
|
-
};
|
|
175
|
+
throw this.buildError("An error occurred in authorizePayment", error);
|
|
100
176
|
}
|
|
101
177
|
}
|
|
102
178
|
/**
|
|
103
179
|
* Capture an authorized payment
|
|
180
|
+
* Note: With HDFC, payment is captured automatically when authorized.
|
|
181
|
+
* This method checks the order status to confirm capture.
|
|
104
182
|
*/
|
|
105
183
|
async capturePayment(paymentSessionData) {
|
|
106
184
|
try {
|
|
107
|
-
const
|
|
108
|
-
if (!
|
|
109
|
-
|
|
110
|
-
error: "Missing transaction_id in payment session data",
|
|
111
|
-
};
|
|
185
|
+
const orderId = paymentSessionData.order_id || paymentSessionData.transaction_id;
|
|
186
|
+
if (!orderId) {
|
|
187
|
+
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
112
188
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
189
|
+
// HDFC captures automatically when payment is successful
|
|
190
|
+
// Just check the order status
|
|
191
|
+
const response = await this.client.getStatus(orderId);
|
|
192
|
+
// If status is CHARGED, payment is captured
|
|
193
|
+
const isCaptured = response.status === "CHARGED";
|
|
118
194
|
return {
|
|
119
|
-
status: "captured",
|
|
195
|
+
status: isCaptured ? "captured" : "pending",
|
|
120
196
|
data: {
|
|
121
|
-
transaction_id: response.transaction_id,
|
|
122
|
-
payment_id: response.payment_id,
|
|
123
197
|
order_id: response.order_id,
|
|
124
198
|
amount: response.amount,
|
|
125
199
|
currency: response.currency,
|
|
@@ -129,9 +203,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
129
203
|
}
|
|
130
204
|
catch (error) {
|
|
131
205
|
this.logger_.error("HDFC capture payment error:", error);
|
|
132
|
-
|
|
133
|
-
error: error.message || "Failed to capture payment",
|
|
134
|
-
};
|
|
206
|
+
throw this.buildError("An error occurred in capturePayment", error);
|
|
135
207
|
}
|
|
136
208
|
}
|
|
137
209
|
/**
|
|
@@ -139,22 +211,18 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
139
211
|
*/
|
|
140
212
|
async refundPayment(paymentSessionData, refundAmount) {
|
|
141
213
|
try {
|
|
142
|
-
const
|
|
143
|
-
if (!
|
|
144
|
-
|
|
145
|
-
error: "Missing transaction_id in payment session data",
|
|
146
|
-
};
|
|
214
|
+
const orderId = paymentSessionData.order_id || paymentSessionData.transaction_id;
|
|
215
|
+
if (!orderId) {
|
|
216
|
+
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
147
217
|
}
|
|
148
218
|
const response = await this.client.refund({
|
|
149
|
-
|
|
219
|
+
order_id: orderId,
|
|
150
220
|
amount: Math.round(refundAmount),
|
|
151
|
-
reason: "Customer refund request",
|
|
152
221
|
});
|
|
153
222
|
return {
|
|
154
223
|
status: "captured",
|
|
155
224
|
data: {
|
|
156
|
-
|
|
157
|
-
refund_id: response.refund_id,
|
|
225
|
+
order_id: response.order_id,
|
|
158
226
|
amount: response.amount,
|
|
159
227
|
currency: response.currency,
|
|
160
228
|
status: response.status,
|
|
@@ -163,9 +231,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
163
231
|
}
|
|
164
232
|
catch (error) {
|
|
165
233
|
this.logger_.error("HDFC refund payment error:", error);
|
|
166
|
-
|
|
167
|
-
error: error.message || "Failed to refund payment",
|
|
168
|
-
};
|
|
234
|
+
throw this.buildError("An error occurred in refundPayment", error);
|
|
169
235
|
}
|
|
170
236
|
}
|
|
171
237
|
/**
|
|
@@ -173,26 +239,43 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
173
239
|
*/
|
|
174
240
|
async cancelPayment(paymentSessionData) {
|
|
175
241
|
try {
|
|
176
|
-
|
|
177
|
-
|
|
242
|
+
// Try to find HDFC order ID from multiple possible fields
|
|
243
|
+
const orderId = paymentSessionData.order_id ||
|
|
244
|
+
paymentSessionData.hdfc_order_id ||
|
|
245
|
+
paymentSessionData.transaction_id;
|
|
246
|
+
// If no order_id exists, this payment session was never successfully initiated
|
|
247
|
+
// Return success to allow cleanup without errors
|
|
248
|
+
if (!orderId) {
|
|
249
|
+
this.logger_.warn(`[HDFC Payment] Cancel - No order_id found in payment session data. Session may not have been fully initialized. Keys: ${Object.keys(paymentSessionData).join(', ')}`);
|
|
178
250
|
return {
|
|
179
|
-
|
|
251
|
+
status: "canceled",
|
|
252
|
+
data: {
|
|
253
|
+
status: "cancelled",
|
|
254
|
+
note: "Payment session was not fully initialized",
|
|
255
|
+
},
|
|
180
256
|
};
|
|
181
257
|
}
|
|
182
|
-
|
|
258
|
+
// Note: HDFC API may not have a cancel endpoint, this is a placeholder
|
|
259
|
+
// In practice, payments are typically cancelled by not completing them
|
|
260
|
+
try {
|
|
261
|
+
await this.client.cancel(orderId);
|
|
262
|
+
}
|
|
263
|
+
catch (cancelError) {
|
|
264
|
+
// If cancel fails (e.g., order doesn't exist or already cancelled), log but don't fail
|
|
265
|
+
this.logger_.warn(`[HDFC Payment] Cancel - Failed to cancel order ${orderId} with HDFC API: ${cancelError}`);
|
|
266
|
+
// Continue to return success since the session is being cleaned up
|
|
267
|
+
}
|
|
183
268
|
return {
|
|
184
269
|
status: "canceled",
|
|
185
270
|
data: {
|
|
186
|
-
|
|
271
|
+
order_id: orderId,
|
|
187
272
|
status: "cancelled",
|
|
188
273
|
},
|
|
189
274
|
};
|
|
190
275
|
}
|
|
191
276
|
catch (error) {
|
|
192
277
|
this.logger_.error("HDFC cancel payment error:", error);
|
|
193
|
-
|
|
194
|
-
error: error.message || "Failed to cancel payment",
|
|
195
|
-
};
|
|
278
|
+
throw this.buildError("An error occurred in cancelPayment", error);
|
|
196
279
|
}
|
|
197
280
|
}
|
|
198
281
|
/**
|
|
@@ -200,24 +283,23 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
200
283
|
*/
|
|
201
284
|
async getPaymentStatus(paymentSessionData) {
|
|
202
285
|
try {
|
|
203
|
-
const
|
|
204
|
-
if (!
|
|
286
|
+
const orderId = paymentSessionData.order_id || paymentSessionData.transaction_id;
|
|
287
|
+
if (!orderId) {
|
|
205
288
|
return "error";
|
|
206
289
|
}
|
|
207
|
-
const response = await this.client.getStatus(
|
|
208
|
-
|
|
209
|
-
|
|
290
|
+
const response = await this.client.getStatus(orderId);
|
|
291
|
+
// Map HDFC statuses to Medusa statuses
|
|
292
|
+
// HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
|
|
293
|
+
const status = response.status.toUpperCase();
|
|
294
|
+
if (status === "CHARGED") {
|
|
210
295
|
return "authorized";
|
|
211
296
|
}
|
|
212
|
-
if (status === "
|
|
297
|
+
if (status === "PENDING" || status === "PENDING_VBV") {
|
|
213
298
|
return "pending";
|
|
214
299
|
}
|
|
215
|
-
if (status === "
|
|
300
|
+
if (status === "AUTHORIZATION_FAILED" || status === "AUTHENTICATION_FAILED") {
|
|
216
301
|
return "error";
|
|
217
302
|
}
|
|
218
|
-
if (status === "cancelled" || status === "canceled") {
|
|
219
|
-
return "canceled";
|
|
220
|
-
}
|
|
221
303
|
return "requires_more";
|
|
222
304
|
}
|
|
223
305
|
catch (error) {
|
|
@@ -230,26 +312,26 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
230
312
|
*/
|
|
231
313
|
async retrievePayment(paymentSessionData) {
|
|
232
314
|
try {
|
|
233
|
-
const
|
|
234
|
-
if (!
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
315
|
+
const orderId = paymentSessionData.order_id || paymentSessionData.transaction_id;
|
|
316
|
+
if (!orderId) {
|
|
317
|
+
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
318
|
+
}
|
|
319
|
+
const response = await this.client.getStatus(orderId);
|
|
320
|
+
// Map HDFC status to Medusa status
|
|
321
|
+
// HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
|
|
322
|
+
let medusaStatus = "requires_more";
|
|
323
|
+
if (response.status === "CHARGED") {
|
|
324
|
+
medusaStatus = "authorized";
|
|
325
|
+
}
|
|
326
|
+
else if (response.status === "PENDING" || response.status === "PENDING_VBV") {
|
|
327
|
+
medusaStatus = "pending";
|
|
328
|
+
}
|
|
329
|
+
else if (response.status === "AUTHORIZATION_FAILED" || response.status === "AUTHENTICATION_FAILED") {
|
|
330
|
+
medusaStatus = "error";
|
|
238
331
|
}
|
|
239
|
-
const response = await this.client.getStatus(transactionId);
|
|
240
332
|
return {
|
|
241
|
-
status:
|
|
242
|
-
? "authorized"
|
|
243
|
-
: response.status === "pending" || response.status === "processing"
|
|
244
|
-
? "pending"
|
|
245
|
-
: response.status === "failed" || response.status === "error"
|
|
246
|
-
? "error"
|
|
247
|
-
: response.status === "cancelled" || response.status === "canceled"
|
|
248
|
-
? "canceled"
|
|
249
|
-
: "requires_more"),
|
|
333
|
+
status: medusaStatus,
|
|
250
334
|
data: {
|
|
251
|
-
transaction_id: response.transaction_id,
|
|
252
|
-
payment_id: response.payment_id,
|
|
253
335
|
order_id: response.order_id,
|
|
254
336
|
amount: response.amount,
|
|
255
337
|
currency: response.currency,
|
|
@@ -262,9 +344,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
262
344
|
}
|
|
263
345
|
catch (error) {
|
|
264
346
|
this.logger_.error("HDFC retrieve payment error:", error);
|
|
265
|
-
|
|
266
|
-
error: error.message || "Failed to retrieve payment",
|
|
267
|
-
};
|
|
347
|
+
throw this.buildError("An error occurred in retrievePayment", error);
|
|
268
348
|
}
|
|
269
349
|
}
|
|
270
350
|
/**
|
|
@@ -277,9 +357,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
277
357
|
}
|
|
278
358
|
catch (error) {
|
|
279
359
|
this.logger_.error("HDFC update payment error:", error);
|
|
280
|
-
|
|
281
|
-
error: error.message || "Failed to update payment",
|
|
282
|
-
};
|
|
360
|
+
throw this.buildError("An error occurred in updatePayment", error);
|
|
283
361
|
}
|
|
284
362
|
}
|
|
285
363
|
/**
|
|
@@ -288,13 +366,50 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
288
366
|
async deletePayment(paymentSessionData) {
|
|
289
367
|
try {
|
|
290
368
|
// Cancel the payment if it's still pending
|
|
291
|
-
|
|
369
|
+
// cancelPayment now handles missing order_id gracefully
|
|
370
|
+
const cancelResult = await this.cancelPayment(paymentSessionData);
|
|
371
|
+
// Check if cancelResult is an error
|
|
372
|
+
if ('error' in cancelResult) {
|
|
373
|
+
// If it's an error, check if we can still clean up gracefully
|
|
374
|
+
const orderId = paymentSessionData.order_id ||
|
|
375
|
+
paymentSessionData.hdfc_order_id ||
|
|
376
|
+
paymentSessionData.transaction_id;
|
|
377
|
+
if (!orderId) {
|
|
378
|
+
// Session was never initialized, safe to delete
|
|
379
|
+
return {
|
|
380
|
+
status: "canceled",
|
|
381
|
+
data: {
|
|
382
|
+
status: "cancelled",
|
|
383
|
+
note: "Payment session was not fully initialized",
|
|
384
|
+
},
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
// Re-throw the error if we can't handle it gracefully
|
|
388
|
+
return cancelResult;
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
status: cancelResult.status,
|
|
392
|
+
data: cancelResult.data,
|
|
393
|
+
};
|
|
292
394
|
}
|
|
293
395
|
catch (error) {
|
|
294
396
|
this.logger_.error("HDFC delete payment error:", error);
|
|
295
|
-
return
|
|
296
|
-
|
|
297
|
-
|
|
397
|
+
// If cancelPayment fails, still try to return a success response for cleanup
|
|
398
|
+
// This prevents workflow failures when cleaning up old/incomplete sessions
|
|
399
|
+
const orderId = paymentSessionData.order_id ||
|
|
400
|
+
paymentSessionData.hdfc_order_id ||
|
|
401
|
+
paymentSessionData.transaction_id;
|
|
402
|
+
if (!orderId) {
|
|
403
|
+
// Session was never initialized, safe to delete
|
|
404
|
+
return {
|
|
405
|
+
status: "canceled",
|
|
406
|
+
data: {
|
|
407
|
+
status: "cancelled",
|
|
408
|
+
note: "Payment session was not fully initialized",
|
|
409
|
+
},
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
throw this.buildError("An error occurred in deletePayment", error);
|
|
298
413
|
}
|
|
299
414
|
}
|
|
300
415
|
/**
|
|
@@ -302,15 +417,13 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
302
417
|
*/
|
|
303
418
|
async getPaymentData(paymentSessionData) {
|
|
304
419
|
try {
|
|
305
|
-
const
|
|
306
|
-
if (!
|
|
420
|
+
const orderId = paymentSessionData.order_id || paymentSessionData.transaction_id;
|
|
421
|
+
if (!orderId) {
|
|
307
422
|
return paymentSessionData;
|
|
308
423
|
}
|
|
309
|
-
const response = await this.client.getStatus(
|
|
424
|
+
const response = await this.client.getStatus(orderId);
|
|
310
425
|
return {
|
|
311
426
|
...paymentSessionData,
|
|
312
|
-
transaction_id: response.transaction_id,
|
|
313
|
-
payment_id: response.payment_id,
|
|
314
427
|
order_id: response.order_id,
|
|
315
428
|
amount: response.amount,
|
|
316
429
|
currency: response.currency,
|
|
@@ -391,4 +504,4 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
391
504
|
}
|
|
392
505
|
HDFCPaymentProviderService.identifier = "hdfc";
|
|
393
506
|
exports.default = HDFCPaymentProviderService;
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXNFO0FBWXRFLHNEQUFpQztBQU9qQyxNQUFNLDBCQUEyQixTQUFRLCtCQUF1QjtJQU85RCxZQUNFLEVBQUUsTUFBTSxFQUF3QixFQUNoQyxPQUE0QjtRQUU1QixLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBVSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFNBQVM7U0FDOUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsT0FBZ0M7UUFFaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQ3BFLE9BVUMsQ0FBQTtZQUVILElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsT0FBTztvQkFDTCxLQUFLLEVBQUUscURBQXFEO2lCQUM3RCxDQUFBO1lBQ0gsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQzFDLFFBQVE7Z0JBQ1IsTUFBTSxFQUFFLElBQUks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
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EscURBR2tDO0FBR2xDLHNEQUFpQztBQU9qQyxNQUFNLDBCQUEyQixTQUFRLCtCQUF1QjtJQU85RCxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQTRCO1FBQ2pELElBQUksQ0FBQyxJQUFBLGlCQUFTLEVBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQTtRQUN4RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEsaUJBQVMsRUFBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQTtRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQ0UsRUFBRSxNQUFNLEVBQXdCLEVBQ2hDLE9BQTRCO1FBRTVCLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGdCQUFVLENBQUM7WUFDM0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCO1lBQ3RELFlBQVksRUFBRSxPQUFPLENBQUMsWUFB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
|