Zarinpal.AspNetCore
3.1.0
dotnet add package Zarinpal.AspNetCore --version 3.1.0
NuGet\Install-Package Zarinpal.AspNetCore -Version 3.1.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="Zarinpal.AspNetCore" Version="3.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Zarinpal.AspNetCore --version 3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Zarinpal.AspNetCore, 3.1.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 Zarinpal.AspNetCore as a Cake Addin
#addin nuget:?package=Zarinpal.AspNetCore&version=3.1.0
// Install Zarinpal.AspNetCore as a Cake Tool
#tool nuget:?package=Zarinpal.AspNetCore&version=3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Zarinpal.AspNetCore
Zarinpal payment gateway for Asp.Net Core
Installation
PM> Install-Package Zarinpal.AspNetCore -Version 3.1.0
- Use
AddZarinpal
to add needed services to service container.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddZarinpal(options =>
{
builder.Configuration.GetSection("Zarinpal").Bind(options);
});
// Or
builder.Services.AddZarinpal(options =>
{
options.MerchantId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";
options.ZarinpalMode = ZarinpalMode.Sandbox;
options.Currency = ZarinpalCurrency.IRT;
});
Note:
If you bind options from appsettings.json See sample
- Inject
IZarinpalService
to your controller
public class MyController : Controller
{
private readonly IZarinpalService _zarinpalService;
public MyController(IZarinpalService zarinpalService)
{
_zarinpalService = zarinpalService;
}
}
- Finish setup 😃
Request Payment
int toman = 5000;
int rial = toman.TomanToRial(); // If store your price in toman you can use TomanToRial extension
/*
* Pay atttention: Currency is important, default is IRR (Rial)
*
* Here we set it to Toman (IRT)
"Zarinpal": {
...
"Currency": "IRT", // IRR - IRT
...
}
*/
var request = new ZarinpalRequestDTO(toman, "خرید",
"https://localhost:7219/Home/VerifyPayment",
"test@test.com", "09123456789");
var result = await _zarinpalService.RequestAsync(request);
if (result.Data != null)
{
// You can store or log zarinpal data in database
string authority = result.Data.Authority;
int code = result.Data.Code;
int fee = result.Data.Fee;
string feeType = result.Data.FeeType;
string message = result.Data.Message;
}
if (result.IsSuccessStatusCode)
return Redirect(result.RedirectUrl);
Verify Payment
[HttpGet]
public async Task<IActionResult> VerifyPayment()
{
// Check 'Status' and 'Authority' query param so zarinpal sent for us
if (HttpContext.IsValidZarinpalVerifyQueries())
{
int toman = 5000;
int rial = toman.TomanToRial(); // If store your price in toman you can use TomanToRial extension
/*
* Pay atttention: Currency is important, default is IRR (Rial)
*
* Here we set it to toman (IRT)
"Zarinpal": {
...
"Currency": "IRT", // IRR - IRT
...
}
*/
var verify = new ZarinpalVerifyDTO(toman,
HttpContext.GetZarinpalAuthorityQuery()!);
var response = await _zarinpalService.VerifyAsync(verify);
if (response.Data != null)
{
// You can store or log zarinpal data in database
ulong refId = response.Data.RefId;
int fee = response.Data.Fee;
string feeType = response.Data.FeeType;
int code = response.Data.Code;
string cardHash = response.Data.CardHash;
string cardPan = response.Data.CardPan;
}
if (response.IsSuccessStatusCode)
{
// Do Somethings...
var refId = response.RefId;
var statusCode = response.StatusCode;
}
return View(response.IsSuccessStatusCode);
}
return View(false);
}
Pay attention
- In sandbox don't need set MerchantId. (
Just a string of 36 characters
) - In sandbox use amount in
Toman
What is IAdvancedZarinpalService
?
- If you wanna use 'UnVerified' method, you must inject
IAdvancedZarinpalService
to service container. (Automatically not injected) - So let's come back into
Program.cs
and edit it (Or Set it inappsettings.json
like sample):
builder.Services.AddZarinpal(options =>
{
options.MerchantId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";
options.ZarinpalMode = ZarinpalMode.Original;
options.Currency = ZarinpalCurrency.IRT;
options.UseAdvanced = true;
});
- Now we can use
IAdvancedZarinpalService
:
private readonly IAdvancedZarinpalService _advancedZarinpalService;
public MyController(IAdvancedZarinpalService advancedZarinpalService)
{
_advancedZarinpalService = advancedZarinpalService;
}
public async Task<IActionResult> UnVerifiedPayments()
{
var result = await _advancedZarinpalService.UnVerifiedAsync();
return Ok(result);
}
Extensions maybe you need in your project
// For verify payment
bool isValidZarinpalVerifyQueries = HttpContext.IsValidZarinpalVerifyQueries();
// Get authority from query params
string authority = HttpContext.GetZarinpalAuthorityQuery();
// Convert toman to rial
int toman = 500;
int rial = toman.TomanToRial();
// Get status message
var message = ZarinpalStatusCode.St100.GetStatusCodeMessage();
Support
For support, click here.
Docs
V4 Zarinpal Docs: click here.
Give a star ⭐️ !!!
If you liked the project, please give a star 😃
License
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- Microsoft.Extensions.Http.Polly (>= 8.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.