Skip to content

aksalj/pesajs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PesaJs (UNMAINTAINED)

Goal

Simplify interactions with the official (horribly documented) M-PESA API.

Important: Get your Merchant ID and Pass Key when you register for MPESA API with Safaricom.

Usage

$ npm install pesajs
  • Online checkout (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

Contributing

  1. Fork this repo and make changes in your own fork.
  2. Commit your changes and push to your fork git push origin master
  3. Create a new pull request and submit it back to the project.

Bugs & Issues

To report bugs (or any other issues), use the issues page.