Mpesa.SDK.AspNetCore
1.0.0
See the version list below for details.
dotnet add package Mpesa.SDK.AspNetCore --version 1.0.0
NuGet\Install-Package Mpesa.SDK.AspNetCore -Version 1.0.0
<PackageReference Include="Mpesa.SDK.AspNetCore" Version="1.0.0" />
paket add Mpesa.SDK.AspNetCore --version 1.0.0
#r "nuget: Mpesa.SDK.AspNetCore, 1.0.0"
// Install Mpesa.SDK.AspNetCore as a Cake Addin #addin nuget:?package=Mpesa.SDK.AspNetCore&version=1.0.0 // Install Mpesa.SDK.AspNetCore as a Cake Tool #tool nuget:?package=Mpesa.SDK.AspNetCore&version=1.0.0
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 | - | |
ASP.NET Core | |||
Mpesa.SDK.AspNetCore | - | 3.1 |
.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 | Versions 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 was computed. |
.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. |
-
.NETStandard 2.0
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 3.1.9)
- Mpesa.SDK (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.