UNPKG

medusa-mastercard-payment

Version:

A starter for Medusa plugins.

187 lines 14.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@medusajs/framework/utils"); const axios_1 = __importDefault(require("axios")); const uuid_1 = require("uuid"); class MastercardPaymentProviderService extends utils_1.AbstractPaymentProvider { constructor(container, options) { super(container, options); this.logger_ = container.logger; this.options_ = options; } static validateOptions(options) { if (!options.merchantId || !options.merchantKey) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "merchantId and merchantKey are required in the provider's options."); } } async capturePayment(input) { try { const paymentSessionData = input.data; const order = await this.retrieveOrder(paymentSessionData.orderId); if (!order) { throw new Error("Could not retrieve Mastercard order details"); } if (!paymentSessionData.orderId) { throw new Error("Missing Mastercard order ID"); } const amount = order.amount; const currency = order.currency; const captureTransactionId = (0, uuid_1.v4)(); const response = await axios_1.default.put(`${this.options_.gatewayUrl}/api/rest/version/${this.options_.apiVersion}/merchant/${this.options_.merchantId}/order/${paymentSessionData.orderId}/transaction/${captureTransactionId}`, { apiOperation: "CAPTURE", transaction: { amount: amount, currency: currency, }, }, { headers: { "Content-Type": "application/json", Authorization: `Basic ${Buffer.from(`merchant.${this.options_.merchantId}:${this.options_.merchantKey}`).toString("base64")}`, }, }); if (response.data.result === "SUCCESS") { return { data: { captureId: captureTransactionId, ...response.data, }, }; } else { throw new Error(`Capture failed: ${response.data.response?.gatewayCode || "Unknown error"}`); } } catch (error) { this.logger_.error(`Error in capturePayment: ${error.message}`); throw error; } } async authorizePayment(input) { try { const data = input.data || {}; if (!data?.session?.id || !data?.successIndicator) { return { data: { error: "Missing required Mastercard payment data" }, status: "error", }; } if (data.mastercardOrderId) { const order = await this.retrieveOrder(String(data.mastercardOrderId)); if (order && order.status === "AUTHORIZED") { return { data: { sessionId: data.session.id, successIndicator: data.successIndicator, orderId: order.id, authorizationCode: this.getAuthorizationCode(order), }, status: "authorized", }; } } return { data: { sessionId: data.session?.id, error: "Payment not authorized or verification failed", }, status: "requires_more", }; } catch (error) { return { data: { error: "Payment processing error: " + error.message, }, status: "requires_more", }; } } async retrieveOrder(orderId) { try { const response = await axios_1.default.get(`${this.options_.gatewayUrl}/api/rest/version/${this.options_.apiVersion}/merchant/${this.options_.merchantId}/order/${orderId}`, { headers: { Authorization: `Basic ${Buffer.from(`merchant.${this.options_.merchantId}:${this.options_.merchantKey}`).toString("base64")}`, }, }); return response.data; } catch (error) { this.logger_.error(`Error retrieving order: ${error.message}`); return null; } } getAuthorizationCode(order) { const authTransaction = order.transaction.find((t) => t.transaction && t.transaction.type === "AUTHORIZATION"); return authTransaction?.transaction?.authorizationCode || null; } cancelPayment(input) { throw new Error("Method not implemented."); } async initiatePayment(input) { const { amount, currency_code, context } = input; const tempOrderId = (0, uuid_1.v4)(); try { const requestBody = JSON.stringify({ apiOperation: "INITIATE_CHECKOUT", interaction: { operation: "AUTHORIZE", merchant: { name: this.options_.merchantName, url: this.options_.merchantUrl, }, returnUrl: this.options_.returnUrl, displayControl: { billingAddress: "HIDE", }, }, order: { currency: currency_code.toUpperCase(), amount: amount.toString(), id: tempOrderId, description: "Order from your store", }, }); const response = await axios_1.default.post(`${this.options_.gatewayUrl}/api/rest/version/${this.options_.apiVersion}/merchant/${this.options_.merchantId}/session`, requestBody, { headers: { "Content-Type": "text/plain", Authorization: `Basic ${Buffer.from(`merchant.${this.options_.merchantId}:${this.options_.merchantKey}`).toString("base64")}`, }, }); return { id: response.data.session.id, data: { ...response.data, mastercardOrderId: tempOrderId, }, }; } catch (error) { this.logger_.error(error); throw error; } } deletePayment(input) { throw new Error("Method not implemented."); } getPaymentStatus(input) { throw new Error("Method not implemented."); } refundPayment(input) { throw new Error("Method not implemented."); } retrievePayment(input) { throw new Error("Method not implemented."); } async updatePayment(input) { throw new Error("Method not implemented."); } getWebhookActionAndData(data) { throw new Error("Method not implemented."); } } MastercardPaymentProviderService.identifier = "mastercard-payment"; exports.default = MastercardPaymentProviderService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbWFzdGVyY2FyZC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBR21DO0FBd0JuQyxrREFBMEI7QUFDMUIsK0JBQW9DO0FBeUNwQyxNQUFNLGdDQUFpQyxTQUFRLCtCQUFnQztJQU83RSxZQUFZLFNBQStCLEVBQUUsT0FBZ0I7UUFDM0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0VBQW9FLENBQ3JFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLEtBQTBCO1FBRTFCLElBQUksQ0FBQztZQUNILE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQVcsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENB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