medusa-mastercard-payment
Version:
A starter for Medusa plugins.
187 lines • 14.9 kB
JavaScript
;
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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