UNPKG

cashbill

Version:

A TypeScript library for making payments through CashBill gateway.

82 lines (81 loc) 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const crypto = require("crypto"); const utils_1 = require("../../utils"); const error_1 = require("../../error"); const diacritics = require("diacritics"); class PaymentModule extends utils_1.LibModule { async get(paymentId) { let resultRaw; try { resultRaw = await this.sendGetRequest(this.getUrl() + paymentId, { qs: { sign: this.getAccessSign(paymentId) } }); } catch (err) { throw new error_1.CashBillError(`Cannot access a payment. Reason: ${err.message}`); } const result = this.parseResult(resultRaw); const payment = result; return payment; } async create(payment) { payment.title = diacritics.remove(payment.title); if (payment.description) { payment.description = diacritics.remove(payment.description); } const fields = { ...payment, sign: this.getCreationSign(payment) }; let resultRaw; try { resultRaw = await this.sendPostRequest(this.getUrl(), { form: fields }); } catch (err) { throw new error_1.CashBillError(`Cannot create a payment request. Reason: ${err.message}`); } const result = this.parseResult(resultRaw); const paymentResponse = { id: result.id, redirectUrl: result.redirectUrl }; return paymentResponse; } getUrl() { return `payment/${this.getConfig().shopId}/`; } getAccessSign(paymentId) { const config = this.getConfig(); return crypto .createHash('sha1') .update(paymentId + config.secretPhrase) .digest('hex'); } getCreationSign(paymentRequest) { const config = this.getConfig(); const safePersonalData = paymentRequest.personalData || {}; return crypto .createHash('sha1') .update(paymentRequest.title + paymentRequest.amount.value + paymentRequest.amount.currencyCode + (paymentRequest.returnUrl || '') + paymentRequest.description + (paymentRequest.negativeReturnUrl || '') + (paymentRequest.additionalData || '') + (paymentRequest.paymentChannel || '') + (paymentRequest.languageCode || '') + (paymentRequest.referer || '') + (safePersonalData.firstName || '') + (safePersonalData.surname || '') + (safePersonalData.email || '') + (safePersonalData.country || '') + (safePersonalData.city || '') + (safePersonalData.postcode || '') + (safePersonalData.street || '') + (safePersonalData.house || '') + (safePersonalData.flat || '') + config.secretPhrase) .digest('hex'); } } exports.PaymentModule = PaymentModule;