@nicogorga/medusa-payment-mercadopago 0.2.0 → 0.2.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.
- package/.medusa/server/src/api/store/mercadopago/payment/route.js +8 -3
- package/.medusa/server/src/providers/mercado-pago/service.js +67 -20
- package/.medusa/server/src/workflows/mercadopago/steps/create-payment.js +3 -3
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/src/api/store/mercadopago/payment/route.ts +9 -2
- package/src/providers/mercado-pago/service.ts +72 -22
- package/src/types/index.ts +10 -0
- package/src/workflows/mercadopago/steps/create-payment.ts +4 -3
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = void 0;
|
|
4
4
|
const create_payment_1 = require("../../../../workflows/mercadopago/workflows/create-payment");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
6
|
const POST = async (req, res) => {
|
|
6
7
|
const { paymentSessionId, paymentData } = req.validatedBody;
|
|
7
|
-
await (0, create_payment_1.createMercadopagoPaymentWorkflow)(req.scope).run({
|
|
8
|
+
const { result: paymentSession } = await (0, create_payment_1.createMercadopagoPaymentWorkflow)(req.scope).run({
|
|
8
9
|
input: { paymentSessionId, paymentData, customerId: req.auth_context?.actor_id }
|
|
9
10
|
});
|
|
10
|
-
|
|
11
|
+
const errorMessage = paymentSession.data?.error_message;
|
|
12
|
+
if (errorMessage) {
|
|
13
|
+
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.PAYMENT_AUTHORIZATION_ERROR, errorMessage);
|
|
14
|
+
}
|
|
15
|
+
return res.status(201).json();
|
|
11
16
|
};
|
|
12
17
|
exports.POST = POST;
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL21lcmNhZG9wYWdvL3BheW1lbnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0ZBQThHO0FBQzlHLHFEQUEwRTtBQUVuRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBZ0UsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDaEgsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7SUFDM0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsaURBQWdDLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNyRixLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFO0tBQ25GLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBbUMsQ0FBQTtJQUM3RSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLG1CQUFXLENBQUMsd0JBQWdCLENBQUMsMkJBQTJCLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDckYsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxDQUFDLENBQUE7QUFaWSxRQUFBLElBQUksUUFZaEIifQ==
|
|
@@ -74,9 +74,16 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
74
74
|
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.INVALID_DATA, "No payment session id found in data");
|
|
75
75
|
}
|
|
76
76
|
const payment = new mercadopago_1.Payment(this.client_);
|
|
77
|
-
const results = (await payment.search({
|
|
78
|
-
options: {
|
|
79
|
-
|
|
77
|
+
const results = ((await payment.search({
|
|
78
|
+
options: {
|
|
79
|
+
external_reference: paymentSessionId,
|
|
80
|
+
sort: 'date_approved',
|
|
81
|
+
criteria: 'desc'
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
// Ideally, this would be done in the call to Mercado Pago, but they don't expose an option
|
|
85
|
+
// to filter based on status
|
|
86
|
+
)?.results ?? []).filter(payment => payment.status === 'approved');
|
|
80
87
|
if (!results.length) {
|
|
81
88
|
this.logger_.warn(`No payment found in Mercado Pago for payment session: ${paymentSessionId}\n This could be caused by lag in Mercado Pago's system and doesn't mean the payment was not created`);
|
|
82
89
|
}
|
|
@@ -105,18 +112,21 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
105
112
|
const paymentId = input.data?.id;
|
|
106
113
|
const payment = new mercadopago_1.Payment(this.client_);
|
|
107
114
|
const paymentData = await payment.get({ id: paymentId });
|
|
108
|
-
|
|
109
|
-
switch (status) {
|
|
115
|
+
switch (paymentData.status) {
|
|
110
116
|
case "authorized":
|
|
111
|
-
return { status: "authorized" };
|
|
117
|
+
return { status: "authorized", data: paymentData };
|
|
112
118
|
case "approved":
|
|
113
|
-
|
|
114
|
-
return { status: "captured" };
|
|
119
|
+
return { status: "captured", data: paymentData };
|
|
115
120
|
case "cancelled":
|
|
116
121
|
case "refunded":
|
|
117
|
-
return { status: "canceled" };
|
|
122
|
+
return { status: "canceled", data: paymentData };
|
|
123
|
+
case "rejected":
|
|
124
|
+
return { status: "error", data: {
|
|
125
|
+
...paymentData,
|
|
126
|
+
error_message: this.sanitizeErrorMessage(paymentData)
|
|
127
|
+
} };
|
|
118
128
|
default:
|
|
119
|
-
return { status: "pending" };
|
|
129
|
+
return { status: "pending", data: paymentData };
|
|
120
130
|
}
|
|
121
131
|
}
|
|
122
132
|
async refundPayment(input) {
|
|
@@ -189,28 +199,36 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
189
199
|
if (!customer) {
|
|
190
200
|
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.INVALID_DATA, "No customer provided while creating account holder");
|
|
191
201
|
}
|
|
202
|
+
const customerClient = new mercadopago_1.Customer(this.client_);
|
|
203
|
+
let mercadopagoCustomer;
|
|
192
204
|
try {
|
|
193
|
-
const customerClient = new mercadopago_1.Customer(this.client_);
|
|
194
205
|
const body = {
|
|
195
206
|
email: customer.email,
|
|
196
207
|
first_name: customer.first_name || undefined,
|
|
197
208
|
last_name: customer.last_name || undefined,
|
|
198
209
|
date_registered: new Date().toISOString(),
|
|
199
210
|
};
|
|
200
|
-
|
|
211
|
+
mercadopagoCustomer = await customerClient.create({
|
|
201
212
|
body: body,
|
|
202
213
|
requestOptions: {
|
|
203
214
|
idempotencyKey: idempotency_key,
|
|
204
215
|
},
|
|
205
216
|
});
|
|
206
|
-
return {
|
|
207
|
-
id: createdCustomer.id,
|
|
208
|
-
data: createdCustomer
|
|
209
|
-
};
|
|
210
217
|
}
|
|
211
|
-
catch (
|
|
212
|
-
|
|
218
|
+
catch (e) {
|
|
219
|
+
const error = e;
|
|
220
|
+
if (!!error.cause?.find(c => c.code === '101')) {
|
|
221
|
+
const { results } = await customerClient.search({ options: { email: customer.email } });
|
|
222
|
+
mercadopagoCustomer = results[0];
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer");
|
|
226
|
+
}
|
|
213
227
|
}
|
|
228
|
+
return {
|
|
229
|
+
id: mercadopagoCustomer.id,
|
|
230
|
+
data: mercadopagoCustomer
|
|
231
|
+
};
|
|
214
232
|
}
|
|
215
233
|
async updateAccountHolder({ context, }) {
|
|
216
234
|
const { account_holder, customer, idempotency_key } = context;
|
|
@@ -285,12 +303,41 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
285
303
|
}
|
|
286
304
|
async createPayment({ paymentSessionId, payload, }) {
|
|
287
305
|
const payment = new mercadopago_1.Payment(this.client_);
|
|
288
|
-
|
|
306
|
+
const paymentResponse = await payment.create({
|
|
289
307
|
body: {
|
|
290
308
|
...payload,
|
|
291
309
|
external_reference: paymentSessionId,
|
|
292
310
|
},
|
|
293
311
|
});
|
|
312
|
+
const errorMessage = this.sanitizeErrorMessage(paymentResponse);
|
|
313
|
+
if (errorMessage) {
|
|
314
|
+
paymentResponse["error_message"] = errorMessage;
|
|
315
|
+
}
|
|
316
|
+
return paymentResponse;
|
|
317
|
+
}
|
|
318
|
+
sanitizeErrorMessage(payment) {
|
|
319
|
+
const status = payment.status;
|
|
320
|
+
const statusDetail = payment.status_detail;
|
|
321
|
+
if (status !== "rejected" || !statusDetail) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
switch (statusDetail) {
|
|
325
|
+
case "cc_rejected_bad_filled_card_number":
|
|
326
|
+
return "Numero de tarjeta incorrecto.";
|
|
327
|
+
case "cc_rejected_bad_filled_date":
|
|
328
|
+
return "Numero de expiracion incorrecto.";
|
|
329
|
+
case "cc_rejected_bad_filled_security_code":
|
|
330
|
+
return "Numero de seguridad incorrecto.";
|
|
331
|
+
case "cc_rejected_insufficient_amount":
|
|
332
|
+
case "insufficient_amount":
|
|
333
|
+
return "Saldo insuficiente.";
|
|
334
|
+
case "cc_rejected_max_attempts":
|
|
335
|
+
return "Has superado el maximo de intentos, prueba otra tarjeta.";
|
|
336
|
+
case "rejected_by_bank":
|
|
337
|
+
return "Tu banco ha rechazado el pago.";
|
|
338
|
+
default:
|
|
339
|
+
return "No hemos podido procesar el pago, intenta nuevamente o prueba otra tarjeta.";
|
|
340
|
+
}
|
|
294
341
|
}
|
|
295
342
|
validateWebhookSignature(data) {
|
|
296
343
|
const secret = this.options_.webhookSecret;
|
|
@@ -340,4 +387,4 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
|
|
|
340
387
|
}
|
|
341
388
|
MercadopagoProviderService.identifier = "mercadopago";
|
|
342
389
|
exports.default = MercadopagoProviderService;
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbWVyY2Fkby1wYWdvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFPbUM7QUFnQ25DLDJEQUFnRztBQUloRyxtQ0FBb0M7QUFVcEMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBMkM7SUFNbEYsWUFBWSxTQUErQixFQUFFLE9BQTJCO1FBQ3RFLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFpQixDQUFDO1lBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLHdCQUFnQixDQUFDLFlBQVksRUFDN0IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQTJCO1FBRTNCLE9BQU87WUFDTCxFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVO2dCQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENB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
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbWVyY2Fkby1wYWdvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFPbUM7QUFnQ25DLDJEQUFnRztBQUloRyxtQ0FBb0M7QUFXcEMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBMkM7SUFNbEYsWUFBWSxTQUErQixFQUFFLE9BQTJCO1FBQ3RFLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFpQixDQUFDO1lBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLHdCQUFnQixDQUFDLFlBQVksRUFDN0IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQTJCO1FBRTNCLE9BQU87WUFDTCxFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVO2dCQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENB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
|
|
@@ -22,12 +22,12 @@ exports.createPaymentStep = (0, workflows_sdk_1.createStep)("create-mercado-pago
|
|
|
22
22
|
paymentSessionId,
|
|
23
23
|
payload: paymentData,
|
|
24
24
|
});
|
|
25
|
-
await paymentModuleService.updatePaymentSession({
|
|
25
|
+
const updatedSession = await paymentModuleService.updatePaymentSession({
|
|
26
26
|
id: paymentSessionId,
|
|
27
27
|
amount: paymentSession.amount,
|
|
28
28
|
currency_code: paymentSession.currency_code,
|
|
29
29
|
data: paymentResponse,
|
|
30
30
|
});
|
|
31
|
-
return new workflows_sdk_1.StepResponse();
|
|
31
|
+
return new workflows_sdk_1.StepResponse(updatedSession);
|
|
32
32
|
});
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBheW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL21lcmNhZG9wYWdvL3N0ZXBzL2NyZWF0ZS1wYXltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUc3RSxxREFJbUM7QUFTdEIsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLDBCQUFVLEVBS3pDLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFekQsTUFBTSwwQkFBMEIsR0FBRyxTQUFTO1NBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkIsWUFBWTtTQUNYLHVCQUF1QixDQUFDLGdCQUFnQixDQUN2Qyw0QkFBNEIsQ0FDQyxDQUFDO0lBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FDdEUsZ0JBQWdCLEVBQ2hCO1FBQ0UsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQztRQUNuQyxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsZ0JBQWdCO1NBQ3JCO0tBQ0YsQ0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQix3QkFBZ0IsQ0FBQyxTQUFTLEVBQzFCLDJCQUEyQixnQkFBZ0IsZ0JBQWdCLENBQzVELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxhQUFhLENBQUM7UUFDckUsZ0JBQWdCO1FBQ2hCLE9BQU8sRUFBRSxXQUFXO0tBQ3JCLENBQUMsQ0FBQztJQUVILE1BQU0sY0FBYyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsb0JBQW9CLENBQUM7UUFDckUsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07UUFDN0IsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhO1FBQzNDLElBQUksRUFBRSxlQUFxRDtLQUM1RCxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksNEJBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQ0YsQ0FBQyJ9
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.2.2 - 2025-05-13
|
|
11
|
+
### Added
|
|
12
|
+
- Check if creating customer in MP fails because it already exists and if so, store it in Medusa
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- Fix authorizePayment, getting the approved payment in case of multiple attempts
|
|
16
|
+
|
|
17
|
+
## 0.2.1 - 2025-05-12
|
|
18
|
+
### Added
|
|
19
|
+
- New function to get a sanitized error message, based on the status and status_detail retuned in Mercado Pago PaymentResponse object
|
|
20
|
+
- Throw in /store/mercadopago/payment with sanitized error message if payment is rejected
|
|
21
|
+
|
|
10
22
|
## 0.2.0 - 2025-04-17
|
|
11
23
|
### Added
|
|
12
24
|
- Upgraded to Medusa 2.7.0
|
package/package.json
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { AuthenticatedMedusaRequest, MedusaRequest, MedusaResponse } from "@medusajs/framework";
|
|
2
2
|
import { PostStoreMercadopagoPaymentType } from "./validators";
|
|
3
3
|
import { createMercadopagoPaymentWorkflow } from "../../../../workflows/mercadopago/workflows/create-payment";
|
|
4
|
+
import { MedusaError, MedusaErrorTypes } from "@medusajs/framework/utils";
|
|
4
5
|
|
|
5
6
|
export const POST = async (req: AuthenticatedMedusaRequest<PostStoreMercadopagoPaymentType>, res: MedusaResponse) => {
|
|
6
7
|
const { paymentSessionId, paymentData } = req.validatedBody
|
|
7
|
-
await createMercadopagoPaymentWorkflow(req.scope).run({
|
|
8
|
+
const { result: paymentSession } = await createMercadopagoPaymentWorkflow(req.scope).run({
|
|
8
9
|
input: { paymentSessionId, paymentData, customerId: req.auth_context?.actor_id }
|
|
9
10
|
});
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
const errorMessage = paymentSession.data?.error_message as string | undefined
|
|
13
|
+
if (errorMessage) {
|
|
14
|
+
throw new MedusaError(MedusaErrorTypes.PAYMENT_AUTHORIZATION_ERROR, errorMessage)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return res.status(201).json();
|
|
11
18
|
}
|
|
@@ -40,12 +40,13 @@ import {
|
|
|
40
40
|
import MercadoPagoConfig, { Customer, CustomerCard, Payment, PaymentRefund } from "mercadopago";
|
|
41
41
|
import { PaymentCreateRequest } from "mercadopago/dist/clients/payment/create/types";
|
|
42
42
|
import { PaymentSearchResult } from "mercadopago/dist/clients/payment/search/types";
|
|
43
|
-
import { MercadopagoOptions, MercadopagoWebhookPayload } from "../../types";
|
|
43
|
+
import { MercadopagoError, MercadopagoOptions, MercadopagoWebhookPayload } from "../../types";
|
|
44
44
|
import { createHmac } from "crypto";
|
|
45
45
|
import { Logger } from "@medusajs/medusa";
|
|
46
|
-
import { CustomerRequestBody } from "mercadopago/dist/clients/customer/commonTypes";
|
|
46
|
+
import { CustomerRequestBody, CustomerResponse } from "mercadopago/dist/clients/customer/commonTypes";
|
|
47
47
|
import { CustomerUpdateData } from "mercadopago/dist/clients/customer/update/types";
|
|
48
48
|
import { PostStoreMercadopagoPaymentType } from "../../api/store/mercadopago/payment/validators";
|
|
49
|
+
import { PaymentResponse } from "mercadopago/dist/clients/payment/commonTypes";
|
|
49
50
|
|
|
50
51
|
type InjectedDependencies = {
|
|
51
52
|
logger: Logger;
|
|
@@ -112,11 +113,17 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
|
|
|
112
113
|
|
|
113
114
|
const payment = new Payment(this.client_);
|
|
114
115
|
const results =
|
|
115
|
-
(
|
|
116
|
+
((
|
|
116
117
|
await payment.search({
|
|
117
|
-
options: {
|
|
118
|
+
options: {
|
|
119
|
+
external_reference: paymentSessionId,
|
|
120
|
+
sort: 'date_approved',
|
|
121
|
+
criteria: 'desc'
|
|
122
|
+
},
|
|
118
123
|
})
|
|
119
|
-
|
|
124
|
+
// Ideally, this would be done in the call to Mercado Pago, but they don't expose an option
|
|
125
|
+
// to filter based on status
|
|
126
|
+
)?.results ?? []).filter(payment => payment.status === 'approved');
|
|
120
127
|
if (!results.length) {
|
|
121
128
|
this.logger_.warn(
|
|
122
129
|
`No payment found in Mercado Pago for payment session: ${paymentSessionId}\n This could be caused by lag in Mercado Pago's system and doesn't mean the payment was not created`
|
|
@@ -154,21 +161,23 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
|
|
|
154
161
|
): Promise<GetPaymentStatusOutput> {
|
|
155
162
|
const paymentId = input.data?.id;
|
|
156
163
|
const payment = new Payment(this.client_);
|
|
157
|
-
const paymentData = await payment.get({ id: paymentId as string })
|
|
158
|
-
const status = paymentData.status;
|
|
164
|
+
const paymentData = await payment.get({ id: paymentId as string }) as unknown as Record<string, unknown>;
|
|
159
165
|
|
|
160
|
-
switch (status) {
|
|
166
|
+
switch (paymentData.status) {
|
|
161
167
|
case "authorized":
|
|
162
|
-
return { status: "authorized" };
|
|
168
|
+
return { status: "authorized", data: paymentData };
|
|
163
169
|
case "approved":
|
|
164
|
-
|
|
165
|
-
return { status: "captured" };
|
|
166
|
-
|
|
170
|
+
return { status: "captured", data: paymentData };
|
|
167
171
|
case "cancelled":
|
|
168
172
|
case "refunded":
|
|
169
|
-
return { status: "canceled" };
|
|
173
|
+
return { status: "canceled", data: paymentData };
|
|
174
|
+
case "rejected":
|
|
175
|
+
return { status: "error", data: {
|
|
176
|
+
...paymentData,
|
|
177
|
+
error_message: this.sanitizeErrorMessage(paymentData as unknown as PaymentResponse)
|
|
178
|
+
}}
|
|
170
179
|
default:
|
|
171
|
-
return { status: "pending" };
|
|
180
|
+
return { status: "pending", data: paymentData };
|
|
172
181
|
}
|
|
173
182
|
}
|
|
174
183
|
|
|
@@ -264,8 +273,10 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
|
|
|
264
273
|
throw new MedusaError(MedusaErrorTypes.INVALID_DATA, "No customer provided while creating account holder")
|
|
265
274
|
}
|
|
266
275
|
|
|
276
|
+
const customerClient = new Customer(this.client_);
|
|
277
|
+
let mercadopagoCustomer: CustomerResponse | undefined
|
|
278
|
+
|
|
267
279
|
try {
|
|
268
|
-
const customerClient = new Customer(this.client_);
|
|
269
280
|
const body: CustomerRequestBody = {
|
|
270
281
|
email: customer.email,
|
|
271
282
|
first_name: customer.first_name || undefined,
|
|
@@ -273,19 +284,26 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
|
|
|
273
284
|
date_registered: new Date().toISOString(),
|
|
274
285
|
};
|
|
275
286
|
|
|
276
|
-
|
|
287
|
+
mercadopagoCustomer = await customerClient.create({
|
|
277
288
|
body: body,
|
|
278
289
|
requestOptions: {
|
|
279
290
|
idempotencyKey: idempotency_key,
|
|
280
291
|
},
|
|
281
292
|
});
|
|
293
|
+
} catch (e) {
|
|
294
|
+
const error = e as MercadopagoError
|
|
282
295
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
296
|
+
if (!!error.cause?.find(c => c.code === '101')) {
|
|
297
|
+
const { results } = await customerClient.search({ options: { email: customer.email}})
|
|
298
|
+
mercadopagoCustomer = results![0]
|
|
299
|
+
} else {
|
|
300
|
+
throw new MedusaError(MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer")
|
|
286
301
|
}
|
|
287
|
-
}
|
|
288
|
-
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return {
|
|
305
|
+
id: mercadopagoCustomer!.id!,
|
|
306
|
+
data: mercadopagoCustomer as unknown as Record<string, unknown>
|
|
289
307
|
}
|
|
290
308
|
}
|
|
291
309
|
|
|
@@ -396,12 +414,44 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
|
|
|
396
414
|
payload: PostStoreMercadopagoPaymentType['paymentData'];
|
|
397
415
|
}) {
|
|
398
416
|
const payment = new Payment(this.client_);
|
|
399
|
-
|
|
417
|
+
const paymentResponse = await payment.create({
|
|
400
418
|
body: {
|
|
401
419
|
...payload,
|
|
402
420
|
external_reference: paymentSessionId,
|
|
403
421
|
},
|
|
404
422
|
});
|
|
423
|
+
|
|
424
|
+
const errorMessage = this.sanitizeErrorMessage(paymentResponse)
|
|
425
|
+
if (errorMessage) {
|
|
426
|
+
paymentResponse["error_message"] = errorMessage
|
|
427
|
+
}
|
|
428
|
+
return paymentResponse
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
protected sanitizeErrorMessage(payment: PaymentResponse) {
|
|
432
|
+
const status = payment.status;
|
|
433
|
+
const statusDetail = payment.status_detail;
|
|
434
|
+
if (status !== "rejected" || !statusDetail) {
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
switch (statusDetail) {
|
|
439
|
+
case "cc_rejected_bad_filled_card_number":
|
|
440
|
+
return "Numero de tarjeta incorrecto.";
|
|
441
|
+
case "cc_rejected_bad_filled_date":
|
|
442
|
+
return "Numero de expiracion incorrecto.";
|
|
443
|
+
case "cc_rejected_bad_filled_security_code":
|
|
444
|
+
return "Numero de seguridad incorrecto.";
|
|
445
|
+
case "cc_rejected_insufficient_amount":
|
|
446
|
+
case "insufficient_amount":
|
|
447
|
+
return "Saldo insuficiente.";
|
|
448
|
+
case "cc_rejected_max_attempts":
|
|
449
|
+
return "Has superado el maximo de intentos, prueba otra tarjeta.";
|
|
450
|
+
case "rejected_by_bank":
|
|
451
|
+
return "Tu banco ha rechazado el pago.";
|
|
452
|
+
default:
|
|
453
|
+
return "No hemos podido procesar el pago, intenta nuevamente o prueba otra tarjeta.";
|
|
454
|
+
}
|
|
405
455
|
}
|
|
406
456
|
|
|
407
457
|
protected validateWebhookSignature(data: ProviderWebhookPayload["payload"]) {
|
package/src/types/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
Modules,
|
|
8
8
|
} from "@medusajs/framework/utils";
|
|
9
9
|
import { PostStoreMercadopagoPaymentType } from "../../../api/store/mercadopago/payment/validators";
|
|
10
|
+
import { PaymentSessionDTO } from "@medusajs/framework/types";
|
|
10
11
|
|
|
11
12
|
type CreatePaymentStepInput = {
|
|
12
13
|
paymentSessionId: string;
|
|
@@ -15,7 +16,7 @@ type CreatePaymentStepInput = {
|
|
|
15
16
|
|
|
16
17
|
export const createPaymentStep = createStep<
|
|
17
18
|
CreatePaymentStepInput,
|
|
18
|
-
|
|
19
|
+
PaymentSessionDTO,
|
|
19
20
|
undefined
|
|
20
21
|
>(
|
|
21
22
|
"create-mercado-pago-payment",
|
|
@@ -50,12 +51,12 @@ export const createPaymentStep = createStep<
|
|
|
50
51
|
payload: paymentData,
|
|
51
52
|
});
|
|
52
53
|
|
|
53
|
-
await paymentModuleService.updatePaymentSession({
|
|
54
|
+
const updatedSession = await paymentModuleService.updatePaymentSession({
|
|
54
55
|
id: paymentSessionId,
|
|
55
56
|
amount: paymentSession.amount,
|
|
56
57
|
currency_code: paymentSession.currency_code,
|
|
57
58
|
data: paymentResponse as unknown as Record<string, unknown>,
|
|
58
59
|
});
|
|
59
|
-
return new StepResponse();
|
|
60
|
+
return new StepResponse(updatedSession);
|
|
60
61
|
}
|
|
61
62
|
);
|