UNPKG

medusa-payment-tamara

Version:

Tamara payment gateway plugin for Medusa

201 lines (200 loc) 7.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const medusa_1 = require("@medusajs/medusa"); const axios_1 = __importDefault(require("axios")); const medusa_core_utils_1 = require("medusa-core-utils"); class MyPaymentProcessor extends medusa_1.AbstractPaymentProcessor { constructor({ itemsService, logger }, options) { super(arguments[0]); this.itemsService = itemsService; this.logger = logger; this.tamara_token = options.tamara_token; this.tamara_api = options.tamara_api; this.web_endpoint = options.web_endpoint; } updatePaymentData(sessionId, data) { throw new Error("1"); } async capturePayment(paymentSessionData) { const cart = this.cart; const amount = cart.total; try { var id; if (paymentSessionData.hasOwnProperty("payment")) { // @ts-ignore id = paymentSessionData.payment.id; } else { id = paymentSessionData.id; } const data = { "order_id": id, "total_amount": { "amount": amount / 100, "currency": cart.region.currency_code, }, "shipping_info": { "shipped_at": "2019-08-24T14:15:22Z", "shipping_company": cart.shipping_methods[0], } }; const headers = { authorization: `Bearer ${this.tamara_token}`, }; await axios_1.default.post(`${this.tamara_api}/payments/capture`, data, { headers }); return await this.retrievePayment(paymentSessionData); } catch (error) { this.logger.error(error.message); return error; } } async authorizePayment(paymentSessionData, context) { try { const status = await this.getPaymentStatus(paymentSessionData); const temp = await this.retrievePayment(paymentSessionData); const data = { ...temp }; const id = paymentSessionData.order_id; const headers = { authorization: `Bearer ${this.tamara_token}`, }; const res = await axios_1.default.post(`${this.tamara_api}/orders/${id}/authorise`, {}, { headers }); return { status, data, }; } catch (error) { const e = { "error": error }; return e; } } async cancelPayment(paymentSessionData) { return { id: "cancel", }; } async initiatePayment(context) { var _a, _b, _c, _d, _e, _f, _g, _h; const cart = await this.itemsService.getCart(context.resource_id); this.cart = cart; const currency_code = cart.region.currency_code.toUpperCase(); const price = context.amount / 100; const data = { "order_reference_id": context.resource_id, "total_amount": { "amount": price, "currency": currency_code }, "description": `Customer Order n° ${context.resource_id} with total of ${(0, medusa_core_utils_1.humanizeAmount)(context.amount, context.currency_code)}`, "country_code": currency_code.slice(0, 2), "payment_type": "PAY_BY_INSTALMENTS", "instalments": 3, "items": await this.itemsService.getitems(context), "consumer": { "first_name": ((_a = cart.customer) === null || _a === void 0 ? void 0 : _a.first_name) || "Guest", "last_name": ((_b = cart.customer) === null || _b === void 0 ? void 0 : _b.last_name) || "Customer", "phone_number": ((_c = cart.customer) === null || _c === void 0 ? void 0 : _c.phone) || "+966500000001", "email": ((_d = cart.customer) === null || _d === void 0 ? void 0 : _d.email) || "", }, "shipping_address": { "first_name": ((_e = cart.customer) === null || _e === void 0 ? void 0 : _e.first_name) || "Guest", "last_name": ((_f = cart.customer) === null || _f === void 0 ? void 0 : _f.last_name) || "Customer", "line1": (_g = cart.shipping_address) === null || _g === void 0 ? void 0 : _g.address_1, "city": (_h = cart.shipping_address) === null || _h === void 0 ? void 0 : _h.city, "country_code": currency_code.slice(0, 2), }, "tax_amount": { "amount": cart.tax_total / 100, "currency": currency_code }, "shipping_amount": { "amount": cart.shipping_total / 100, "currency": currency_code }, "merchant_url": { "success": `${this.web_endpoint}/checkout`, "failure": `${this.web_endpoint}/failure`, "cancel": `${this.web_endpoint}/cancel`, "notification": "https://example.com/payments/tamarapay" }, "platform": "medusa" }; const config = { headers: { Authorization: `Bearer ${this.tamara_token}`, }, }; this.logger.info(`data: ${JSON.stringify(data)}`); const url = `${this.tamara_api}/checkout`; const response = await axios_1.default.post(url, data, config); const responseData = await response.data; return responseData; } async deletePayment(paymentSessionData) { return paymentSessionData; } async getPaymentStatus(paymentSessionData) { return medusa_1.PaymentSessionStatus.AUTHORIZED; } async refundPayment(paymentSessionData, refundAmount) { try { var id; if (paymentSessionData.hasOwnProperty("payment")) { // @ts-ignore id = paymentSessionData.payment.id; } else { id = paymentSessionData.id; } const amount = refundAmount / 100; const payment_id = id; const data = { "total_amount": { amount: amount, currency: this.cart.region.currency_code }, "comment": `Refund for the order ${id}` }; const headers = { authorization: `Bearer ${this.tamara_token}`, }; await axios_1.default.post(`${this.tamara_api}/payments/simplified-refund/${payment_id}`, data, { headers }); return await this.retrievePayment(paymentSessionData); } catch (error) { return error; } } async retrievePayment(paymentSessionData) { try { var id; if (paymentSessionData.hasOwnProperty("payment")) { // @ts-ignore id = paymentSessionData.payment.id; } else { id = paymentSessionData.id; } const headers = { authorization: `Bearer ${this.tamara_token}`, }; const response = await axios_1.default.get(`${this.tamara_api}/orders/${id}`, { headers }); const responseData = response.data; return responseData; } catch (error) { return error; } } async updatePayment(context) { this.initiatePayment(context); } } MyPaymentProcessor.identifier = "Tamara"; exports.default = MyPaymentProcessor;