Skip to content

phoscoder/ecocash

Repository files navigation

Ecocash Javascript Library

This is a Javascript SDK library for Ecocash Open API.

Installation

npm i ecocash

Note

You can use whichever package manager you prefer, it should work.

For development

Run build and start scripts concurrently:

npm run dev

Or run build and start scripts separately:

npm run build
npm run start

Usage

The basic follow is as follows:

Step 1: Create an Ecocash object

You can create an Ecocash object as follows:

const Ecocash = require("ecocash");

const merchant = new Ecocash("<apiKey>", "<merchant code>");

Step 2: Initialize a payment

const response = await merchant.initPayment("26377854266", 20.05, "bread");

Response:

{
    phone: '26377854266',
    amount: 20.05,
    reason: 'bread',
    currency: 'USD',
    sourceReference: '325a802f-943e-47c2-addf-010285f09cea'
}

Step 3: Poll for transaction status

You can poll for transaction status as follows:

Known statuses(for now):

  • SUCCESS
  • PENDING_VALIDATION
const transaction = await merchant.lookupTransaction(response.sourceReference, response.phone);

if (transaction.paymentSuccess) {
    console.log("Transaction successful");
}

Response:

{
    amount: { amount: 100, currency: 'USD' },
    customerMsisdn: '263778548832',
    reference: '325a802f-943e-47c2-addf-010285f09cea',
    ecocashReference: 'MP250908.1537.A22242',
    status: 'SUCCESS',
    transactionDateTime: '2025-09-08 15:37:16'
}

Note

The default lookupTransaction method requires you to add poll logic by yourself. But with the pollTransaction method, you can poll for transaction status as follows:

merchant.pollTransaction(response, strategy, options);

Where:

  • response: The response from the initPayment method
  • strategy: The strategy to use for polling (SIMPLE, INTERVAL, BACKOFF)
  • options: The options to use for polling (interval, backoff, multiplier, sleep)

NB: The default strategy is INTERVAL. NB: Options are optional and default to { interval: 10, multiplier: 2, sleep: 1000 }.

Polling examples

Interval strategy:

// Poll for transaction status with interval
const transaction = await merchant.pollTransaction(response, PollStrategies.INTERVAL, { interval: 10 });

if (transaction.paymentSuccess) {
    console.log("Transaction successful");
}

Backoff strategy:

// Poll for transaction status with backoff
const transaction = await merchant.pollTransaction(response, PollStrategies.BACKOFF, { multiplier: 2, interval: 15, sleep: 2000 });

if (transaction.paymentSuccess) {
    console.log("Transaction successful");
}

Simple strategy:

// Poll for transaction status with simple strategy
const transaction = await merchant.pollTransaction(response, PollStrategies.SIMPLE);

if (transaction.paymentSuccess) {
    console.log("Transaction successful");
}

Step 4: Refunding a payment

const response = await merchant.refundPayment({
    reference: "reference",
    phone: "263778548266",
    amount: 20.05,
    clientName: "bread",
    reason: "The bread was rotten"
});

Full Example

const Ecocash = require("ecocash");

const merchant = new Ecocash("apiKey", "merchant");
const response = await merchant.initPayment("26377854266", 20.05, "bread");

console.log(response);

// Poll for transaction status
const transaction = await merchant.pollTransaction(response);

if (transaction.paymentSuccess) {
    console.log("Transaction successful");
}

Going Live

To go live, you can set the mode to "live" as follows:

const merchant = new Ecocash("<apiKey>", "<merchant>", "live");     

OR

const merchant = new Ecocash("<apiKey>", "<merchant>");     
merchant.setLiveMode();

Contributing

Contributions are welcome! Please read our contributing guidelines for more information.

Special Thanks

About

Ecocash Javascript SDK

Topics

Resources

License

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors