medusa-payment-comgate-jc
Version:
Comgate payment gateway provider for MedusaJS
90 lines (80 loc) • 2.64 kB
text/typescript
import { CartService, MedusaRequest, MedusaResponse } from "@medusajs/medusa";
import ComgateProviderService from "../../../../services/comgate-provider";
import {
CreateCountry,
CreateCurr,
CreateRequest,
} from "comgate-node/dist/types/endpoints/create";
export const POST = async (req: MedusaRequest, res: MedusaResponse) => {
try {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const cartId = req.body.cart_id;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const redirectUrl = req.body.redirect;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const method = req.body.method;
const plugin = req.scope.resolve<ComgateProviderService>(
"comgateProviderService"
);
const comgateClient = plugin.comgateClient;
const cartService = req.scope.resolve<CartService>("cartService");
const cart = await cartService.retrieveWithTotals(cartId);
const options: CreateRequest = {
country: cart.billing_address
? (cart.billing_address.country_code?.toUpperCase() as CreateCountry)
: (cart.shipping_address?.country_code?.toUpperCase() as CreateCountry),
price: cart.total,
curr: cart.region.currency_code.toUpperCase() as CreateCurr,
label: "Order from eshop",
refId: cart.id.replace("cart_", ""),
method: method,
email: cart.email,
lang: "cs", // todo
initRecurring: false,
prepareOnly: true,
preauth: false,
verification: false,
url_pending: redirectUrl,
url_paid: redirectUrl,
url_cancelled: redirectUrl,
};
try {
const transaction = await comgateClient.create(options);
if (transaction.code !== 0) {
res
.status(400)
.send(`Comgate Error: ${transaction.code}: ${transaction.message}`);
return;
} else {
cartService.updatePaymentSession(cart.id, {
comgateData: {
redirect: transaction.redirect,
transId: transaction.transId,
},
});
res.status(200).send({
redirect: transaction.redirect,
transId: transaction.transId,
});
return;
}
} catch (e) {
console.log(e);
res.status(400).send(`Medusa Error: ${e.message}`);
return;
}
} catch (err) {
console.log(err);
res.status(400).send(`Api Error: ${err.message}`);
return;
}
};
export const GET = async (req: MedusaRequest, res: MedusaResponse) => {
res.status(200).send({
status: "OK",
});
return;
};