Mpesa.SDK 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Mpesa.SDK --version 1.0.0                
NuGet\Install-Package Mpesa.SDK -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Mpesa.SDK" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Mpesa.SDK --version 1.0.0                
#r "nuget: Mpesa.SDK, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Mpesa.SDK as a Cake Addin
#addin nuget:?package=Mpesa.SDK&version=1.0.0

// Install Mpesa.SDK as a Cake Tool
#tool nuget:?package=Mpesa.SDK&version=1.0.0                

License: MIT

Mpesa.SDK

Mpesa.SDK is a Library for .NET that implements the Daraja API which is documented at Safaricom. It creates a simple interface that can be used to call the M-Pesa API.

Mpesa.SDK Nuget Packages

Package Name .NET Standard .NET Core App Version
Main
Mpesa.SDK 2.0, 2.1 - NuGet Badge
ASP.NET Core
Mpesa.SDK.AspNetCore - 3.1 NuGet Badge

.NET Usage

Installation

PM> Install-Package Mpesa.SDK

Usage

Create an MpesaApiOptions
var options = new MpesaApiOptions
{
  ShortCode = "",
  Initiator = "",
  InitiatorPassword = "",
  PassKey = "",
  IsLive = true,
  QueueTimeOutURL = "",
  ResultURL = ""
};
Create the api
var api = new MpesaApi("<Consumer Key>", "<Consumer Secret>", options);
Start making calls

Query the account balance

var balance = await api.Account.QueryBalance();
if (!balance.Success)
  Console.WriteLine(balance.Error.ErrorMessage);

Query Transaction Status

var transaction = await api.Account.QueryTransactionStatus("OJ68HHO4H", IdentifierTypeEnum.Organization);
if (!transaction.Success)
 Console.WriteLine(transaction.Error.ErrorMessage);

Reverse Transaction

var reverse = await api.Account.RequestReversal("OIT8YS6I8Y", "850", "Accounting error");
if (!reverse.Success)
 Console.WriteLine(reverse.Error.ErrorMessage);

STK Push

var stkQuery = await api.LipaNaMpesa.QueryStatus("ws_CO_30102020004040278972");
if (!stkQuery.Success)
 Console.WriteLine(stkQuery.Error.ErrorMessage);
 
Console.WriteLine(stkQuery.Data.CheckoutRequestID);

B2C Send Money

var b2c = await api.B2CClient.SendMoney("254722000000", "1000");
if (!b2c.Success)
 Console.WriteLine(b2c.Error.ErrorMessage);

ASP.NET Core Usage

Installation

PM> Install-Package Mpesa.SDK.AspNetCore

Usage

Library consists of the following interfaces:

ILipaNaMpesa - StkPush and QueryStatus
IC2B - QueryBalance, QueryTransactionStatus, ReverseTransaction, RegisterUrl, SimulateTransaction
IB2C - QueryBalance, QueryTransactionStatus, ReverseTransaction, SendMoney
IB2B - To come soon

Add configuration to appsettings.json. Only add configuration relevant to the interface you want to use.
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Mpesa": {
    "B2C": {
      "ConsumerKey": "",
      "ConsumerSecret": "",
      "ShortCode": "",
      "Initiator": "",
      "InitiatorPassword": "",
      "IsLive": false,
      "ResultURL": "https://example.com/result",
      "QueueTimeOutURL": "https://example.com/timeout"
    },
    "C2B": {
      "ConsumerKey": "",
      "ConsumerSecret": "",
      "ShortCode": "",
      "Initiator": "",
      "InitiatorPassword": "",
      "IsLive": false,
      "ResultURL": "https://example.com/result",
      "QueueTimeOutURL": "https://example.com/timeout"
    },
    "LipaNaMpesa": {
      "ConsumerKey": "",
      "ConsumerSecret": "",
      "ShortCode": "",
      "PassKey": "",
      "IsLive": false,
      "CallbackURL": "https://example.com/result"
    }
  }
}
Add to Startup class
services.AddMpesaSdk(Configuration);
Use dependency injection with the interface you require
public class WeatherForecastController : ControllerBase
    {
        private readonly ILipaNaMpesa lnm;
        private readonly IC2B c2B;
        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILipaNaMpesa lnm, IC2B c2b, ILogger<WeatherForecastController> logger)
        {
            this.lnm = lnm;
            c2B = c2b;
            _logger = logger;
        }

        [HttpGet]
        public async Task<IActionResult> Get()
        {
            var stk = await lnm.PushStk("254722000000", "50", "My Account");
            if (!stk.Success)
            {
                _logger.LogError("Stk Error: @{stk}", stk.Error);
                return BadRequest(stk.Error);
            }

            var query = await lnm.QueryStatus(stk.Data.CheckoutRequestID);
            if (!query.Success)
            {
                _logger.LogError("QUery Error: @{query}", query.Error);
                return BadRequest(query.Error);
            }

            var c2bBalance = await c2B.QueryBalance();
            if (!c2bBalance.Success)
                _logger.LogError("C2B Balance Error: @{c2bBalance}", c2bBalance.Error);

            _logger.LogInformation("C2B Balance Completed: @{stk}", c2bBalance.Data);

            return Ok(stk.Data);
        }
    }
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Mpesa.SDK:

Package Downloads
Mpesa.SDK.AspNetCore

This is a M-PESA SDK to allow you to integrate Safaricom Daraja API for ASP.Net Core. It relies on Apesa.SDK

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 913 11/3/2020
1.0.0 578 10/31/2020