@nicogorga/medusa-payment-mercadopago
Version:
Mercado Pago payment provider plugin for MedusaJS
63 lines (56 loc) • 1.99 kB
text/typescript
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk";
import { PaymentCreateRequest } from "mercadopago/dist/clients/payment/create/types";
import MercadopagoProviderService from "../../../providers/mercado-pago/service";
import {
MedusaError,
MedusaErrorTypes,
Modules,
} from "@medusajs/framework/utils";
import { PostStoreMercadopagoPaymentType } from "../../../api/store/mercadopago/payment/validators";
import { PaymentSessionDTO } from "@medusajs/framework/types";
type CreatePaymentStepInput = {
paymentSessionId: string;
paymentData: PostStoreMercadopagoPaymentType['paymentData'];
};
export const createPaymentStep = createStep<
CreatePaymentStepInput,
PaymentSessionDTO,
undefined
>(
"create-mercado-pago-payment",
async ({ paymentSessionId, paymentData }, { container }) => {
const mercadopagoPaymentProvider = container
.resolve("payment")
//@ts-ignore
.paymentProviderService_.retrieveProvider(
"pp_mercadopago_mercadopago"
) as MercadopagoProviderService;
const paymentModuleService = container.resolve(Modules.PAYMENT);
const paymentSession = await paymentModuleService.retrievePaymentSession(
paymentSessionId,
{
select: ["amount", "currency_code"],
filters: {
id: paymentSessionId,
},
}
);
if (!paymentSession) {
throw new MedusaError(
MedusaErrorTypes.NOT_FOUND,
`Payment session with id ${paymentSessionId} was not found`
);
}
const paymentResponse = await mercadopagoPaymentProvider.createPayment({
paymentSessionId,
payload: paymentData,
});
const updatedSession = await paymentModuleService.updatePaymentSession({
id: paymentSessionId,
amount: paymentSession.amount,
currency_code: paymentSession.currency_code,
data: paymentResponse as unknown as Record<string, unknown>,
});
return new StepResponse(updatedSession);
}
);