UNPKG

@darkwolf/qiwi.mjs

Version:
203 lines (188 loc) 5.46 kB
import Helper from '@darkwolf/helper.mjs' import { ProviderId } from '../constants/index.mjs' import PaymentDetails from './PaymentDetails.mjs' import PaymentDetailsInternationalCardTransfer from './PaymentDetailsInternationalCardTransfer.mjs' import PaymentDetailsBankTransfer from './PaymentDetailsBankTransfer.mjs' import PaymentDetailsBankDetailsTransfer from './PaymentDetailsBankDetailsTransfer.mjs' import QIWI from '../index.mjs' export default class PaymentRequest { static fromParams(params = {}, context) { const data = { operationId: params.id, providerId: params.terms, source: params.source, details: params.fields } if (params.sum) { data.currency = params.sum.currency data.amount = params.sum.amount } if (params.transaction) { data.transactionId = params.transaction.id } if (data.operationId) { data.operationId = parseInt(data.operationId) } if (data.providerId) { data.providerId = parseInt(data.providerId) } if (data.details) { data.account = data.details.account let details switch (data.providerId) { case ProviderId.VISA_INTERNATIONAL: case ProviderId.MASTERCARD_INTERNATIONAL: { details = PaymentDetailsInternationalCardTransfer.fromParams(data.details) break } case ProviderId.HOMECREDIT: case ProviderId.ALFA: case ProviderId.OTP: case ProviderId.RSHB: case ProviderId.RSB: case ProviderId.VTB: case ProviderId.PSB: case ProviderId.SBER: case ProviderId.RENCREDIT: case ProviderId.MKB: { details = PaymentDetailsBankTransfer.fromParams(data.details) break } case ProviderId.BANK_DETAILS: { details = PaymentDetailsBankDetailsTransfer.fromParams(data.details) break } default: { details = PaymentDetails.fromParams(data.details) } } data.details = details } if (data.currency) { data.currency = QIWI.getCurrencyByCode(data.currency) } if (data.transactionId) { data.transactionId = parseInt(data.transactionId) } return new PaymentRequest(data, context) } static from(data, context) { return new PaymentRequest(data, context) } constructor(data = {}, context) { this .setContext(context) .setOperationId(data.operationId) .setProviderId(data.providerId) .setSource(data.source) .setAccount(data.account) .setDetails(data.details) .setCurrency(data.currency) .setAmount(data.amount) .setTransactionId(data.transactionId) } setContext(context = {}) { this.context = context return this } setOperationId(id) { this.operationId = id return this } setProviderId(id) { this.providerId = id return this } setSource(source) { this.source = source return this } setAccount(account) { this.account = account return this } setDetails(details) { let paymentDetails if (details) { if (details instanceof PaymentDetails) { paymentDetails = details } else { switch (this.providerId) { case ProviderId.VISA_INTERNATIONAL: case ProviderId.MASTERCARD_INTERNATIONAL: { paymentDetails = new PaymentDetailsInternationalCardTransfer(details) break } case ProviderId.HOMECREDIT: case ProviderId.ALFA: case ProviderId.OTP: case ProviderId.RSHB: case ProviderId.RSB: case ProviderId.VTB: case ProviderId.UNICREDIT: case ProviderId.PSB: case ProviderId.QIWI: case ProviderId.SBER: case ProviderId.RENCREDIT: case ProviderId.MKB: case ProviderId.RAIFFEISEN: { paymentDetails = new PaymentDetailsBankTransfer(details) break } case ProviderId.BANK_DETAILS: { paymentDetails = new PaymentDetailsBankDetailsTransfer(details) break } default: { paymentDetails = new PaymentDetails(details) } } } } this.details = paymentDetails return this } setCurrency(currency) { this.currency = currency return this } setAmount(amount) { this.amount = amount return this } setTransactionId(id) { this.transactionId = id return this } getTransaction() { return this.context.qiwi.getTransaction(this.transactionId) } toJSON() { const data = {} if (this.operationId) { data.operationId = this.operationId } if (this.providerId) { data.providerId = this.providerId } if (this.source) { data.source = this.source } if (this.account) { data.account = this.account } if (this.details) { data.details = this.details.toJSON() } if (this.currency) { data.currency = this.currency } if (Helper.exists(this.amount)) { data.amount = this.amount } if (this.transactionId) { data.transactionId = this.transactionId } return data } }