@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.
@@ -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
- return res.status(201).json({});
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL21lcmNhZG9wYWdvL3BheW1lbnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0ZBQThHO0FBRXZHLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFnRSxFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNoSCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQTtJQUMzRCxNQUFNLElBQUEsaURBQWdDLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNsRCxLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFO0tBQ25GLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFBO0FBTlksUUFBQSxJQUFJLFFBTWhCIn0=
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: { external_reference: paymentSessionId },
79
- }))?.results ?? [];
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
- const status = paymentData.status;
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
- case "in_mediation":
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
- const createdCustomer = await customerClient.create({
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 (error) {
212
- throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer");
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
- return payment.create({
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBheW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL21lcmNhZG9wYWdvL3N0ZXBzL2NyZWF0ZS1wYXltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUc3RSxxREFJbUM7QUFRdEIsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLDBCQUFVLEVBS3pDLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFekQsTUFBTSwwQkFBMEIsR0FBRyxTQUFTO1NBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkIsWUFBWTtTQUNYLHVCQUF1QixDQUFDLGdCQUFnQixDQUN2Qyw0QkFBNEIsQ0FDQyxDQUFDO0lBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FDdEUsZ0JBQWdCLEVBQ2hCO1FBQ0UsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQztRQUNuQyxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsZ0JBQWdCO1NBQ3JCO0tBQ0YsQ0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQix3QkFBZ0IsQ0FBQyxTQUFTLEVBQzFCLDJCQUEyQixnQkFBZ0IsZ0JBQWdCLENBQzVELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxhQUFhLENBQUM7UUFDckUsZ0JBQWdCO1FBQ2hCLE9BQU8sRUFBRSxXQUFXO0tBQ3JCLENBQUMsQ0FBQztJQUVILE1BQU0sb0JBQW9CLENBQUMsb0JBQW9CLENBQUM7UUFDOUMsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07UUFDN0IsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhO1FBQzNDLElBQUksRUFBRSxlQUFxRDtLQUM1RCxDQUFDLENBQUM7SUFDSCxPQUFPLElBQUksNEJBQVksRUFBRSxDQUFDO0FBQzVCLENBQUMsQ0FDRixDQUFDIn0=
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@nicogorga/medusa-payment-mercadopago",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Mercado Pago payment provider plugin for MedusaJS",
5
5
  "author": "Nicolas Gorga",
6
6
  "license": "MIT",
@@ -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
- return res.status(201).json({});
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: { external_reference: paymentSessionId },
118
+ options: {
119
+ external_reference: paymentSessionId,
120
+ sort: 'date_approved',
121
+ criteria: 'desc'
122
+ },
118
123
  })
119
- )?.results ?? [];
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
- case "in_mediation":
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
- const createdCustomer = await customerClient.create({
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
- return {
284
- id: createdCustomer.id!,
285
- data: createdCustomer as unknown as Record<string, unknown>
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
- } catch (error) {
288
- throw new MedusaError(MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer")
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
- return payment.create({
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"]) {
@@ -15,4 +15,14 @@ export type MercadopagoWebhookPayload = {
15
15
  data: {
16
16
  id: string;
17
17
  }
18
+ }
19
+
20
+ export type MercadopagoError = {
21
+ error: string
22
+ message: string
23
+ status: string
24
+ cause: {
25
+ code: string
26
+ description: string
27
+ }[] | undefined
18
28
  }
@@ -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
- void,
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
  );