medusa-hdfc-payment 0.0.7 → 0.0.9
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.
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handleError = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/utils");
|
|
5
|
+
function getHdfcErrorInfo(data) {
|
|
6
|
+
if (data == null || typeof data !== "object") {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const info = data.error_info;
|
|
10
|
+
if (info == null || typeof info !== "object" || Array.isArray(info)) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
return info;
|
|
14
|
+
}
|
|
5
15
|
const handleError = (error, logger) => {
|
|
6
16
|
const log = (msg) => {
|
|
7
17
|
if (logger?.error)
|
|
@@ -53,7 +63,21 @@ const handleError = (error, logger) => {
|
|
|
53
63
|
logger.debug(`[HDFC Error Handler] Response: ${JSON.stringify(fullErrorData)}`);
|
|
54
64
|
}
|
|
55
65
|
if (code === 401) {
|
|
56
|
-
|
|
66
|
+
const responseData = fullErrorData ?? axiosError.response?.data;
|
|
67
|
+
const bodySnippet = JSON.stringify(responseData ?? {});
|
|
68
|
+
log(`[HDFC Error Handler] 401 access_denied — full response (no secrets): ${bodySnippet.slice(0, 2000)}`);
|
|
69
|
+
const errInfo = getHdfcErrorInfo(responseData);
|
|
70
|
+
const devMsg = (errInfo?.developer_message ?? "").trim();
|
|
71
|
+
const devLower = devMsg.toLowerCase();
|
|
72
|
+
// HDFC often returns HTTP 401 + access_denied for product/account rules, not only bad API keys.
|
|
73
|
+
if (devLower.includes("disabled for refund") ||
|
|
74
|
+
devLower.includes("merchant disabled")) {
|
|
75
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `HDFC: refunds are not enabled for this merchant (${devMsg || "Merchant disabled for refund"}). Ask HDFC / your bank to enable refund API access on the SmartGateway merchant profile.`);
|
|
76
|
+
}
|
|
77
|
+
if (devMsg) {
|
|
78
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, `HDFC rejected the request: ${devMsg}`);
|
|
79
|
+
}
|
|
80
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Authentication failed with HDFC payment gateway (check API key, merchant id, sandbox vs production, and that x-customerid is sent — see HDFC client logs).");
|
|
57
81
|
}
|
|
58
82
|
if (code === 403) {
|
|
59
83
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Access forbidden. Please check your HDFC API credentials.");
|
|
@@ -94,4 +118,4 @@ const handleError = (error, logger) => {
|
|
|
94
118
|
: utils_1.MedusaError.Types.UNEXPECTED_STATE, `HDFC payment error: ${message}`);
|
|
95
119
|
};
|
|
96
120
|
exports.handleError = handleError;
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9oZGZjL2NsaWVudC9oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQTZDO0FBVzdDLFNBQVMsZ0JBQWdCLENBQUMsSUFBYTtJQUNyQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0MsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFJLElBQWdDLENBQUMsVUFBVSxDQUFBO0lBQ3pELElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxPQUFPLElBQXFCLENBQUE7QUFDOUIsQ0FBQztBQUVNLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYyxFQUFFLE1BQWUsRUFBUyxFQUFFO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFRLEVBQUU7UUFDaEMsSUFBSSxNQUFNLEVBQUUsS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7O1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFBO0lBQ0QsMEVBQTBFO0lBQzFFLElBQUksS0FBSyxZQUFZLG1CQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsd0RBQXdEO0lBQ3hELE1BQU0sWUFBWSxHQUNoQixLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFBO0lBQ3ZF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
|
|
@@ -17,6 +17,7 @@ class HDFCClient {
|
|
|
17
17
|
this.paymentPageClientId = options.payment_page_client_id;
|
|
18
18
|
this.environment = options.environment || "sandbox";
|
|
19
19
|
this.logger = options.logger;
|
|
20
|
+
this.defaultApiCustomerId = options.default_api_customer_id;
|
|
20
21
|
// Correct base URLs from official integration kit
|
|
21
22
|
const baseURL = this.environment === "production"
|
|
22
23
|
? "https://smartgateway.hdfc.bank.in"
|
|
@@ -137,15 +138,30 @@ class HDFCClient {
|
|
|
137
138
|
}
|
|
138
139
|
/**
|
|
139
140
|
* Refund a captured payment
|
|
141
|
+
*
|
|
142
|
+
* HDFC Smart Gateway: POST /orders/{order_id}/refunds with `x-resellerid` and `x-customerid` headers.
|
|
143
|
+
* @see https://smartgateway.hdfcbank.com/docs/smartgateway-api-ref-basicauth/docs/apis/refund-order-api
|
|
140
144
|
*/
|
|
141
145
|
async refund(data) {
|
|
142
146
|
try {
|
|
147
|
+
const uniqueRequestId = data.unique_request_id || `refund_${Date.now()}`;
|
|
143
148
|
const requestPayload = {
|
|
144
|
-
|
|
149
|
+
unique_request_id: uniqueRequestId,
|
|
145
150
|
amount: data.amount,
|
|
146
|
-
unique_request_id: data.unique_request_id || `refund_${Date.now()}`,
|
|
147
151
|
};
|
|
148
|
-
const
|
|
152
|
+
const customerId = data.customer_id ?? this.defaultApiCustomerId;
|
|
153
|
+
const hdfcHeaders = {
|
|
154
|
+
"x-resellerid": "hdfc_reseller",
|
|
155
|
+
};
|
|
156
|
+
if (customerId) {
|
|
157
|
+
hdfcHeaders["x-customerid"] = customerId;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.logger?.warn?.("[HDFC Client] Refund — missing x-customerid (set customer_id on payment data or default_api_customer_id in provider options). HDFC may return 401.");
|
|
161
|
+
}
|
|
162
|
+
const path = `/orders/${encodeURIComponent(data.order_id)}/refunds`;
|
|
163
|
+
this.logger?.debug?.(`[HDFC Client] Refund - POST ${path}`);
|
|
164
|
+
const response = await this.axios.post(path, requestPayload, { headers: hdfcHeaders });
|
|
149
165
|
return response.data;
|
|
150
166
|
}
|
|
151
167
|
catch (error) {
|
|
@@ -155,10 +171,19 @@ class HDFCClient {
|
|
|
155
171
|
}
|
|
156
172
|
/**
|
|
157
173
|
* Get payment status
|
|
174
|
+
*
|
|
175
|
+
* HDFC expects GET /orders/{order_id} with `x-resellerid` and `x-customerid` on server-to-server calls.
|
|
158
176
|
*/
|
|
159
|
-
async getStatus(orderId) {
|
|
177
|
+
async getStatus(orderId, customerId) {
|
|
160
178
|
try {
|
|
161
|
-
const
|
|
179
|
+
const cid = customerId ?? this.defaultApiCustomerId;
|
|
180
|
+
const hdfcHeaders = {
|
|
181
|
+
"x-resellerid": "hdfc_reseller",
|
|
182
|
+
};
|
|
183
|
+
if (cid) {
|
|
184
|
+
hdfcHeaders["x-customerid"] = cid;
|
|
185
|
+
}
|
|
186
|
+
const response = await this.axios.get(`/orders/${encodeURIComponent(orderId)}`, { headers: hdfcHeaders });
|
|
162
187
|
return response.data;
|
|
163
188
|
}
|
|
164
189
|
catch (error) {
|
|
@@ -224,4 +249,4 @@ class HDFCClient {
|
|
|
224
249
|
}
|
|
225
250
|
}
|
|
226
251
|
exports.default = HDFCClient;
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2hkZmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE2QztBQUM3QyxpREFBNEM7QUFlNUMsTUFBcUIsVUFBVTtJQVM3QixZQUFZLE9BQTBCO1FBSDlCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFJeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0ZBQWtGLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFBO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBRTVCLGtEQUFrRDtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxLQUFLLFlBQVk7WUFDL0MsQ0FBQyxDQUFDLG1DQUFtQztZQUNyQyxDQUFDLENBQUMsc0NBQXNDLENBQUE7UUFFMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU87WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsUUFBUSxFQUFFLGtCQUFrQjthQUM3QjtZ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
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2hkZmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE2QztBQUM3QyxpREFBNEM7QUFlNUMsTUFBcUIsVUFBVTtJQVU3QixZQUFZLE9BQTBCO1FBSjlCLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFLeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsa0ZBQWtGLENBQ25GLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFBO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUE7UUFDbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUE7UUFFM0Qsa0RBQWtEO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssWUFBWTtZQUMvQyxDQUFDLENBQUMsbUNBQW1DO1lBQ3JDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQTtRQUUxQyxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEIsT0FBTztZQUNQLE9BQU8sRUFBRTtnQkFD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
|
|
@@ -6,6 +6,63 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const crypto_1 = require("crypto");
|
|
8
8
|
const client_1 = __importDefault(require("./client"));
|
|
9
|
+
function normalizeRefundAmount(amount) {
|
|
10
|
+
if (amount == null) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
if (typeof amount === "number" && !Number.isNaN(amount)) {
|
|
14
|
+
return Math.round(amount);
|
|
15
|
+
}
|
|
16
|
+
if (typeof amount === "string" && amount.trim() !== "") {
|
|
17
|
+
return Math.round(Number(amount));
|
|
18
|
+
}
|
|
19
|
+
if (typeof amount === "object" && amount !== null) {
|
|
20
|
+
const rec = amount;
|
|
21
|
+
if (typeof rec.numeric === "number" && !Number.isNaN(rec.numeric)) {
|
|
22
|
+
return Math.round(rec.numeric);
|
|
23
|
+
}
|
|
24
|
+
if (typeof rec.value === "number" && !Number.isNaN(rec.value)) {
|
|
25
|
+
return Math.round(rec.value);
|
|
26
|
+
}
|
|
27
|
+
if (typeof rec.value === "string" && rec.value.trim() !== "") {
|
|
28
|
+
return Math.round(Number(rec.value));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const n = Number(amount);
|
|
32
|
+
return Number.isFinite(n) ? Math.round(n) : 0;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* HDFC `unique_request_id`: max 21 chars, avoid special characters (per gateway docs).
|
|
36
|
+
* Map Medusa's refund idempotency key into a stable idempotent id for HDFC.
|
|
37
|
+
*/
|
|
38
|
+
function hdfcRefundUniqueRequestId(medusaIdempotencyKey) {
|
|
39
|
+
const max = 21;
|
|
40
|
+
if (medusaIdempotencyKey &&
|
|
41
|
+
medusaIdempotencyKey.length > 0 &&
|
|
42
|
+
medusaIdempotencyKey.length <= max &&
|
|
43
|
+
/^[a-zA-Z0-9_]+$/.test(medusaIdempotencyKey)) {
|
|
44
|
+
return medusaIdempotencyKey;
|
|
45
|
+
}
|
|
46
|
+
if (medusaIdempotencyKey) {
|
|
47
|
+
const h = (0, crypto_1.createHash)("sha256").update(medusaIdempotencyKey, "utf8").digest("hex");
|
|
48
|
+
const suffix = h.slice(0, max - 1);
|
|
49
|
+
return `r${suffix}`;
|
|
50
|
+
}
|
|
51
|
+
return `r${Date.now().toString(36)}`.slice(0, max);
|
|
52
|
+
}
|
|
53
|
+
function isRefundPaymentInputLike(value, secondArg) {
|
|
54
|
+
if (secondArg !== undefined) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (value == null || typeof value !== "object") {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const data = value.data;
|
|
61
|
+
return (data != null &&
|
|
62
|
+
typeof data === "object" &&
|
|
63
|
+
!Array.isArray(data) &&
|
|
64
|
+
"amount" in value);
|
|
65
|
+
}
|
|
9
66
|
class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
10
67
|
static validateOptions(options) {
|
|
11
68
|
if (!(0, utils_1.isDefined)(options.merchant_id)) {
|
|
@@ -28,9 +85,21 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
28
85
|
payment_page_client_id: options.payment_page_client_id,
|
|
29
86
|
response_key: options.response_key,
|
|
30
87
|
environment: options.environment || "sandbox",
|
|
88
|
+
default_api_customer_id: options.default_api_customer_id,
|
|
31
89
|
logger: logger,
|
|
32
90
|
});
|
|
33
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* HDFC server APIs require `x-customerid`; prefer value on payment/session data.
|
|
94
|
+
*/
|
|
95
|
+
resolveHdfcApiCustomerId(data) {
|
|
96
|
+
const fromData = (typeof data.customer_id === "string" && data.customer_id) ||
|
|
97
|
+
(typeof data.customerId === "string" && data.customerId);
|
|
98
|
+
if (fromData) {
|
|
99
|
+
return fromData;
|
|
100
|
+
}
|
|
101
|
+
return this.options_.default_api_customer_id;
|
|
102
|
+
}
|
|
34
103
|
buildError(message, error) {
|
|
35
104
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
36
105
|
return new Error(`${message}: ${errorMessage}`.trim());
|
|
@@ -132,7 +201,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
132
201
|
if (isDuplicate) {
|
|
133
202
|
this.logger_.warn(`[HDFC Payment] Initiate - HDFC returned duplicate order_id error for ${order_id}. Attempting to reuse existing HDFC session.`);
|
|
134
203
|
try {
|
|
135
|
-
const existingStatus = await this.client.getStatus(order_id);
|
|
204
|
+
const existingStatus = await this.client.getStatus(order_id, customerId ?? this.options_.default_api_customer_id);
|
|
136
205
|
// Build a synthetic initiate response from the existing order
|
|
137
206
|
const existingPaymentUrl = existingStatus.payment_links
|
|
138
207
|
? existingStatus.payment_links.web
|
|
@@ -185,6 +254,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
185
254
|
medusa_session_id: medusaSessionIdInResponse || sessionId, // The Medusa session ID we sent to HDFC
|
|
186
255
|
// Store both for clarity and to handle redirect scenarios
|
|
187
256
|
has_hdfc_order_id: !!hdfcOrderId, // Flag to indicate if we have the real HDFC order ID
|
|
257
|
+
...(customerId && { customer_id: customerId }),
|
|
188
258
|
};
|
|
189
259
|
this.logger_.info(`[HDFC Payment] Initiate - HDFC API Response Analysis:`);
|
|
190
260
|
this.logger_.info(`[HDFC Payment] Initiate - response.id (HDFC order ID): ${hdfcOrderId || 'NOT PROVIDED'}`);
|
|
@@ -248,6 +318,10 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
248
318
|
const storedMedusaSessionId = sessionData.medusa_session_id || safePaymentSessionData.medusa_session_id;
|
|
249
319
|
const storedSessionId = sessionData.session_id || safePaymentSessionData.session_id;
|
|
250
320
|
const hasHdfcOrderId = sessionData.has_hdfc_order_id || safePaymentSessionData.has_hdfc_order_id;
|
|
321
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId({
|
|
322
|
+
...sessionData,
|
|
323
|
+
...safePaymentSessionData,
|
|
324
|
+
});
|
|
251
325
|
this.logger_.info(`[HDFC Payment] Authorize - Stored Payment Session Data Analysis:`);
|
|
252
326
|
this.logger_.info(`[HDFC Payment] Authorize - order_id: ${storedOrderId || 'NOT SET'}`);
|
|
253
327
|
this.logger_.info(`[HDFC Payment] Authorize - hdfc_order_id: ${storedHdfcOrderId || 'NOT SET'}`);
|
|
@@ -344,6 +418,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
344
418
|
currency: redirectCurrency || sessionData.currency || safePaymentSessionData.currency,
|
|
345
419
|
status: redirectStatus,
|
|
346
420
|
source: "redirect", // Indicate this came from redirect response
|
|
421
|
+
...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
|
|
347
422
|
},
|
|
348
423
|
};
|
|
349
424
|
}
|
|
@@ -372,7 +447,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
372
447
|
let apiError = null;
|
|
373
448
|
const tryGetStatus = async (id) => {
|
|
374
449
|
try {
|
|
375
|
-
const apiResponse = await this.client.getStatus(id);
|
|
450
|
+
const apiResponse = await this.client.getStatus(id, hdfcApiCustomerId);
|
|
376
451
|
return {
|
|
377
452
|
status: apiResponse.status,
|
|
378
453
|
order_id: apiResponse.order_id,
|
|
@@ -420,6 +495,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
420
495
|
status: "CHARGED",
|
|
421
496
|
source: "fallback",
|
|
422
497
|
api_error: "Order Not Found - pass redirect params from HDFC return URL for reliable verification",
|
|
498
|
+
...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
|
|
423
499
|
},
|
|
424
500
|
};
|
|
425
501
|
}
|
|
@@ -461,6 +537,7 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
461
537
|
currency: response.currency || sessionData.currency || safePaymentSessionData.currency || "INR",
|
|
462
538
|
status: response.status,
|
|
463
539
|
source: "api", // Indicate this came from API call
|
|
540
|
+
...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
|
|
464
541
|
},
|
|
465
542
|
};
|
|
466
543
|
}
|
|
@@ -482,9 +559,10 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
482
559
|
if (!orderId) {
|
|
483
560
|
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
484
561
|
}
|
|
562
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
|
|
485
563
|
// HDFC captures automatically when payment is successful
|
|
486
564
|
// Just check the order status
|
|
487
|
-
const response = await this.client.getStatus(orderId);
|
|
565
|
+
const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
|
|
488
566
|
// If status is CHARGED, payment is captured
|
|
489
567
|
const isCaptured = response.status === "CHARGED";
|
|
490
568
|
return {
|
|
@@ -504,17 +582,44 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
504
582
|
}
|
|
505
583
|
/**
|
|
506
584
|
* Refund a payment
|
|
585
|
+
*
|
|
586
|
+
* Compatible with:
|
|
587
|
+
* - Medusa v2.4 style: `refundPayment(payment.data, amount)`
|
|
588
|
+
* - Medusa ≥2.13 style: `refundPayment({ data, amount, context })` where `context.idempotency_key` is the refund id
|
|
507
589
|
*/
|
|
508
|
-
async refundPayment(
|
|
590
|
+
async refundPayment(paymentSessionDataOrInput, refundAmountArg) {
|
|
509
591
|
try {
|
|
510
|
-
|
|
592
|
+
let data;
|
|
593
|
+
let refundAmount;
|
|
594
|
+
let idempotencyKey;
|
|
595
|
+
let contextCustomerId;
|
|
596
|
+
if (isRefundPaymentInputLike(paymentSessionDataOrInput, refundAmountArg)) {
|
|
597
|
+
const input = paymentSessionDataOrInput;
|
|
598
|
+
data = input.data;
|
|
599
|
+
refundAmount = normalizeRefundAmount(input.amount);
|
|
600
|
+
idempotencyKey = input.context?.idempotency_key;
|
|
601
|
+
const cust = input.context?.customer;
|
|
602
|
+
contextCustomerId = typeof cust?.id === "string" ? cust.id : undefined;
|
|
603
|
+
}
|
|
604
|
+
else {
|
|
605
|
+
data = this.getSessionOrPaymentData(paymentSessionDataOrInput);
|
|
606
|
+
refundAmount = normalizeRefundAmount(refundAmountArg);
|
|
607
|
+
}
|
|
511
608
|
const orderId = data.order_id || data.transaction_id;
|
|
512
609
|
if (!orderId) {
|
|
513
610
|
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
514
611
|
}
|
|
612
|
+
const customerResolutionSource = {
|
|
613
|
+
...data,
|
|
614
|
+
...(contextCustomerId ? { customer_id: contextCustomerId } : {}),
|
|
615
|
+
};
|
|
616
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(customerResolutionSource);
|
|
617
|
+
const uniqueRequestId = hdfcRefundUniqueRequestId(idempotencyKey);
|
|
515
618
|
const response = await this.client.refund({
|
|
516
619
|
order_id: orderId,
|
|
517
|
-
amount:
|
|
620
|
+
amount: refundAmount,
|
|
621
|
+
unique_request_id: uniqueRequestId,
|
|
622
|
+
...(hdfcApiCustomerId && { customer_id: hdfcApiCustomerId }),
|
|
518
623
|
});
|
|
519
624
|
return {
|
|
520
625
|
status: "captured",
|
|
@@ -601,7 +706,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
601
706
|
if (!orderId) {
|
|
602
707
|
return "error";
|
|
603
708
|
}
|
|
604
|
-
const
|
|
709
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
|
|
710
|
+
const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
|
|
605
711
|
// Map HDFC statuses to Medusa statuses
|
|
606
712
|
// HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
|
|
607
713
|
const status = response.status.toUpperCase();
|
|
@@ -631,7 +737,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
631
737
|
if (!orderId) {
|
|
632
738
|
throw this.buildError("Missing order_id in payment session data", new Error("Missing order_id"));
|
|
633
739
|
}
|
|
634
|
-
const
|
|
740
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
|
|
741
|
+
const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
|
|
635
742
|
// Map HDFC status to Medusa status. CHARGED = already captured at gateway.
|
|
636
743
|
// HDFC statuses: CHARGED, PENDING, PENDING_VBV, AUTHORIZATION_FAILED, AUTHENTICATION_FAILED
|
|
637
744
|
let medusaStatus = "requires_more";
|
|
@@ -692,20 +799,24 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
692
799
|
nestedData.session_id ||
|
|
693
800
|
contextData.medusa_session_id ||
|
|
694
801
|
contextData.session_id;
|
|
802
|
+
const updatePaymentCustomerId = this.resolveHdfcApiCustomerId({
|
|
803
|
+
...nestedData,
|
|
804
|
+
...contextData,
|
|
805
|
+
});
|
|
695
806
|
if (existingOrderId) {
|
|
696
807
|
this.logger_.info(`[HDFC Payment] UpdatePayment - Existing HDFC order found: ${existingOrderId}. Checking status before deciding to re-initiate.`);
|
|
697
808
|
// Check whether the order is still in a non-terminal state.
|
|
698
809
|
// Try the HDFC internal ID first, then fall back to the merchant order_id.
|
|
699
810
|
let currentStatus;
|
|
700
811
|
try {
|
|
701
|
-
const statusResponse = await this.client.getStatus(existingOrderId);
|
|
812
|
+
const statusResponse = await this.client.getStatus(existingOrderId, updatePaymentCustomerId);
|
|
702
813
|
currentStatus = statusResponse.status?.toUpperCase();
|
|
703
814
|
}
|
|
704
815
|
catch {
|
|
705
816
|
// Retry with merchant order_id if HDFC internal ID lookup fails
|
|
706
817
|
if (merchantOrderId && merchantOrderId !== existingOrderId) {
|
|
707
818
|
try {
|
|
708
|
-
const fallbackResponse = await this.client.getStatus(merchantOrderId);
|
|
819
|
+
const fallbackResponse = await this.client.getStatus(merchantOrderId, updatePaymentCustomerId);
|
|
709
820
|
currentStatus = fallbackResponse.status?.toUpperCase();
|
|
710
821
|
}
|
|
711
822
|
catch {
|
|
@@ -819,7 +930,8 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
819
930
|
if (!orderId) {
|
|
820
931
|
return data;
|
|
821
932
|
}
|
|
822
|
-
const
|
|
933
|
+
const hdfcApiCustomerId = this.resolveHdfcApiCustomerId(data);
|
|
934
|
+
const response = await this.client.getStatus(orderId, hdfcApiCustomerId);
|
|
823
935
|
return {
|
|
824
936
|
...data,
|
|
825
937
|
order_id: response.order_id,
|
|
@@ -829,6 +941,9 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
829
941
|
payment_method: response.payment_method,
|
|
830
942
|
card_last4: response.card_last4,
|
|
831
943
|
card_brand: response.card_brand,
|
|
944
|
+
...(typeof response.customer_id === "string" && response.customer_id
|
|
945
|
+
? { customer_id: response.customer_id }
|
|
946
|
+
: {}),
|
|
832
947
|
};
|
|
833
948
|
}
|
|
834
949
|
catch (error) {
|
|
@@ -1011,4 +1126,4 @@ class HDFCPaymentProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
1011
1126
|
}
|
|
1012
1127
|
HDFCPaymentProviderService.identifier = "hdfc";
|
|
1013
1128
|
exports.default = HDFCPaymentProviderService;
|
|
1014
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EscURBR2tDO0FBRWxDLG1DQUFtQztBQUVuQyxzREFBaUM7QUFPakMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBdUI7SUFPOUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUE0QjtRQUNqRCxJQUFJLENBQUMsSUFBQSxpQkFBUyxFQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEsaUJBQVMsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFBLGlCQUFTLEVBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUE7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFRCxZQUNFLEVBQUUsTUFBTSxFQUF3QixFQUNoQyxPQUE0QjtRQUU1QixLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBVSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQjtZQUN0RCxZQUFZLEVBQUUs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
|
|
1129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvaGRmYy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EscURBR2tDO0FBRWxDLG1DQUErQztBQUUvQyxzREFBaUM7QUFpQmpDLFNBQVMscUJBQXFCLENBQUMsTUFBZTtJQUM1QyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFpQyxDQUFBO1FBQzdDLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxD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
|
package/README.md
CHANGED
|
@@ -1,60 +1,34 @@
|
|
|
1
|
-
#
|
|
1
|
+
# medusa-hdfc-payment
|
|
2
|
+
> Medusa v2 payment provider plugin integrating HDFC SmartGateway for checkout initiation, authorization, status checks, cancellation, refunds, and webhook action mapping.
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
<strong>HDFC Payment Gateway Integration for Medusa v2 Stores</strong>
|
|
5
|
-
</p>
|
|
4
|
+
## Plugin Overview
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
<a href="https://www.npmjs.com/package/medusa-hdfc-payment">
|
|
9
|
-
<img src="https://img.shields.io/npm/v/medusa-hdfc-payment?color=blue&style=flat-square" alt="NPM Version">
|
|
10
|
-
</a>
|
|
11
|
-
<a href="https://www.npmjs.com/package/medusa-hdfc-payment">
|
|
12
|
-
<img src="https://img.shields.io/npm/dw/medusa-hdfc-payment?style=flat-square" alt="NPM Downloads">
|
|
13
|
-
</a>
|
|
14
|
-
<a href="https://github.com/your-org/medusa-hdfc-payment/blob/main/LICENSE">
|
|
15
|
-
<img src="https://img.shields.io/github/license/your-org/medusa-hdfc-payment?style=flat-square" alt="License">
|
|
16
|
-
</a>
|
|
17
|
-
</p>
|
|
6
|
+
`medusa-hdfc-payment` is a Medusa Payment Module provider (`identifier: "hdfc"`) implemented as `HDFCPaymentProviderService` and `HDFCClient`.
|
|
18
7
|
|
|
19
|
-
|
|
8
|
+
### What it does
|
|
20
9
|
|
|
21
|
-
|
|
10
|
+
- Registers a payment provider under `Modules.PAYMENT`.
|
|
11
|
+
- Creates HDFC payment sessions through `/session`.
|
|
12
|
+
- Stores HDFC/Medusa correlation IDs in payment session data.
|
|
13
|
+
- Authorizes payments from redirect data first, with API status fallback (`GET /orders/{id}`).
|
|
14
|
+
- Treats HDFC `CHARGED` as `captured` in Medusa (auto-capture model).
|
|
15
|
+
- Supports refunds via `POST /orders/{order_id}/refunds`.
|
|
16
|
+
- Supports cancellation attempts across multiple HDFC endpoint/id combinations.
|
|
17
|
+
- Maps webhook payloads to Medusa payment actions (`authorized`, `failed`, `captured`, `not_supported`).
|
|
22
18
|
|
|
23
|
-
|
|
19
|
+
### Problem it solves
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
Provides an HDFC-specific implementation of Medusa’s payment provider contract so stores can process HDFC gateway payments through normal Medusa checkout/payment flows.
|
|
26
22
|
|
|
27
|
-
|
|
23
|
+
### Medusa version
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
Built for **Medusa v2** (package/dev dependencies target `@medusajs/framework`/`@medusajs/medusa` `2.4.0`).
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
| :--- | :--- |
|
|
33
|
-
| **💳 Payment Authorization** | Authorize payments securely through HDFC's payment gateway |
|
|
34
|
-
| **✅ Payment Capture** | Capture authorized payments to complete transactions |
|
|
35
|
-
| **↩️ Refund Support** | Process full or partial refunds for captured payments |
|
|
36
|
-
| **🚫 Payment Cancellation** | Cancel pending payments before completion |
|
|
37
|
-
| **📊 Status Tracking** | Real-time payment status tracking and updates |
|
|
38
|
-
| **🔐 Secure Integration** | Secure API authentication with merchant credentials |
|
|
39
|
-
| **🌍 Sandbox & Production** | Support for both sandbox and production environments |
|
|
40
|
-
| **📱 Webhook Support** | Handle payment webhooks for real-time status updates |
|
|
41
|
-
| **👤 Account holder stubs** | Implements `createAccountHolder` / `deleteAccountHolder` so Medusa does not warn; saved payment methods are not supported |
|
|
42
|
-
|
|
43
|
-
## 📋 Prerequisites
|
|
44
|
-
|
|
45
|
-
Before you begin, ensure you have:
|
|
46
|
-
|
|
47
|
-
1. A **[Medusa v2](https://docs.medusajs.com/)** server set up
|
|
48
|
-
2. An **HDFC Bank merchant account** with payment gateway access
|
|
49
|
-
3. **HDFC API credentials**:
|
|
50
|
-
- Merchant ID
|
|
51
|
-
- API Key
|
|
52
|
-
- Payment Page Client ID
|
|
53
|
-
- Response Key (optional; for redirect and webhook signature verification)
|
|
27
|
+
---
|
|
54
28
|
|
|
55
|
-
##
|
|
29
|
+
## Installation & Setup
|
|
56
30
|
|
|
57
|
-
Install
|
|
31
|
+
### Install
|
|
58
32
|
|
|
59
33
|
```bash
|
|
60
34
|
npm install medusa-hdfc-payment
|
|
@@ -62,34 +36,12 @@ npm install medusa-hdfc-payment
|
|
|
62
36
|
yarn add medusa-hdfc-payment
|
|
63
37
|
```
|
|
64
38
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
### 1. Environment Variables
|
|
68
|
-
|
|
69
|
-
Add your HDFC credentials to your `.env` file.
|
|
70
|
-
|
|
71
|
-
> [!WARNING]
|
|
72
|
-
> **Security Note**: Never commit your actual API credentials to version control (git).
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
HDFC_MERCHANT_ID="your_merchant_id"
|
|
76
|
-
HDFC_API_KEY="your_api_key"
|
|
77
|
-
HDFC_PAYMENT_PAGE_CLIENT_ID="your_payment_page_client_id"
|
|
78
|
-
HDFC_RESPONSE_KEY="your_response_key" # optional; for redirect/webhook signature verification
|
|
79
|
-
HDFC_ENVIRONMENT="sandbox" # or "production"
|
|
80
|
-
HDFC_RETURN_URL="https://yourstore.com/payment/return"
|
|
81
|
-
HDFC_CANCEL_URL="https://yourstore.com/payment/cancel"
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
> **Note:** `HDFC_RESPONSE_KEY` is optional. When set, the plugin verifies redirect and webhook payloads using HMAC-SHA256. Omit it if your HDFC setup does not use response signing.
|
|
39
|
+
### Register provider in `medusa-config.ts`
|
|
85
40
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
Register the plugin in your `medusa-config.js` (or `medusa-config.ts`) file. Add it to the `modules` section for the payment provider.
|
|
41
|
+
```ts
|
|
42
|
+
import { defineConfig } from "@medusajs/framework"
|
|
89
43
|
|
|
90
|
-
|
|
91
|
-
module.exports = defineConfig({
|
|
92
|
-
// ... other config
|
|
44
|
+
export default defineConfig({
|
|
93
45
|
modules: [
|
|
94
46
|
{
|
|
95
47
|
resolve: "@medusajs/medusa/payment",
|
|
@@ -99,250 +51,263 @@ module.exports = defineConfig({
|
|
|
99
51
|
resolve: "medusa-hdfc-payment",
|
|
100
52
|
id: "hdfc",
|
|
101
53
|
options: {
|
|
102
|
-
merchant_id:
|
|
103
|
-
api_key:
|
|
104
|
-
payment_page_client_id:
|
|
105
|
-
response_key:
|
|
106
|
-
environment:
|
|
107
|
-
return_url:
|
|
108
|
-
cancel_url:
|
|
54
|
+
merchant_id: "your_merchant_id",
|
|
55
|
+
api_key: "your_api_key",
|
|
56
|
+
payment_page_client_id: "your_payment_page_client_id",
|
|
57
|
+
response_key: "optional_response_key",
|
|
58
|
+
environment: "sandbox",
|
|
59
|
+
return_url: "https://your-store.com/payment/return",
|
|
60
|
+
cancel_url: "https://your-store.com/payment/cancel",
|
|
61
|
+
default_api_customer_id: "optional_customer_id_for_hdfc_server_apis",
|
|
109
62
|
},
|
|
110
63
|
},
|
|
111
64
|
],
|
|
112
65
|
},
|
|
113
66
|
},
|
|
114
67
|
],
|
|
115
|
-
})
|
|
68
|
+
})
|
|
116
69
|
```
|
|
117
70
|
|
|
118
|
-
###
|
|
71
|
+
### Migrations
|
|
119
72
|
|
|
120
|
-
|
|
73
|
+
No custom models/migrations are present in this plugin source.
|
|
121
74
|
|
|
122
|
-
|
|
123
|
-
import { defineConfig } from "@medusajs/framework"
|
|
75
|
+
---
|
|
124
76
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
77
|
+
## Configuration (`config.ts` / plugin options)
|
|
78
|
+
|
|
79
|
+
Provider options are defined in `src/providers/hdfc/types/index.ts` as `HDFCProviderOptions`.
|
|
80
|
+
|
|
81
|
+
| Option | Type | Required | Default | Description |
|
|
82
|
+
|---|---|---|---|---|
|
|
83
|
+
| `merchant_id` | `string` | Yes | - | HDFC merchant identifier (`x-merchantid` header). |
|
|
84
|
+
| `api_key` | `string` | Yes | - | HDFC API key used for Basic Auth (`api_key:` base64). |
|
|
85
|
+
| `payment_page_client_id` | `string` | Yes | - | Client ID sent when creating payment sessions. |
|
|
86
|
+
| `response_key` | `string` | Optional | `undefined` | Used for HMAC signature verification on redirect/webhook-like payload data. |
|
|
87
|
+
| `environment` | `"sandbox" \| "production"` | Optional | `"sandbox"` | Controls HDFC base URL (`hdfcuat` vs production). |
|
|
88
|
+
| `return_url` | `string` | Optional | `undefined` | Default redirect return URL. |
|
|
89
|
+
| `cancel_url` | `string` | Optional | `undefined` | Default cancel URL. |
|
|
90
|
+
| `default_api_customer_id` | `string` | Optional | `undefined` | Fallback customer id used for HDFC server APIs requiring `x-customerid`. |
|
|
91
|
+
|
|
92
|
+
### Example config block
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
{
|
|
96
|
+
resolve: "medusa-hdfc-payment",
|
|
97
|
+
id: "hdfc",
|
|
98
|
+
options: {
|
|
99
|
+
merchant_id: "mid_xxx",
|
|
100
|
+
api_key: "key_xxx",
|
|
101
|
+
payment_page_client_id: "ppc_xxx",
|
|
102
|
+
response_key: "optional_hmac_key",
|
|
103
|
+
environment: "sandbox",
|
|
104
|
+
return_url: "https://store.example.com/payment/return",
|
|
105
|
+
cancel_url: "https://store.example.com/payment/cancel",
|
|
106
|
+
default_api_customer_id: "cust_api_fallback",
|
|
107
|
+
},
|
|
108
|
+
}
|
|
150
109
|
```
|
|
151
110
|
|
|
152
|
-
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Environment Variables
|
|
114
|
+
|
|
115
|
+
No `process.env.*` references are used in this plugin source code under `src`.
|
|
116
|
+
|
|
117
|
+
You typically pass env values into provider `options` from your host app `medusa-config.ts`.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## REST APIs / Routes
|
|
122
|
+
|
|
123
|
+
This plugin does **not** define Medusa file-based `/store/...` or `/admin/...` routes inside its own `src`.
|
|
153
124
|
|
|
154
|
-
|
|
125
|
+
Instead, it performs outbound HDFC API calls from the payment provider lifecycle.
|
|
155
126
|
|
|
156
|
-
|
|
157
|
-
2. Go to **Settings** → **Regions**
|
|
158
|
-
3. Select the region where you want to enable HDFC payments
|
|
159
|
-
4. In the **Payment Providers** section, ensure `hdfc` is enabled
|
|
160
|
-
5. Save changes
|
|
127
|
+
### External HDFC API endpoints used by the client
|
|
161
128
|
|
|
162
|
-
|
|
129
|
+
| Method | Endpoint | Purpose |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| `POST` | `/session` | Initiate payment session and receive payment link. |
|
|
132
|
+
| `GET` | `/orders/{order_id}` | Retrieve order/payment status. |
|
|
133
|
+
| `POST` | `/orders/{order_id}/refunds` | Create refund request. |
|
|
134
|
+
| `POST` | `/orders/{id}/cancel` | Cancel order/session (attempt path 1). |
|
|
135
|
+
| `POST` | `/payments/{id}/cancel` | Cancel fallback (legacy path). |
|
|
136
|
+
| `POST` | `/payments/{transaction_id}/capture` | Capture call (client capability; plugin mostly relies on CHARGED/auto-capture). |
|
|
137
|
+
| `POST` | `/payments/authorize` | Authorize call method is implemented in client (not primary path used by service authorize flow). |
|
|
163
138
|
|
|
164
|
-
|
|
139
|
+
> ⚠️ Note: Since this provider is consumed by Medusa payment workflows, the user-facing endpoints are Medusa core payment/cart endpoints, not plugin-owned API routes.
|
|
165
140
|
|
|
166
|
-
|
|
167
|
-
2. **Redirect**: Customer is sent to HDFC’s payment page (`payment_url` from initiate)
|
|
168
|
-
3. **Return**: After payment, HDFC redirects to your `return_url` with query params (e.g. `status`, `order_id`, `signature`)
|
|
169
|
-
4. **Authorize**: Your frontend must call the Medusa authorize endpoint **and pass those redirect params** in the request body so the plugin can verify the payment without calling the Order Status API
|
|
170
|
-
5. **Capture / Refund**: Capture after order confirmation; refunds via admin or API
|
|
141
|
+
### cURL examples for important external calls
|
|
171
142
|
|
|
172
|
-
|
|
143
|
+
```bash
|
|
144
|
+
# HDFC session creation (conceptual; plugin does this internally)
|
|
145
|
+
curl -X POST "https://smartgateway.hdfcuat.bank.in/session" \
|
|
146
|
+
-H "Authorization: Basic <base64(api_key:)>" \
|
|
147
|
+
-H "x-merchantid: <merchant_id>" \
|
|
148
|
+
-H "version: 2024-06-24" \
|
|
149
|
+
-H "Content-Type: application/json" \
|
|
150
|
+
-d '{
|
|
151
|
+
"payment_page_client_id": "ppc_xxx",
|
|
152
|
+
"order_id": "payses_xxx",
|
|
153
|
+
"amount": 1200,
|
|
154
|
+
"currency": "INR",
|
|
155
|
+
"return_url": "https://store.example.com/payment/return"
|
|
156
|
+
}'
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# HDFC order status (conceptual; plugin uses this for authorize/status/retrieve)
|
|
161
|
+
curl -X GET "https://smartgateway.hdfcuat.bank.in/orders/<order_id>" \
|
|
162
|
+
-H "Authorization: Basic <base64(api_key:)>" \
|
|
163
|
+
-H "x-merchantid: <merchant_id>" \
|
|
164
|
+
-H "x-resellerid: hdfc_reseller" \
|
|
165
|
+
-H "x-customerid: <customer_id>" \
|
|
166
|
+
-H "version: 2024-06-24"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
173
170
|
|
|
174
|
-
|
|
171
|
+
## Services
|
|
175
172
|
|
|
176
|
-
|
|
173
|
+
### `HDFCPaymentProviderService` (`src/providers/hdfc/service.ts`)
|
|
177
174
|
|
|
178
|
-
|
|
179
|
-
- Create a payment session with HDFC
|
|
180
|
-
- Redirect customer to HDFC payment page (if required)
|
|
181
|
-
- Authorize the payment amount
|
|
175
|
+
Extends `AbstractPaymentProvider` and implements Medusa payment provider contract.
|
|
182
176
|
|
|
183
|
-
|
|
177
|
+
Key methods:
|
|
184
178
|
|
|
185
|
-
|
|
179
|
+
- `initiatePayment(context)`
|
|
180
|
+
Creates HDFC session; persists `order_id`, `hdfc_order_id`, `medusa_session_id`, `payment_url`.
|
|
186
181
|
|
|
187
|
-
-
|
|
188
|
-
|
|
189
|
-
- Order is marked paid as soon as authorization succeeds (CHARGED).
|
|
182
|
+
- `authorizePayment(paymentSessionData, context)`
|
|
183
|
+
Uses redirect payload first (`status`, `order_id`, `signature`), verifies signature when `response_key` is set, then falls back to API status lookup.
|
|
190
184
|
|
|
191
|
-
|
|
185
|
+
- `capturePayment(paymentSessionData)`
|
|
186
|
+
Checks HDFC status and maps `CHARGED` to `captured`.
|
|
192
187
|
|
|
193
|
-
|
|
188
|
+
- `refundPayment(paymentSessionDataOrInput, refundAmountArg?)`
|
|
189
|
+
Supports both old/new Medusa signatures; derives idempotent HDFC `unique_request_id`.
|
|
194
190
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
2. Go to the payment section
|
|
198
|
-
3. Click "Refund" and specify the amount
|
|
199
|
-
4. The refund will be processed through HDFC
|
|
191
|
+
- `cancelPayment(paymentSessionData)`
|
|
192
|
+
Attempts cancel via HDFC order/payment cancel endpoints and returns canceled status for Medusa cleanup.
|
|
200
193
|
|
|
201
|
-
|
|
194
|
+
- `getPaymentStatus(paymentSessionData)`
|
|
195
|
+
Maps HDFC states to Medusa status enum (`authorized`, `pending`, `error`, etc.).
|
|
202
196
|
|
|
203
|
-
|
|
197
|
+
- `retrievePayment(paymentSessionData)`
|
|
198
|
+
Returns normalized payment/session details from HDFC status.
|
|
204
199
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
3. Add your webhook URL. Medusa exposes payment provider webhooks at:
|
|
208
|
-
- **`https://your-backend.com/hooks/payment/hdfc_hdfc`**
|
|
209
|
-
(Use your API base URL; the path is `/hooks/payment/[identifier]_[provider]` — both are `hdfc` when the provider is registered with `id: "hdfc"`.)
|
|
210
|
-
4. Select events to receive (e.g. payment completed, refunded, failed).
|
|
200
|
+
- `updatePayment(context)`
|
|
201
|
+
Reuses existing non-terminal HDFC order instead of creating duplicates; re-initiates only when terminal.
|
|
211
202
|
|
|
212
|
-
|
|
203
|
+
- `deletePayment(paymentSessionData)`
|
|
204
|
+
Calls cancel and handles incomplete sessions gracefully.
|
|
213
205
|
|
|
214
|
-
|
|
206
|
+
- `createAccountHolder(...)` / `deleteAccountHolder(...)`
|
|
207
|
+
Stub/no-op style support to satisfy provider expectations.
|
|
215
208
|
|
|
216
|
-
|
|
209
|
+
- `getPaymentData(paymentSessionData)`
|
|
210
|
+
Hydrates stored data with latest status details where possible.
|
|
217
211
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
3. **Logging** – The plugin uses Medusa’s logger when available. In production, set your log level to `info` or `warn` so that sensitive request/response payloads are not written to logs (verbose payload logging is at `debug` only).
|
|
221
|
-
4. **Secrets** – Keep `HDFC_MERCHANT_ID`, `HDFC_API_KEY`, `HDFC_PAYMENT_PAGE_CLIENT_ID`, and `HDFC_RESPONSE_KEY` in environment variables or a secrets manager; never commit them.
|
|
212
|
+
- `getWebhookActionAndData(payload)`
|
|
213
|
+
Parses HDFC webhook payload variants and maps to Medusa actions.
|
|
222
214
|
|
|
223
|
-
|
|
215
|
+
### `HDFCClient` (`src/providers/hdfc/client/index.ts`)
|
|
224
216
|
|
|
225
|
-
|
|
217
|
+
Low-level HTTP wrapper around HDFC API with axios interceptors and error mapping.
|
|
226
218
|
|
|
227
|
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
219
|
+
Key methods:
|
|
220
|
+
- `initiate(data)`
|
|
221
|
+
- `authorize(data)`
|
|
222
|
+
- `capture(data)`
|
|
223
|
+
- `refund(data)`
|
|
224
|
+
- `getStatus(orderId, customerId?)`
|
|
225
|
+
- `cancel(hdfcInternalId, merchantOrderId?)`
|
|
231
226
|
|
|
232
|
-
|
|
233
|
-
- Ensure the payment context includes all required fields
|
|
234
|
-
- Verify the order data is properly formatted
|
|
235
|
-
- Check Medusa logs for detailed error messages
|
|
227
|
+
### `handleError` helper (`src/providers/hdfc/client/handle-error.ts`)
|
|
236
228
|
|
|
237
|
-
|
|
229
|
+
Converts network/HTTP/HDFC-specific errors into `MedusaError` types with improved diagnostics.
|
|
238
230
|
|
|
239
|
-
|
|
240
|
-
- **Cause:** Authorize was called without the redirect params that HDFC sends to your return URL (e.g. `status`, `order_id`, `signature`). The plugin then calls the HDFC Order Status API, which may return 400 "Order Not Found" depending on environment or ID format.
|
|
241
|
-
- **Fix:** On the page HDFC redirects to (your `return_url`), read the query params and pass them into the Medusa authorize payment-session request (e.g. in the request body as `context` or equivalent so the plugin receives `status`, `order_id`, etc.). Then the plugin can authorize from the redirect data and does not need to call the status API.
|
|
242
|
-
- The plugin will still authorize using stored session data if the API returns Order Not Found (fallback), but passing redirect params is the recommended approach.
|
|
231
|
+
---
|
|
243
232
|
|
|
244
|
-
|
|
245
|
-
- Ensure payment was successfully authorized before attempting capture
|
|
246
|
-
- Verify payment session data is properly stored (the plugin reads from both flat and nested `data` shapes)
|
|
247
|
-
- Check that the transaction ID or order ID is returned from authorization
|
|
233
|
+
## Workflows & Steps (Medusa v2)
|
|
248
234
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
- Check if the authorization has expired
|
|
252
|
-
- Ensure sufficient funds are available
|
|
253
|
-
- Review HDFC API logs for specific error codes
|
|
235
|
+
No custom plugin workflows/steps are defined.
|
|
236
|
+
This provider integrates into Medusa’s payment workflows through provider lifecycle methods.
|
|
254
237
|
|
|
255
|
-
|
|
238
|
+
---
|
|
256
239
|
|
|
257
|
-
|
|
258
|
-
- Verify the payment was successfully captured before refunding
|
|
259
|
-
- Check refund amount doesn't exceed captured amount
|
|
260
|
-
- Ensure refund is within the allowed time window
|
|
261
|
-
- Review HDFC refund policies
|
|
240
|
+
## Subscribers / Event Hooks
|
|
262
241
|
|
|
263
|
-
|
|
242
|
+
No subscribers are defined in this plugin source.
|
|
264
243
|
|
|
265
|
-
|
|
266
|
-
- **Sandbox**: Use for testing with test credentials
|
|
267
|
-
- **Production**: Use for live transactions with production credentials
|
|
268
|
-
- Ensure you're using the correct credentials for your selected environment
|
|
269
|
-
- API endpoints differ between environments
|
|
244
|
+
Webhook behavior is implemented via provider method `getWebhookActionAndData(...)`.
|
|
270
245
|
|
|
271
|
-
|
|
246
|
+
---
|
|
272
247
|
|
|
273
|
-
|
|
274
|
-
- When the customer switches from HDFC to another method (or creates a new session), Medusa cancels the previous HDFC session. The plugin calls HDFC’s cancel endpoint; HDFC UAT/production may return **404** (order not found or cancel not supported). This is treated as success so the flow continues; only non-404 errors are logged as warnings.
|
|
248
|
+
## Admin UI / Widgets
|
|
275
249
|
|
|
276
|
-
|
|
277
|
-
- HDFC API has rate limits per merchant
|
|
278
|
-
- Implement retry logic with exponential backoff
|
|
279
|
-
- Contact HDFC support to increase rate limits if needed
|
|
250
|
+
No admin widgets/routes/ui extensions are defined in this plugin source.
|
|
280
251
|
|
|
281
|
-
|
|
282
|
-
- Check your server's internet connectivity
|
|
283
|
-
- Verify HDFC API endpoints are accessible
|
|
284
|
-
- Increase timeout values if needed (default: 30 seconds)
|
|
252
|
+
---
|
|
285
253
|
|
|
286
|
-
##
|
|
254
|
+
## Models & Entities
|
|
287
255
|
|
|
288
|
-
|
|
256
|
+
No custom models/entities are defined in this plugin source.
|
|
289
257
|
|
|
290
|
-
|
|
258
|
+
---
|
|
291
259
|
|
|
292
|
-
|
|
293
|
-
- `authorizePayment()` - Authorize payment
|
|
294
|
-
- `capturePayment()` - Capture authorized payment
|
|
295
|
-
- `refundPayment()` - Process refund
|
|
296
|
-
- `cancelPayment()` - Cancel payment
|
|
297
|
-
- `getPaymentStatus()` - Get payment status
|
|
298
|
-
- `retrievePayment()` - Retrieve payment details
|
|
299
|
-
- `updatePayment()` - Update payment session
|
|
300
|
-
- `deletePayment()` - Delete payment session
|
|
301
|
-
- `getWebhookActionAndData()` - Process webhook events
|
|
260
|
+
## Use Cases & Examples
|
|
302
261
|
|
|
303
|
-
|
|
262
|
+
1. **HDFC checkout redirect payments**
|
|
263
|
+
- Scenario: customer pays via HDFC-hosted payment page.
|
|
264
|
+
- Feature: `initiatePayment` returns `payment_url` and tracks HDFC order IDs.
|
|
304
265
|
|
|
305
|
-
|
|
266
|
+
2. **Auto-capture payment flow**
|
|
267
|
+
- Scenario: online payment should be treated as paid immediately after success.
|
|
268
|
+
- Feature: `authorizePayment` maps `CHARGED` to `captured`.
|
|
306
269
|
|
|
307
|
-
|
|
308
|
-
-
|
|
309
|
-
- `
|
|
310
|
-
- `error` - Payment failed
|
|
311
|
-
- `canceled` - Payment cancelled
|
|
270
|
+
3. **Refund with idempotency safety**
|
|
271
|
+
- Scenario: robust refunds across retries.
|
|
272
|
+
- Feature: `refundPayment` normalizes amount and generates bounded `unique_request_id`.
|
|
312
273
|
|
|
313
|
-
|
|
274
|
+
4. **Cart/session update resilience**
|
|
275
|
+
- Scenario: cart changes should not create duplicate HDFC pending orders.
|
|
276
|
+
- Feature: `updatePayment` reuses non-terminal HDFC orders.
|
|
314
277
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
4. **Monitor transactions**: Regularly review payment logs
|
|
319
|
-
5. **Keep credentials secure**: Rotate API keys periodically
|
|
278
|
+
5. **Gateway webhook reconciliation**
|
|
279
|
+
- Scenario: external payment updates need Medusa action mapping.
|
|
280
|
+
- Feature: `getWebhookActionAndData` handles status/event variants and maps actions.
|
|
320
281
|
|
|
321
|
-
|
|
282
|
+
---
|
|
322
283
|
|
|
323
|
-
|
|
284
|
+
## Troubleshooting
|
|
324
285
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
329
|
-
5. Open a Pull Request
|
|
286
|
+
### `Required option ... is missing in HDFC plugin`
|
|
287
|
+
- **Cause:** missing `merchant_id`, `api_key`, or `payment_page_client_id`.
|
|
288
|
+
- **Fix:** provide required provider `options` in `medusa-config.ts`.
|
|
330
289
|
|
|
331
|
-
|
|
290
|
+
### 401 / authentication issues from HDFC
|
|
291
|
+
- **Cause:** invalid credentials, environment mismatch, or missing customer header requirements for server APIs.
|
|
292
|
+
- **Fix:** verify API key/merchant id pair, use correct `environment`, provide `customer_id` or `default_api_customer_id` for calls requiring `x-customerid`.
|
|
332
293
|
|
|
333
|
-
|
|
294
|
+
### Authorization fails or falls back unexpectedly
|
|
295
|
+
- **Cause:** redirect data (`status`, `order_id`, `signature`) not passed in authorize context.
|
|
296
|
+
- **Fix:** forward HDFC return params into authorize call context for first-path verification.
|
|
334
297
|
|
|
335
|
-
|
|
298
|
+
### Signature verification failures
|
|
299
|
+
- **Cause:** mismatched `response_key` or tampered/incomplete signed fields.
|
|
300
|
+
- **Fix:** ensure configured `response_key` matches HDFC and all expected params are passed.
|
|
336
301
|
|
|
337
|
-
|
|
302
|
+
### Duplicate/abandoned HDFC orders
|
|
303
|
+
- **Cause:** repeated initiation for same checkout/session.
|
|
304
|
+
- **Fix:** provider already attempts duplicate recovery and reuses pending orders in `updatePayment`; confirm session data is preserved and status checks succeed.
|
|
338
305
|
|
|
339
|
-
|
|
340
|
-
- **HDFC
|
|
341
|
-
- **
|
|
306
|
+
### Cancel returns warnings
|
|
307
|
+
- **Cause:** HDFC may reject cancel for some states/ids.
|
|
308
|
+
- **Fix:** provider treats some cancel failures as non-fatal for Medusa cleanup; inspect logs if strict cancellation is required operationally.
|
|
342
309
|
|
|
343
310
|
---
|
|
344
311
|
|
|
345
|
-
|
|
346
|
-
Built with ❤️ for the Medusa community
|
|
347
|
-
</p>
|
|
312
|
+
|
|
348
313
|
|