@osenco/mpesa
v0.1.0
Published
M-Pesa API typescript SDK
Downloads
15
Readme
M-Pesa TypeScript SDK
This is a simple wrapper for Mpesa Daraja API using typescript
Installation
Via npm
npm install --save @osenco/mpesa
Or yarn
yarn add @osenco/mpesa
Usage
Terms definitions
Import what you need
import { Mpesa, useMpesa } from "@osenco/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);
}
})