zibal
Version:
Zibal IPG Module
139 lines (129 loc) • 4.74 kB
JavaScript
const urls = require("./urls");
const axios = require("axios");
const {getPersianMessage} = require("./errors");
class Zibal {
merchant = "zibal";
/*
* Initialize Zibal with Your Gateway Merchant Id
* @param {object} config Your Config Object
* @param {string} config.merchant Your Zibal Merchant Id
* @param {string} config.callbackUrl Your Callback Url
* */
constructor(config = {}) {
const {merchant = "zibal", callbackUrl} = config;
this.init({merchant, callbackUrl});
}
/**
* Set Merchant Id
* @param {string} merchant Your Merchant Id
* */
setMerchant(merchant) {
this.merchant = merchant;
}
/**
* Initialize Zibal with Your Gateway Merchant Id
* @param {object} config Your Config Object
* @param {string} config.merchant Your Zibal Merchant Id
* @param {string} config.callbackUrl Your Callback Url
* */
init({merchant, callbackUrl}) {
this.setMerchant(merchant);
this.callbackUrl = callbackUrl;
}
/**
* Create a Payment Session
* @param {object} payload Request Payload
* @param {number} payload.amount Transaction Amount (Required)
* @param {string} [payload.merchant] Specify Merchant if you Haven't Specify in Class Config
* @param {string} [payload.callbackUrl] Url which User will be Redirected to After Payment
* @param {string} [payload.description] Transaction's Description
* @param {string} [payload.orderId] Transaction Order Id
* @param {string} [payload.mobile] User's Mobile (09123456789)
* @param {number} [payload.feeMode=0] Transaction Fee Mode
* @param {boolean} [payload.linkToPay=false] If you want us to Generate a Short Link, send this: true
* @param {boolean} [payload.sms=false] If you want us to Send the Short Link to User's Mobile, send this: true
* @param {number} [payload.percentMode=0] Whether to Calculate Each Submerchant Share with Percent
* @param {Array} [payload.multiplexingInfos=[]] Multiplexing for this Transaction
* @param {Array} [payload.allowedCards=[]] Array of Allowed Full Card Numbers for this Transaction
* @return {Promise<{}>} Promise will Resolve After HTTP Call is Successful
* @example
* request({amount: 20000})
*
* */
request({
amount,
callbackUrl = this.callbackUrl,
merchant = this.merchant,
orderId,
mobile,
multiplexingInfos,
description,
allowedCards,
linkToPay = false,
sms = false,
percentMode = 0,
feeMode = 0
}) {
return new Promise((resolve, reject) => {
axios.post(urls.requestURL, {
amount,
callbackUrl,
merchant,
orderId,
mobile,
multiplexingInfos,
description,
allowedCards,
percentMode,
feeMode,
linkToPay,
sms
}).then(res => {
const data = res.data || {};
data.persianMessage = getPersianMessage(data.result);
if (res.data.result !== 100) {
data.success = false;
resolve(data);
} else {
data.success = true;
data.paymentUrl = urls.getStartUrl(data.trackId);
resolve(data);
}
}).catch(error => {
resolve({
success: false
})
});
})
}
/**
* Create a Payment Session
* @param {object} payload Verify Payload
* @param {string} payload.merchant IPG Merchant Id
* @param {number} [payload.trackId] IPG Transaction Track Id to be Verified
* */
verify({merchant =this.merchant, trackId}) {
return new Promise((resolve, reject) => {
axios.post(urls.verifyURL, {
merchant,
trackId
}).then(res => {
const data = res.data || {};
data.persianMessage = getPersianMessage(data.result);
if (res.data.result !== 100) {
data.success = false;
reject(data);
} else {
data.success = true;
resolve(data);
}
}).catch(error => {
console.log(error);
resolve({
success: false
})
});
})
}
}
module.exports = Zibal;