cashbill
Version:
A TypeScript library for making payments through CashBill gateway.
82 lines (81 loc) • 3 kB
JavaScript
;
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;