xpresspay
Version:
A Javasript library for integrating with the XpressPay
74 lines (70 loc) • 2.34 kB
JavaScript
// Function to load the XpressPay script
function loadXpressPayScript(ENV_MODE) {
return new Promise((resolve, reject) => {
if (document.getElementById("xpresspay-script")) {
resolve();
return;
}
const script = document.createElement("script");
script.setAttribute(
"src",
ENV_MODE === "LIVE"
? "https://myxpresspay.com:8032/inlineXpressPayPop.js"
: ENV_MODE === "DEBUG"
? "https://pgsandbox.xpresspayments.com:8020/inlineXpressPayPop.js"
: ENV_MODE === "TEST"
? "https://test.xpresspayments.com:8032/inlineXpressPayPop.js"
: "https://myxpresspay.com:8032/inlineXpressPayPop.js"
);
script.setAttribute("id", "xpresspay-script");
script.onload = resolve;
script.onerror = reject;
document.head.appendChild(script);
});
}
function payWithXpressPay(config) {
loadXpressPayScript(config.ENV_MODE)
.then(() => {
XpressPayPop.setup({
public_key: config.public_key,
email: config.email,
amount: config.amount,
transactionId: config.transactionId || "" + String(Date.now()),
currency: config.currency || "NGN",
callbackUrl: config.callbackUrl,
metadata: config.metadata,
productId: config.productId,
productDescription: config.productDescription,
applyConviniencyCharge: config.applyConviniencyCharge,
mode: config.mode,
bodyColor: config.bodyColor,
buttonColor: config.buttonColor,
footerText: config.footerText,
footerLink: config.footerLink,
footerLogo: config.footerLogo,
isRecurring: config.isRecurring,
authorizationUrl: config.authorizationUrl,
ENV_MODE: config.ENV_MODE || "DEBUG",
DISPLAY_MODE: config.DISPLAY_MODE || "POPUP",
onClose: config.onClose || (() => {
console.log("Payment modal closed");
}),
onSuccess:
config.onSuccess ||
(() => {
console.log("Payment successful");
}),
onError:
config.onError ||
((error) => {
console.error("Payment error:", error);
}),
});
})
.catch((error) => {
console.error("Failed to load XpressPay script:", error);
});
}
module.exports = {
payWithXpressPay,
};