Chargily.EpayGateway.NET
1.0.8
See the version list below for details.
dotnet add package Chargily.EpayGateway.NET --version 1.0.8
NuGet\Install-Package Chargily.EpayGateway.NET -Version 1.0.8
<PackageReference Include="Chargily.EpayGateway.NET" Version="1.0.8" />
paket add Chargily.EpayGateway.NET --version 1.0.8
#r "nuget: Chargily.EpayGateway.NET, 1.0.8"
// Install Chargily.EpayGateway.NET as a Cake Addin #addin nuget:?package=Chargily.EpayGateway.NET&version=1.0.8 // Install Chargily.EpayGateway.NET as a Cake Tool #tool nuget:?package=Chargily.EpayGateway.NET&version=1.0.8
Chargily ePay Gateway C#.NET Plugin, supports ASP.NET Core, Xamarin, .NET MAUI
Integrate ePayment gateway with Chargily easily.
- Currently support payment by CIB / EDAHABIA cards and soon by Visa / Mastercard
- This is a C#.NET Nuget Package, If you are using another programing language Browse here or look to API documentation
Installation
First, install the Chargily.EpayGateway.NET
NuGet package into your app
PM> Install-Package Chargily.EpayGateway.NET
Requirements
- Get your API Key/Secret from ePay by Chargily dashboard for free
How to use
this package provide ChargilyEpayClient
client, to create payment request use:
using Chargily.EpayGateway.NET;
var client = ChagilyEpay.CreateClient("[API_KEY]");
var payment = new EpayPaymentRequest()
{
InvoiceNumber = "[SOME_INVOICE_NUMER]"
Name = "Ahmed",
Email = "rainxh11@gmail.com",
Amount = 1500,
DiscountPercentage = 5.0,
PaymentMethod = PaymentMethod.EDAHABIA,
RedirectBackTo = "https://example.com/",
CameFrom = "https://shop.com/purchase",
ExtraInfo = "Product Purchase"
};
var response = await client.CreatePayment(EpayPaymentRequest);
Usage with ASP.NET Core Minimal API
using Chargily.EpayGateway.NET;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddChargilyEpayGateway("[API_KEY]");
var app = builder.Build();
app.MapPost("/invoice",
async ([FromBody] EpayPaymentRequest request,
[FromServices] IChargilyEpayClient<EpayPaymentResponse, EpayPaymentRequest> chargilyClient) =>
{
return await chargilyClient.CreatePayment(request);
});
app.Run();
Request:
{
"invoice_number" : "321616",
"client" : "Ahmed",
"client_email" : "rainxh11@gmail.com",
"amount" : 1500,
"discount" : 5.0,
"mode" : "EDAHABIA",
"back_url" : "https://example.com/",
"webhook_url" : "https://shop.com/purchase",
"comment" : "Product Purchase"
}
Response:
{
"httpStatusCode": 201,
"responseMessage": {
"Message": "Success"
},
"isSuccessful": true,
"isRequestValid": true,
"body": {
"checkout_url": "https://epay.chargily.com.dz/checkout/d00c1e652200798bbc35f688b2910fa9bc6c4c30d38b51e3f4142e407fa7c141"
},
"createdOn": "2022-05-06T03:55:49.6527862+01:00"
}
WebHook Validation:
using Chargily.EpayGateway.NET;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddChargilyWebHookValidator("[APP_SECRET]");
var app = builder.Build();
app.MapPost("/webhook-validator", ([FromServices] IWebHookValidator validator, HttpRequest request) =>
{
var signature = request.Headers["Signature"].First();
var validation = validator.Validate(signature, request.Body);
return validation;
});
app.Run();
Configuration:
API_KEY
& APP_SECRET
can be added directly in code or from appsettings.json
configuration file
builder.Services.AddChargilyWebHookValidator("[APP_SECRET]");
builder.Services.AddChargilyEpayGateway("[API_KEY]");
// OR
builder.Services.AddChargilyWebHookValidator(builder.Configuration["CHARGILY_APP_SECRET"]);
builder.Services.AddChargilyEpayGateway(builder.Configuration["CHARGILY_API_KEY"]);
// OR
// Same as previous but it will be loaded automatically from appsettings.json
builder.Services.AddChargilyWebHookValidator());
builder.Services.AddChargilyEpayGateway();
appsettings.json
file:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"CHARGILY_APP_SECRET": "[APP_SECRET]", // <-- APP SECRET
"CHARGILY_API_KEY": "[API_KEY]" // <-- API KEY
}
ASP.NET Core Middleware
This package provide WebHookValidatorMiddleware
ASP.NET Core Middleware, when registered every POST
request that have a Signature
Http Header will be validated automtically
How to register the Middleware:
using Chargily.EpayGateway.NET;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddChargilyEpayGateway("[API_KEY]");
builder.Services
.AddChargilyWebHookValidator("[APP_SECRET]")
.AddChargilyValidatorMiddleware(); // Both WebHookValidator & WebHookValidatorMiddleware have to be registered
var app = builder.Build();
app.UseChargilyValidatorMiddleware();
app.Run();
Usage with .NET MAUI
using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace MyApp
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>();
builder.Services.AddChargilyEpayGateway("[API_KEY]");
return builder.Build();
}
}
}
then you can add in ViewModels
:
public class MainViewModel : ViewModelBase
{
private ChargilyEpayClient _chargilyClient;
private IWebHookValidator _webhookValidator;
public MainViewModel(ChargilyEpayClient chargilyClient)
{
_chargilyClient = chargilyClient;
}
// With Validator
public MainViewModel(ChargilyEpayClient chargilyClient, IWebHookValidator webhookValidator)
{
_chargilyClient = chargilyClient;
_webhookValidator = webhookValidator;
}
}
Note when using .NET MAUI / Xamarin:
storing sensitive APP_SECRET
in a frontend app is not a recommended approach, you'd be better off calling a backend api to handle payment, but it's doable.
if you decide to use it in the frontend, consider storing APP_SECRET
with Akavache
BlobCache.Secure
This package is using Microsoft.Extensions.DependencyInjection
dependancy injection, so it can be used with application or framework using it.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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. |
-
.NETStandard 2.0
- FluentValidation (>= 11.0.1)
- FluentValidation.DependencyInjectionExtensions (>= 11.0.1)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.2.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.1)
- Refit (>= 6.3.2)
- Refit.HttpClientFactory (>= 6.3.2)
- System.Text.Json (>= 6.0.3)
-
.NETStandard 2.1
- FluentValidation (>= 11.0.1)
- FluentValidation.DependencyInjectionExtensions (>= 11.0.1)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.2.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.1)
- Refit (>= 6.3.2)
- Refit.HttpClientFactory (>= 6.3.2)
- System.Text.Json (>= 6.0.3)
-
net6.0
- FluentValidation (>= 11.0.1)
- FluentValidation.DependencyInjectionExtensions (>= 11.0.1)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.2.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.1)
- Refit (>= 6.3.2)
- Refit.HttpClientFactory (>= 6.3.2)
- System.Text.Json (>= 6.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.