Chargily.EpayGateway.NET
1.0.12
See the version list below for details.
dotnet add package Chargily.EpayGateway.NET --version 1.0.12
NuGet\Install-Package Chargily.EpayGateway.NET -Version 1.0.12
<PackageReference Include="Chargily.EpayGateway.NET" Version="1.0.12" />
paket add Chargily.EpayGateway.NET --version 1.0.12
#r "nuget: Chargily.EpayGateway.NET, 1.0.12"
// Install Chargily.EpayGateway.NET as a Cake Addin #addin nuget:?package=Chargily.EpayGateway.NET&version=1.0.12 // Install Chargily.EpayGateway.NET as a Cake Tool #tool nuget:?package=Chargily.EpayGateway.NET&version=1.0.12
<img src="https://raw.githubusercontent.com/rainxh11/epay-gateway-dotnet/master/assets/chargily.svg" width="300">
Chargily ePay Gateway C#.NET Plugin
This package supports the following frameowrks and platforms:
Framework | Support | Platform |
---|---|---|
Console | ✅ | Windows, Linux, macOS |
ASP.NET Core | ✅ | Windows, Linux, macOS |
.NET MAUI | ✅ | Windows, Linux, macOS, Android, iOS, Tizen |
Xamarin | ✅ | Android, iOS |
ASP.NET | ✅ | Windows |
WPF | ✅ | Windows |
UWP | ✅ | Windows, Xbox OS |
WinForm | ✅ | Windows |
Any C# application that uses Microsoft.Extensions.DependencyInjection
can use this package
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,
BackUrl = "https://yourapp.com/",
WebhookUrl = "https://api.yourbackend.com/webhook-validator",
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 automatically.
How to register the Middleware:
using Chargily.EpayGateway.NET;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddChargilyEpayGateway("[API_KEY]");
builder.Services
.AddChargilyValidatorMiddleware("[APP_SECRET]"); // 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.1.0)
- FluentValidation.DependencyInjectionExtensions (>= 11.1.0)
- 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.5)
-
.NETStandard 2.1
- FluentValidation (>= 11.1.0)
- FluentValidation.DependencyInjectionExtensions (>= 11.1.0)
- 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.5)
-
net6.0
- FluentValidation (>= 11.1.0)
- FluentValidation.DependencyInjectionExtensions (>= 11.1.0)
- 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.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.