@axis-llc/mpesa
v0.1.0
Published
M-Pesa API Typescript SDK
Downloads
1
Readme
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
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);
}
});