@xmoney/api-sdk
Version:
## Instalaltion
87 lines • 4.07 kB
JavaScript
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
;