پیادهسازی درگاه پرداخت زرینپال روی داتنت (.NET)
زرینپال برای .NET کتابخانهای فراهم کرده که پیادهسازی را ساده میکند. در ادامه راهنمای کامل گامبهگام برای این کار ارائه میشود:
پیشنیازها:
-
اکانت تاییدشده در زرینپال و دریافت مرچنت کد (Merchant ID)
-
محیط توسعه .NET Core یا .NET Framework (ترجیحاً .NET Core 3.1 یا بالاتر)
-
نصب کتابخانه
Zarinpalاز طریق NuGet
۱. نصب کتابخانه زرینپال
در ترمینال یا Package Manager Console:
dotnet add package ZarinPal.Classic
یا در Visual Studio:
Install-Package ZarinPal.Classic
۲. ارسال درخواست پرداخت
ابتدا باید درخواست پرداخت را برای زرینپال بفرستید:
using Zarinpal.Classic;
using Zarinpal.Classic.Models;
public class PaymentService
{
private const string MerchantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // کد مرچنت
private const string CallbackUrl = "https://yourdomain.com/payment/verify";
public async Task<string> CreatePaymentRequest(int amount, string description)
{
var payment = new Payment(MerchantId);
var result = await payment.Request(new PaymentRequest()
{
Amount = amount,
CallbackUrl = CallbackUrl,
Description = description
});
if (result.Status == 100)
{
return $"https://www.zarinpal.com/pg/StartPay/{result.Authority}";
}
else
{
throw new Exception($"خطا در ایجاد درخواست پرداخت: {result.Status}");
}
}
}
۳. هدایت کاربر به صفحه پرداخت
در کنترلر مربوطه، کاربر را به لینک دریافتی (StartPay) ریدایرکت کنید:
public async Task<IActionResult> Pay()
{
var service = new PaymentService();
var url = await service.CreatePaymentRequest(10000, "خرید محصول X");
return Redirect(url);
}
۴. بررسی وضعیت پرداخت (Verify)
بعد از پرداخت، کاربر به CallbackUrl هدایت میشود. در این مرحله باید تاییدیه پرداخت گرفته شود:
public async Task<IActionResult> Verify(string Authority, string Status)
{
if (Status == "OK")
{
var payment = new Payment(MerchantId);
var result = await payment.Verify(new VerificationRequest()
{
Amount = 10000, // مبلغ را حتما با مقدار اولیه یکسان بفرستید
Authority = Authority
});
if (result.Status == 100)
{
ViewBag.Message = $"پرداخت موفق بود. کد رهگیری: {result.RefId}";
}
else
{
ViewBag.Message = $"پرداخت ناموفق بود. کد وضعیت: {result.Status}";
}
}
else
{
ViewBag.Message = "پرداخت توسط کاربر لغو شد.";
}
return View();
}
نکات مهم
-
برای تست درگاه، از sandbox زرینپال استفاده کنید:
https://sandbox.zarinpal.com/pg/services/WebGate/wsdl -
در محیط واقعی، حتما SSL فعال باشد و Callback URL امن باشد.
-
وضعیتهای مختلف
result.Statusرا بررسی کنید (مثلاً 101 یعنی پرداخت قبلاً تایید شده).



