Socket
Socket
Sign inDemoInstall

@axis-llc/mpesa

Package Overview
Dependencies
5
Maintainers
3
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @axis-llc/mpesa

M-Pesa API Typescript SDK


Version published
Maintainers
3
Created

Readme

Source

M-Pesa TypeScript SDK

This is a simple wrapper for Mpesa Daraja API using typescript

Installation

Via npm

npm install --save @axis-llc/mpesa

Or yarn

yarn add @axis-llc/mpesa

Usage

Terms definitions

TermDescriptionType
envYour API environment. Either `sandbox` or 'live'string
typeIdentifier type 2 for Till, 4 for Paybillnumber
storeStore number if using a till numbernumber
shortcodeYour Buy Goods number or Paybillnumber
keyApp consumer key from Darajastring
secretApp consumer secret from Darajastring
passkeyYour online passkeystring
usernameOrg portal usernamestring
passwordOrg portal passwordstring
validationUrlA valid secure URL that is used to validate your transaction detailsstring
confirmationUrl A valid secure URL that is used to receive payment notifications from C2B API.string
callbackUrl A valid secure URL that is used to receive payment notifications from M-Pesa API.string
timeoutUrl This is the URL to be specified in your request that will be used by API Proxy to send notification incase the payment request is timed out while awaiting processing in the queue. string
resultsUrl This is the URL to be specified in your request that will be used by M-PESA to send notification upon processing of the payment request. string

Import what you need

import { Mpesa, useMpesa } from '@axis-llc/mpesa';

or

const { Mpesa, useMpesa } = require('@axis-llc/mpesa');

Instantiation

const mpesa = new Mpesa(
    {
        env //"sandbox",
        type //4,
        shortcode //174379,
        store //174379,
        key // Your app consumer key,
        secret // Your app consumer secret,
        username // Your M-Pesa org username,
        password // Your M-Pesa org pass,
        passkey // Your online passkey "bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919",
        validationUrl //"/lipwa/validate",
        confirmationUrl //"/lipwa/confirm",
        callbackUrl //"/lipwa/reconcile",
        timeoutUrl //"/lipwa/timeout",
        resultUrl //"/lipwa/results",
    }
)

Or, individual APIs

const { stkPush, registerUrls } = useMpesa(
    {
        env //"sandbox",
        type //4,
        shortcode //174379,
        store //174379,
        key // Your app consumer key,
        secret // Your app consumer secret,
        username // Your M-Pesa org username,
        password // Your M-Pesa org pass,
        passkey // Your online passkey "bfb279f9aa9bdbcf158e97dd71a467cd2e0c893059b10f78e6b72ada1ed2c919",
        validationUrl //"/lipwa/validate",
        confirmationUrl //"/lipwa/confirm",
        callbackUrl //"/lipwa/reconcile",
        timeoutUrl //"/lipwa/timeout",
        resultUrl //"/lipwa/results",
    }
)

Send an STK push request

mpesa
  .stkPush(
    254705459494,
    10,
    'ACCOUNT', // You can ignore this, the code will generate a unique string
    'Transaction Description', // Optional
    'Remark', // optional
  )
  .then(({ error, data }) => {
    if (data) {
      const {
        MerchantRequestID,
        CheckoutRequestID,
        ResponseCode,
        ResponseDescription,
        CustomerMessage,
      } = data;
      console.log(MerchantRequestID);
    }

    if (error) {
      const { errorCode, errorMessage } = error;
      console.log(errorCode, errorMessage);
    }
  });

// Or use the API directly

stkPush(
  254705459494,
  10,
  'ACCOUNT', // You can ignore this, the code will generate a unique string
  'Transaction Description', // Optional
  'Remark', // optional
).then(({ error, data }) => {
  if (data) {
    const {
      MerchantRequestID,
      CheckoutRequestID,
      ResponseCode,
      ResponseDescription,
      CustomerMessage,
    } = data;
    console.log(MerchantRequestID);
  }

  if (error) {
    const { errorCode, errorMessage } = error;
    console.log(errorCode, errorMessage);
  }
});

Or, if inside an async function

async () => {
  const {
    error: { errorCode, errorMessage },
    data: {
      MerchantRequestID,
      CheckoutRequestID,
      ResponseCode,
      ResponseDescription,
      CustomerMessage,
    },
  } = await mpesa.stkPush(
    254705459494,
    10,
    'ACCOUNT',
    'Transaction Description',
    'Remark',
  );

  console.log(MerchantRequestID);

  // TIP: Save MerchantRequestID and update when you receive the IPN
};

C2B register callback URLs

mpesa.registerUrls('Completed' | 'Cancelled').then(({ error, data }) => {
  if (data) {
    const { ResponseCode, ResponseDescription } = data;
    console.log(ResponseDescription);
  }

  if (error) {
    const { errorCode, errorMessage } = error;
    console.log(errorCode, errorMessage);
  }
});

Send B2C

mpesa
  .sendB2C(
    phone,
    amount,
    'BusinessPayment' | 'SalaryPayment' | 'PromotionPayment',
    'Some remark',
    'Some occasion',
  )
  .then(({ error, data }) => {
    if (data) {
      const {
        ConversationID,
        OriginatorConversationID,
        ResponseCode,
        ResponseDescription,
      } = data;
      console.log(OriginatorConversationID);

      // TIP: Save `OriginatorConversationID` in the database, and use it as a key once you receive the IPN
    }

    if (error) {
      const { errorCode, errorMessage } = error;
      console.log(errorCode, errorMessage);
    }
  });

Send B2B

mpesa
  .sendB2B(
    phone,
    amount,
    'BusinessPayBill' |
      'BusinessBuyGoods' |
      'DisburseFundsToBusiness' |
      'BusinessToBusinessTransfer' |
      'MerchantToMerchantTransfer',
    'Some remark',
    'Some occasion',
  )
  .then(({ error, data }) => {
    if (data) {
      const {
        ConversationID,
        OriginatorConversationID,
        ResponseCode,
        ResponseDescription,
      } = data;
      console.log(OriginatorConversationID);

      // TIP: Save `OriginatorConversationID` in the database, and use it as a key for update
    }

    if (error) {
      const { errorCode, errorMessage } = error;
      console.log(errorCode, errorMessage);
    }
  });

FAQs

Last updated on 16 Oct 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc