Simplify interactions with the official (horribly documented
) M-PESA API.
Important
: Get yourMerchant ID
andPass Key
when you register for MPESA API with Safaricom.
$ npm install pesajs
Lipa Na M-Pesa
): According to Safaricom, this is a "Web service for integrating the M-Pesa
Checkout API to a merchant site. The overall scope of this Web service is to provide primitives for application developers
to handle checkout process in a simple way."Initiate Lipa Na M-Pesa
online payment
const PesaJs = require("pesajs");
let options = {
merchant: "YOUR_MERCHANT_ID",
passkey: "YOUR_PASSKEY"
//debug: false || true
};
let paymentService = new PesaJs.LipaNaMpesa(options);
let requestData = {
transaction: MY_TRANSACTION_ID,
ref: MY_REFERENCE,
account: USER_MPESA_NUMBER,
amount: AMOUNT, // in Ksh
callbackUrl: MY_CALLBACK_URL,
details: "Additional transaction details if any"
};
paymentService.requestPayment(requestData)
.then(function(data) {
// Now display M-Pesa message to user
let msg = data.message;
// Keep mpesa transaction id somewhere, so you can use it to confirm transaction (next step).
mpesa_txn = data.mpesa_txn
})
.catch(function(error){
// Oops, something went wrong!
});
Confirm payment request
let params = {
transaction: MY_TRANSACTION,
mpesa_txn: mpesa_txn
};
paymentService.confirmPayment(params)
.then(function(data) {
// User should see a USSD menu on their phone at this point.
// Now relax and wait for M-Pesa to notify you of the payment
})
.catch(function(error){
// Oops, something went wrong!
});
Receive payment notification
// Wait for payment notification (example using express)
app.post("/ipn", paymentService.paymentNotification, function(req, res) {
// Do whatever with payment info like confirm purchase, init shipping, send download link, etc.
let paymentData = req.payment;
});
See the example app for a working demo.
Paybill and Buygoods validation & confirmation: TODO
Transaction Extracts: TODO
git push origin master
To report bugs (or any other issues), use the issues page.