UNPKG

@xmoney/api-sdk

Version:
87 lines 4.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OrderService = void 0; const tslib_1 = require("tslib"); const crypto = tslib_1.__importStar(require("crypto")); const xmoney_api_service_1 = require("./xmoney-api.service"); const enums_1 = require("../typings/enums"); const get_webview_checkout_html_string_1 = require("../utils/get-webview-checkout-html-string"); class OrderService { constructor(commonService) { this.commonService = commonService; this.apiService = new xmoney_api_service_1.xMoneyApiService(commonService); } createOrder(orderInput) { const publicKey = this.commonService.getPublicKey(orderInput); const order = Object.assign({ siteId: publicKey }, orderInput); if (!order.saveCard) { order.saveCard = false; } const base64Json = this.commonService.getBase64JsonRequest(order); const base64Checksum = this.commonService.getBase64Checksum(order); return { payload: base64Json, checksum: base64Checksum, }; } createOrderWithHtml(orderInput) { const envUrl = this.commonService.getUrl(); const order = this.createOrder(orderInput); return `<form id="checkoutForm" name="checkoutForm" action="${envUrl}" method="post" accept-charset="UTF-8"> <input type="hidden" name="jsonRequest" value="${order.payload}"> <input type="hidden" name="checksum" value="${order.checksum}"> <input type="submit" style="visibility:hidden"> </form> <script type="text/javascript"> window.onload=function(){ window.setTimeout('document.checkoutForm.submit()', 200) } </script>`; } getWebviewCheckoutHtml(orderInput, cards = [], theme) { const order = this.createOrder(orderInput); return (0, get_webview_checkout_html_string_1.getWebviewCheckoutHtmlString)(orderInput.publicKey, order.payload, order.checksum, JSON.stringify(cards), theme); } async getOrderById(orderId) { var _a; const orders = await this.apiService.getOrderByExternalId(orderId); if (!((_a = orders === null || orders === void 0 ? void 0 : orders.data) === null || _a === void 0 ? void 0 : _a[0])) { throw new Error('Order not found'); } return { data: orders.data ? orders.data[0] : undefined, }; } async createOrderWithSavedCard(orderInput, iteration = 0) { var _a; if (iteration === 2) { throw new Error('Maximum iterations limit exceeded for create order'); } const order = await this.apiService.createOrder(orderInput); if (order.data && (order.code === enums_1.xMoneyResponseCodeEnum.Success || order.code === enums_1.xMoneyResponseCodeEnum.Created)) { return { data: order.data }; } if (order.error && order.error.find((e) => e.code === enums_1.xMoneyResponseCodeEnum.SoftDecline)) { const softDeclineInput = Object.assign(Object.assign({}, orderInput), { transactionOption: JSON.stringify({ isSoftDecline: 'yes', }) }); return await this.createOrderWithSavedCard(softDeclineInput, ++iteration); } else { throw new Error(((_a = order.error) === null || _a === void 0 ? void 0 : _a.length) ? order.error[0].message : 'Unknown error'); } } decryptOrderResponse(encryptedResponse) { const encryptedParts = encryptedResponse.split(',', 2), iv = Buffer.from(encryptedParts[0], 'base64'), encryptedData = Buffer.from(encryptedParts[1], 'base64'); const decipher = crypto.createDecipheriv('aes-256-cbc', this.commonService.getPrivateKey(), iv), decryptedIpnResponse = Buffer.concat([ decipher.update(encryptedData), decipher.final(), ]).toString(); return JSON.parse(decryptedIpnResponse); } } exports.OrderService = OrderService; //# sourceMappingURL=order.service.js.map