This library allows you to quickly and easily add YenePay as a payment method using nodejs
We encourage you to read through this README to get the most our of what this library has to offer. We want this library to be community driven and we really appreciate any support we can get from the community.
These instructions will guide you on how to develop and test YenePay's payment method integration with your nodejs application. We have setup a sandbox environment for you to test and play around the integration process. To learn more about this, please visit our community site: https://community.yenepay.com/
To add YenePay to your application and start collecting payments, you will first need to register on YenePay as a merchant and get your seller code. You can do that from https://www.yenepay.com/merchant
Install the yenepaysdk module to your project using npm.
npm install yenepaysdk
and require the module in your project.
var ypco = require('yenepaysdk');
The ypco
object exposes four APIs
_1.
ypco.checkoutType
This object contains string values of the two checkout types (Express and Cart)
ypco.checkoutType.Express
ypco.checkoutType.Cart
_2.
ypco.checkoutOptions = function(sellerCode, merchantOrderId = "", process = _checkoutType.Express, useSandbox = false, expiresAfter = null, successReturn = "", cancelReturn = "", ipnUrl = "", failureUrl = "")
This function returns a new instance of checkoutOptions class
_3.
ypco.pdtRequestModel = function(pdtToken, transactionId, useSandbox = false)
This function returns a new instance of pdtRequestModel
_4.
ypco.checkout
This object has four functions
i.
ypco.checkout.GetCheckoutUrlForExpress(checkoutOptions, checkoutItem)
This function returns a checkout url for an Express type of checkout. The input parameters are a checkoutOptions object and checkoutItem object
example of checkoutItem object
{
ItemName: 'Sample Item 1',
UnitPrice: '350',
DeliveryFee: '50',
Discount: '10',
Tax1: '7.50',
Tax2: '0',
HandlingFee: '0',
Quantity: '1'
}
A sample implementation of this method is shown below
exports.CheckoutExpress = function(req, res) {
var sellerCode = "YOUR_USER_CODE_IN_YENEPAY";
var useSandbox = true; //set this false on your production environment
var successUrlReturn = "PAYMENT_SUCCESS_RETURN_URL";
var ipnUrlReturn = "PAYMENT_COMPLETION_NOTIFICATION_URL",
var cancelUrlReturn = "PAYMENT_CANCEL_RETURN_URL",
var failureUrl = "PAYMENT_FAILURE_RETURN_URL";
var expiresAfter = "NUMBER_OF_MINUTES_BEFORE_THE_ORDER_EXPIRES";
var orderId = "UNIQUE_ID_THAT_IDENTIFIES_THIS_ORDER_ON_YOUR_SYSTEM";
var checkoutOptions = ypco.checkoutOptions(sellerCode, orderId, ypco.checkoutType.Express, useSandbox, expiresAfter, successUrlReturn, cancelUrlReturn, ipnUrlReturn, failureUrl);
var checkoutItem = req.body;
var url = ypco.checkout.GetCheckoutUrlForExpress(checkoutOptions, checkoutItem);
res.redirect(url);
};
ii.
ypco.checkout.GetCheckoutUrlForCart(checkoutOptions, checkoutItems)
This function returns a checkout url for a Cart type of checkout. The input parameters are a checkoutOptions object and an array of checkoutItem.
A sample implementation of this method is shown below
exports.CheckoutCart = function(req, res) {
var sellerCode = "YOUR_USER_CODE_IN_YENEPAY";
var useSandbox = true; //set this false on your production environment
var successUrlReturn = "PAYMENT_SUCCESS_RETURN_URL";
var ipnUrlReturn = "PAYMENT_COMPLETION_NOTIFICATION_URL",
var cancelUrlReturn = "PAYMENT_CANCEL_RETURN_URL",
var failureUrl = "PAYMENT_FAILURE_RETURN_URL";
var expiresAfter = "NUMBER_OF_MINUTES_BEFORE_THE_ORDER_EXPIRES";
var orderId = "UNIQUE_ID_THAT_IDENTIFIES_THIS_ORDER_ON_YOUR_SYSTEM";
var checkoutOptions = ypco.checkoutOptions(sellerCode, '', ypco.checkoutType.Cart, useSandbox, expiresAfter, successUrlReturn, cancelUrlReturn, ipnUrlReturn, failureUrl);
var data = req.body;
var checkoutItems = data.Items;
var deliveryFee = 100;
var discount = 50;
var handlingFee = 30;
var totalPrice = 0, totalTax1 = 0, totalTax2 = 0;
checkoutItems.forEach(function(element) {
totalPrice += element.UnitPrice * element.Quantity;
});
totalTax1 = 0.15*totalPrice; totalTax2 = 0.02*totalPrice;
checkoutOptions.SetOrderFees(deliveryFee, discount, handlingFee, totalTax1, totalTax2);
var url = ypco.checkout.GetCheckoutUrlForCart(checkoutOptions, checkoutItems);
res.json({ "redirectUrl" : url });
};
iii.
ypco.checkout.IsIPNAuthentic(ipnModel, useSandbox = false)
This method verifies the authenticity of the ipn msg received from yenepay when a payment is completed. A sample implementation of a method to receive and verify IPN is shown below
exports.IPNDestination = function(req, res) {
var ipnModel = req.body;
var useSandbox = true; //set this false on your production environment
ypco.checkout.IsIPNAuthentic(ipnModel, useSandbox).then((data) => {
//this means the ipn is verified and the status of the transaction is COMPLETED
//mark the order as "Paid" or "Completed" here
})
.catch((err) => {
//this means either the ipn verification failed or the ipn model is INVALIDs
});;
};
iv.
ypco.checkout.RequestPDT(pdtRequestModel)
This function sends a pdt request to yenepay api server to check the status of a transaction. A sample implementation of sending a pdt request to check the status of a transaction is shown below
var pdtToken = 'YOUR_UNIQUE_PDT_TOKEN';
var transactionId = 'TRANSACTION_ID_OF_THE_ORDER';
var useSandbox = true;
var pdtRequestModel = ypco.pdtRequestModel(pdtToken, transactionId, useSandbox);
ypco.checkout.RequestPDT(pdtRequestModel).then((pdtString) => {
//the pdtString contains the status of the order
})
.catch((err) => {
//something wrong happened
});;
When you are ready to take this to your production environment, just set the UseSandbox property of the CheckoutOptions object to false.