پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد یک کلاس به نام URLs در فضای نام zarinpalasp.netcorerest.Models ایجاد میکند. این کلاس شامل آدرسهای URL ثابت (constant) است که برای ارتباط با زرینپال در حالت sandbox استفاده میشود.
جزئیات کد:
فضای نام و استفادهها:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
این خطوط از کد، فضاهای نام مورد نیاز برای عملکرد برنامه را وارد میکنند. در این مورد، فضای نامهای استانداردی مانند System, System.Collections.Generic, System.Linq, و System.Threading.Tasks وارد شدهاند.
تعریف کلاس:
csharp
namespace zarinpalasp.netcorerest.Models
{
public class URLs
{
کلاس URLs در فضای نام zarinpalasp.netcorerest.Models تعریف شده است. این کلاس به عنوان یک محتوای ثابت برای نگهداری URLهای مربوط به زرینپال استفاده میشود.
تعریف آدرسهای URL ثابت:
csharp
public const String gateWayUrl = "https://sandbox.zarinpal.com/pg/StartPay/";
public const String requestUrl = "https://sandbox.zarinpal.com/pg/v4/payment/request.json";
public const String verifyUrl = "https://sandbox.zarinpal.com/pg/v4/payment/verify.json";
این خطوط از کد سه آدرس URL ثابت (constant) را تعریف میکنند:
gateWayUrl:
آدرس URL که برای شروع فرآیند پرداخت استفاده میشود.
requestUrl:
آدرس URL که برای ارسال درخواست پرداخت به زرینپال استفاده میشود.
verifyUrl:
آدرس URL که برای تأیید پرداخت استفاده میشود.
نتیجهگیری
کلاس URLs شامل آدرسهای URL ثابت است که برای ارتباط با زرینپال در حالت sandbox استفاده میشود. این آدرسها شامل آدرسهایی برای شروع پرداخت، ارسال درخواست پرداخت، و تأیید پرداخت میباشند.
این ساختار کد به شما امکان میدهد تا به راحتی از این URLها در سایر بخشهای برنامه خود استفاده کنید و در صورت تغییر آدرسها، تنها کافی است این ثابتها را در یک مکان تغییر دهید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد یک کلاس به نام VerifyParameters در فضای نام zarinpalasp.netcorerest.Models ایجاد میکند. این کلاس برای نگهداری پارامترهای مربوط به تأیید پرداخت از زرینپال استفاده میشود.
جزئیات کد:
فضای نام و استفادهها:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
این خطوط از کد، فضاهای نام مورد نیاز برای عملکرد برنامه را وارد میکنند. در این مورد، فضای نامهای استانداردی مانند System, System.Collections.Generic, System.Linq, و System.Threading.Tasks وارد شدهاند.
تعریف کلاس:
csharp
namespace zarinpalasp.netcorerest.Models
{
public class VerifyParameters
{
کلاس VerifyParameters در فضای نام zarinpalasp.netcorerest.Models تعریف شده است. این کلاس به عنوان یک مدل داده برای نگهداری پارامترهای مربوط به تأیید پرداخت استفاده میشود.
خصوصیات کلاس:
csharp
public string amount { set; get; }
public string merchant_id { set; get; }
public string authority { set; get; }
این خصوصیات پارامترهای مختلف مربوط به تأیید پرداخت را تعریف میکنند:
amount: مقدار پرداخت.
merchant_id: شناسه تاجر.
authority: شناسه مربوط به تراکنش.
نتیجهگیری
کلاس VerifyParameters برای نگهداری پارامترهای مربوط به تأیید پرداخت از زرینپال استفاده میشود. این کلاس شامل پارامترهای مهمی مانند amount, merchant_id, و authority است.
این ساختار کد به شما امکان میدهد تا به راحتی این پارامترها را به عنوان بخشی از فرآیند تأیید پرداخت مدیریت کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
توضیح کد:
این کد یک کنترلر به نام HomeController است که برای مدیریت عملیات پرداخت با استفاده از زرینپال طراحی شده است. این کنترلر شامل یک متد اکشن به نام Payment است که مسئولیت ارسال درخواست پرداخت و هدایت کاربر به صفحه پرداخت زرینپال را دارد.
جزئیات کد:
تعریف کنترلر:
csharp
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
string merchant = "cfa83c81-89b0-4993-9445-2c3fcd323455";
string amount = "1100";
string authority;
string description = "خرید تستی ";
string callbackurl = "http://localhost:2812/Home/VerifyByHttpClient";
این خطوط از کد، کنترلر HomeController را تعریف میکنند و چندین خصوصیت خصوصی را برای نگهداری اطلاعات مربوط به پرداخت، مانند merchant, amount, authority, description و callbackurl ایجاد میکنند.
سازنده کنترلر:
csharp
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
این سازنده برای تنظیم شیء logger استفاده میشود که برای ثبت وقایع و خطاها به کار میرود.
متد Payment:
csharp
public IActionResult Payment()
{
try
{
RestSharp.RequestParameters Parameters = new RequestParameters(merchant, amount, description, callbackurl, "", "");
var client = new RestClient(URLs.requestUrl);
Method method = Method.Post;
var request = new RestRequest("", method);
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(Parameters);
var requestresponse = client.ExecuteAsync(request).Result;
JObject jo = JObject.Parse(requestresponse.Content);
if (jo["data"] != null && jo["data"].HasValues)
{
authority = jo["data"]["authority"].ToString();
string gatewayUrl = URLs.gateWayUrl + authority;
return Redirect(gatewayUrl);
}
else if (jo["errors"] != null && jo["errors"].HasValues)
{
string errorscode = jo["errors"]["code"].ToString();
string errorsMessage = jo["errors"]["message"].ToString();
return BadRequest($"Error code: {errorscode}, Error message: {errorsMessage}");
}
else
{
return BadRequest("Unexpected response format from ZarinPal.");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the payment request.");
return BadRequest($"Exception: {ex.Message}");
}
}
این متد مسئول ارسال درخواست پرداخت به زرینپال است. مراحل اصلی آن عبارتند از:
ایجاد شیء RequestParameters: پارامترهای مورد نیاز برای درخواست پرداخت را ایجاد و مقداردهی میکند.
ایجاد شیء RestClient و RestRequest: برای ارسال درخواست HTTP به زرینپال.
تنظیم هدرهای درخواست: شامل نوع محتوا و پذیرش JSON.
اضافه کردن پارامترهای JSON به بدنه درخواست: پارامترهای پرداخت را به بدنه درخواست اضافه میکند.
ارسال درخواست و پردازش پاسخ: درخواست را ارسال و پاسخ آن را پردازش میکند.
بررسی وجود دادهها و هدایت کاربر به صفحه پرداخت: اگر درخواست موفقیتآمیز باشد، کاربر به صفحه پرداخت هدایت میشود.
مدیریت خطاها: در صورت بروز خطا، پیام خطا برگردانده میشود.
نتیجهگیری:
این کنترلر به شما امکان میدهد تا یک درخواست پرداخت به زرینپال ارسال کنید و کاربر را به صفحه پرداخت هدایت کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد یک متد اکشن به نام VerifyPayment در کنترلر HomeController است که برای تأیید پرداخت با استفاده از زرینپال استفاده میشود.
جزئیات کد:
تعریف متد:
csharp
public IActionResult VerifyPayment()
{
این خط نشان میدهد که متد VerifyPayment یک اکشن از نوع IActionResult است که در کنترلر HomeController قرار دارد.
بدنه متد:
csharp
try
{
VerifyParameters parameters = new VerifyParameters();
if (HttpContext.Request.Query["Authority"] != "")
{
authority = HttpContext.Request.Query["Authority"];
}
parameters.authority = authority;
parameters.amount = amount;
parameters.merchant_id = merchant;
var client = new RestClient(URLs.verifyUrl);
Method method = Method.Post;
var request = new RestRequest("", method);
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(parameters);
var response = client.ExecuteAsync(request);
JObject jodata = JObject.Parse(response.Result.Content);
string data = jodata["data"].ToString();
JObject jo = JObject.Parse(response.Result.Content);
string errors = jo["errors"].ToString();
if (data != "[]")
{
string refid = jodata["data"]["ref_id"].ToString();
ViewBag.code = refid;
return View();
}
else if (errors != "[]")
{
string errorscode = jo["errors"]["code"].ToString();
return BadRequest($"error code {errorscode}");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return NotFound();
}
بیایید این بدنه را تجزیه کنیم:
Try-Catch Block: از try-catch برای مدیریت خطاها استفاده میشود. اگر خطایی رخ دهد، یک استثنا (Exception) پرتاب میشود.
ایجاد شیء VerifyParameters:
csharp
VerifyParameters parameters = new VerifyParameters();
این خط یک نمونه از کلاس VerifyParameters ایجاد میکند که شامل پارامترهای مورد نیاز برای تأیید پرداخت است.
دریافت Authority:
csharp
if (HttpContext.Request.Query["Authority"] != "")
{
authority = HttpContext.Request.Query["Authority"];
}
این کد مقدار Authority را از پارامترهای Query درخواست (Request Query) دریافت میکند و در متغیر authority ذخیره میکند.
تنظیم پارامترها:
csharp
parameters.authority = authority;
parameters.amount = amount;
parameters.merchant_id = merchant;
این پارامترها به شیء VerifyParameters اضافه میشوند.
ایجاد RestClient و RestRequest:
csharp
var client = new RestClient(URLs.verifyUrl);
Method method = Method.Post;
var request = new RestRequest("", method);
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(parameters);
این کد یک RestClient و یک RestRequest ایجاد میکند و هدرها و پارامترهای JSON را به درخواست اضافه میکند.
ارسال درخواست و پردازش پاسخ:
csharp
var response = client.ExecuteAsync(request);
JObject jodata = JObject.Parse(response.Result.Content);
string data = jodata["data"].ToString();
JObject jo = JObject.Parse(response.Result.Content);
string errors = jo["errors"].ToString();
این کد درخواست را ارسال و پاسخ آن را دریافت میکند. سپس پاسخ JSON را به اشیاء JObject تبدیل میکند تا بتواند دادهها و خطاها را استخراج کند.
بررسی دادهها و خطاها:
csharp
if (data != "[]")
{
string refid = jodata["data"]["ref_id"].ToString();
ViewBag.code = refid;
return View();
}
else if (errors != "[]")
{
string errorscode = jo["errors"]["code"].ToString();
return BadRequest($"error code {errorscode}");
}
اگر دادهها وجود داشته باشند، شناسه تراکنش (refid) استخراج و در ViewBag ذخیره میشود و سپس ویو نمایش داده میشود. اگر خطا وجود داشته باشد، کد خطا برگردانده میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
مدیریت خطاها:
csharp
catch (Exception ex)
{
throw new Exception(ex.Message);
}
در صورت بروز خطا، یک استثنا با پیام خطا پرتاب میشود.
بازگشت نتیجه NotFound در صورت عدم وجود داده:
csharp
return NotFound();
نتیجهگیری
این متد اکشن برای تأیید پرداخت استفاده میشود و در صورت موفقیت، اطلاعات پرداخت را نمایش میدهد. اگر خطایی رخ دهد، پیام خطا برگردانده میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد شامل دو متد اکشن در کنترلر HomeController است که به ترتیب VerifyByHttpClient و Index نام دارند. متد VerifyByHttpClient برای تأیید پرداخت با استفاده از HttpClient و متد Index برای نمایش صفحه اصلی استفاده میشود.
جزئیات کد:
متد VerifyByHttpClient:
csharp
public async Task<IActionResult> VerifyByHttpClient()
{
try
{
VerifyParameters parameters = new VerifyParameters();
if (!string.IsNullOrEmpty(HttpContext.Request.Query["Authority"]))
{
authority = HttpContext.Request.Query["Authority"];
}
if (string.IsNullOrEmpty(authority))
{
return BadRequest("Authority is missing.");
}
parameters.authority = authority;
parameters.amount = amount;
parameters.merchant_id = merchant;
using (HttpClient client = new HttpClient())
{
var json = JsonConvert.SerializeObject(parameters);
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(URLs.verifyUrl, content);
string responseBody = await response.Content.ReadAsStringAsync();
JObject jodata = JObject.Parse(responseBody);
if (jodata["data"] != null && jodata["data"].HasValues)
{
string refid = jodata["data"]["ref_id"].ToString();
ViewBag.code = refid;
return View();
}
else if (jodata["errors"] != null && jodata["errors"].HasValues)
{
string errorscode = jodata["errors"]["code"].ToString();
string errorsMessage = jodata["errors"]["message"].ToString();
// مدیریت انصراف کاربر
if (errorscode == "-51")
{
ViewBag.error = "انصراف از پرداخت. تراکنش لغو شده است.";
return View("CancelPayment");
}
return BadRequest($"Error code: {errorscode}, Error message: {errorsMessage}");
}
else
{
return BadRequest("Unexpected response format from ZarinPal.");
}
}
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the verification request.");
return BadRequest($"Exception: {ex.Message}");
}
return NotFound();
}
بیایید این بدنه را تجزیه کنیم:
Try-Catch Block: از try-catch برای مدیریت خطاها استفاده میشود. اگر خطایی رخ دهد، یک استثنا (Exception) پرتاب میشود و خطا ثبت (log) میشود.
ایجاد شیء VerifyParameters:
csharp
VerifyParameters parameters = new VerifyParameters();
دریافت Authority:
csharp
if (!string.IsNullOrEmpty(HttpContext.Request.Query["Authority"]))
{
authority = HttpContext.Request.Query["Authority"];
}
بررسی وجود Authority:
csharp
if (string.IsNullOrEmpty(authority))
{
return BadRequest("Authority is missing.");
}
تنظیم پارامترها:
csharp
parameters.authority = authority;
parameters.amount = amount;
parameters.merchant_id = merchant;
ایجاد HttpClient و ارسال درخواست:
csharp
using (HttpClient client = new HttpClient())
{
var json = JsonConvert.SerializeObject(parameters);
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(URLs.verifyUrl, content);
string responseBody = await response.Content.ReadAsStringAsync();
JObject jodata = JObject.Parse(responseBody);
}
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
بررسی و مدیریت پاسخ:
csharp
if (jodata["data"] != null && jodata["data"].HasValues)
{
string refid = jodata["data"]["ref_id"].ToString();
ViewBag.code = refid;
return View();
}
else if (jodata["errors"] != null && jodata["errors"].HasValues)
{
string errorscode = jodata["errors"]["code"].ToString();
string errorsMessage = jodata["errors"]["message"].ToString();
// مدیریت انصراف کاربر
if (errorscode == "-51")
{
ViewBag.error = "انصراف از پرداخت. تراکنش لغو شده است.";
return View("CancelPayment");
}
return BadRequest($"Error code: {errorscode}, Error message: {errorsMessage}");
}
else
{
return BadRequest("Unexpected response format from ZarinPal.");
}
مدیریت خطاها:
csharp
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the verification request.");
return BadRequest($"Exception: {ex.Message}");
}
بازگشت نتیجه NotFound در صورت عدم وجود داده:
csharp
return NotFound();
متد Index:
csharp
public IActionResult Index()
{
return View();
}
این متد اکشن سادهای است که ویوی Index را نمایش میدهد.
نتیجهگیری
متد VerifyByHttpClient برای تأیید پرداخت با استفاده از HttpClient و مدیریت پاسخها و خطاها طراحی شده است. متد Index نیز برای نمایش صفحه اصلی استفاده میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد مربوط به یک ویو به نام Index است که برای نمایش یک صفحه وب در یک پروژه ASP.NET Core استفاده میشود. این ویو شامل یک عنوان، یک دکمه برای ارسال درخواست و یک لینک برای پرداخت است.
جزئیات کد:
ViewData["Title"]:
csharp
@{
ViewData["Title"] = "zarinpal";
}
این خط از کد، عنوان صفحه را با استفاده از ViewData تنظیم میکند. در این مورد، عنوان صفحه به "zarinpal" تنظیم شده است.
ساختار HTML:
html
<div class="text-center">
<h1 class="display-4">zarinpal</h1>
@*<input type="submit" value="ارسال درخواست" class="btn btn-success" /> *@
<a class="btn btn-primary btn-block" asp-action="PaymenBytHttpClient">پرداخت</a>
</div>
<div class="text-center">: این تگ div شامل محتوایی است که به صورت مرکزی تراز شده است.
<h1 class="display-4">zarinpal</h1>: این تگ h1 یک عنوان بزرگ با کلاس "display-4" از Bootstrap را نمایش میدهد که متن آن "zarinpal" است.
@<input type="submit" value="ارسال درخواست" class="btn btn-success" /> @: این خط از کد یک ورودی از نوع "submit" است که به عنوان دکمهای برای ارسال درخواست عمل میکند. این خط به صورت کامنت شده است و نمایش داده نمیشود.
<a class="btn btn-primary btn-block" asp-action="PaymenBytHttpClient">پرداخت</a>: این تگ a یک لینک به عملگر PaymenBytHttpClient در کنترلر است که به عنوان دکمهای با کلاسهای "btn btn-primary btn-block" از Bootstrap نمایش داده میشود. متن این دکمه "پرداخت" است.
نتیجهگیری:
این ویو یک صفحه ساده با یک عنوان و یک دکمه برای پرداخت ایجاد میکند. با کلیک بر روی دکمه پرداخت، کاربر به عملگر PaymenBytHttpClient در کنترلر هدایت میشود تا فرآیند پرداخت را آغاز کند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد مربوط به یک ویو به نام VerifyPayment است که برای نمایش نتیجه پرداخت در یک پروژه ASP.NET Core استفاده میشود. این ویو شامل یک عنوان، پیام موفقیتآمیز بودن پرداخت و نمایش شناسه تراکنش است.
جزئیات کد:
ViewData["Title"]:
csharp
@{
ViewData["Title"] = "VerifyPayment";
}
این خط از کد، عنوان صفحه را با استفاده از ViewData تنظیم میکند. در این مورد، عنوان صفحه به "VerifyPayment" تنظیم شده است.
ساختار HTML:
html
<h1>نتیجه پرداخت</h1>
<hr />
<div class="alert alert-success">
<h2>پرداخت موفق</h2>
<p>شناسه تراکنش : @ViewBag.code</p>
</div>
<h1>نتیجه پرداخت</h1>: این تگ h1 یک عنوان بزرگ با متن "نتیجه پرداخت" را نمایش میدهد.
<hr />: این تگ یک خط افقی را در صفحه ایجاد میکند.
<div class="alert alert-success">: این تگ div یک پیام موفقیتآمیز را در یک باکس هشدار سبز (با کلاسهای "alert alert-success" از Bootstrap) نمایش میدهد.
<h2>پرداخت موفق</h2>: این تگ h2 یک عنوان کوچکتر با متن "پرداخت موفق" را نمایش میدهد.
<p>شناسه تراکنش : @ViewBag.code</p>: این تگ p یک پاراگراف با متن "شناسه تراکنش :" و مقدار @ViewBag.code را نمایش میدهد. مقدار @ViewBag.code از کنترلر به ویو ارسال شده است و شناسه تراکنش را نمایش میدهد.
نتیجهگیری
این ویو برای نمایش نتیجه پرداخت طراحی شده است. در صورتی که پرداخت موفق باشد، پیام موفقیتآمیز بودن پرداخت و شناسه تراکنش به کاربر نمایش داده میشود. استفاده از کلاسهای Bootstrap باعث زیباسازی و سازماندهی بهتر صفحه میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد مربوط به یک ویو به نام CancelPayment است که برای نمایش نتیجه انصراف از پرداخت در یک پروژه ASP.NET Core استفاده میشود. این ویو شامل یک عنوان، پیام انصراف از پرداخت و نمایش پیام خطا (در صورت وجود) است.
جزئیات کد:
ViewData["Title"]:
csharp
@{
ViewData["Title"] = "انصراف از پرداخت";
}
این خط از کد، عنوان صفحه را با استفاده از ViewData تنظیم میکند. در این مورد، عنوان صفحه به "انصراف از پرداخت" تنظیم شده است.
ساختار HTML:
html
<h1>نتیجه پرداخت</h1>
<hr />
<div class="alert alert-danger">
<h2>انصراف از پرداخت</h2>
<p>@ViewBag.error</p>
</div>
<h1>نتیجه پرداخت</h1>: این تگ h1 یک عنوان بزرگ با متن "نتیجه پرداخت" را نمایش میدهد.
<hr />: این تگ یک خط افقی را در صفحه ایجاد میکند.
<div class="alert alert-danger">: این تگ div یک پیام انصراف از پرداخت را در یک باکس هشدار قرمز (با کلاسهای "alert alert-danger" از Bootstrap) نمایش میدهد.
<h2>انصراف از پرداخت</h2>: این تگ h2 یک عنوان کوچکتر با متن "انصراف از پرداخت" را نمایش میدهد.
<p>@ViewBag.error</p>: این تگ p یک پاراگراف با متن خطا (در صورت وجود) را نمایش میدهد. مقدار @ViewBag.error از کنترلر به ویو ارسال شده است و پیام خطا را نمایش میدهد.
نتیجهگیری
این ویو برای نمایش نتیجه انصراف از پرداخت طراحی شده است. در صورتی که کاربر انصراف از پرداخت را انتخاب کند، پیام مناسب به همراه جزئیات خطا (در صورت وجود) به کاربر نمایش داده میشود. استفاده از کلاسهای Bootstrap باعث زیباسازی و سازماندهی بهتر صفحه میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد یک متد اکشن به نام PaymenBytHttpClient در کنترلر HomeController است که برای ارسال درخواست پرداخت به زرینپال با استفاده از HttpClient و دریافت نتیجه پرداخت استفاده میشود. همچنین این متد خطاهای مربوط به قطع اتصال به درگاه یا اینترنت را مدیریت میکند.
جزئیات کد:
تعریف متد:
csharp
public async Task<IActionResult> PaymenBytHttpClient()
{
این خط نشان میدهد که متد PaymenBytHttpClient یک اکشن از نوع Task<IActionResult> است که به صورت ناهمزمان (asynchronous) اجرا میشود و یک IActionResult را برمیگرداند.
بدنه متد:
csharp
try
{
using (var client = new HttpClient())
{
RequestParameters parameters = new RequestParameters(merchant, amount, description, callbackurl, "", "");
var json = JsonConvert.SerializeObject(parameters);
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(URLs.requestUrl, content);
string responseBody = await response.Content.ReadAsStringAsync();
JObject jo = JObject.Parse(responseBody);
string errorscode = jo["errors"].ToString();
JObject jodata = JObject.Parse(responseBody);
string dataauth = jodata["data"].ToString();
if (dataauth != "[]")
{
authority = jodata["data"]["authority"].ToString();
string gatewayUrl = URLs.gateWayUrl + authority;
return Redirect(gatewayUrl);
}
else
{
return BadRequest("Error: " + errorscode);
}
}
}
بیایید این بدنه را تجزیه کنیم:
Try-Catch Block: از try-catch برای مدیریت خطاها استفاده میشود. اگر خطایی رخ دهد، یک استثنا (Exception) پرتاب میشود و خطا ثبت (log) میشود.
ایجاد HttpClient:
csharp
using (var client = new HttpClient())
{
این کد یک شیء HttpClient ایجاد میکند که برای ارسال درخواست HTTP استفاده میشود.
ایجاد شیء RequestParameters:
csharp
RequestParameters parameters = new RequestParameters(merchant, amount, description, callbackurl, "", "");
این خط یک نمونه از کلاس RequestParameters ایجاد میکند که شامل پارامترهای مورد نیاز برای درخواست پرداخت است.
سریالسازی JSON:
csharp
var json = JsonConvert.SerializeObject(parameters);
این کد شیء parameters را به یک رشته JSON سریالسازی میکند.
ایجاد HttpContent:
csharp
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
این کد محتوای درخواست HTTP را با استفاده از رشته JSON ایجاد میکند و نوع محتوا را به application/json تنظیم میکند.
ارسال درخواست و دریافت پاسخ:
csharp
HttpResponseMessage response = await client.PostAsync(URLs.requestUrl, content);
string responseBody = await response.Content.ReadAsStringAsync();
این کد درخواست POST را به URL مشخص شده ارسال و پاسخ آن را به صورت ناهمزمان دریافت میکند.
تجزیه پاسخ JSON:
csharp
JObject jo = JObject.Parse(responseBody);
string errorscode = jo["errors"].ToString();
JObject jodata = JObject.Parse(responseBody);
string dataauth = jodata["data"].ToString();
این کد پاسخ JSON را به اشیاء JObject تبدیل میکند تا بتواند دادهها و خطاها را استخراج کند.
بررسی دادهها و خطاها:
csharp
if (dataauth != "[]")
{
authority = jodata["data"]["authority"].ToString();
string gatewayUrl = URLs.gateWayUrl + authority;
return Redirect(gatewayUrl);
}
else
{
return BadRequest("Error: " + errorscode);
}
اگر دادهها وجود داشته باشند، شناسه تراکنش (authority) استخراج و کاربر به صفحه پرداخت هدایت میشود. اگر خطا وجود داشته باشد، پیام خطا برگردانده میشود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
مدیریت خطاها:
csharp
catch (HttpRequestException httpEx)
{
_logger.LogError(httpEx, "HTTP request error occurred while processing the payment request.");
return View("Error", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = "خطا در ارتباط با درگاه پرداخت. لطفاً مجدداً تلاش کنید." });
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the payment request.");
return View("Error", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = ex.Message });
}
return NotFound();
}
HttpRequestException:
csharp
catch (HttpRequestException httpEx)
{
_logger.LogError(httpEx, "HTTP request error occurred while processing the payment request.");
return View("Error", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = "خطا در ارتباط با درگاه پرداخت. لطفاً مجدداً تلاش کنید." });
}
این بلوک خطاهای مربوط به درخواست HTTP را مدیریت میکند و یک پیام خطا به همراه ویوی Error نمایش میدهد.
Exception:
csharp
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the payment request.");
return View("Error", new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorMessage = ex.Message });
}
این بلوک سایر خطاها را مدیریت میکند و یک پیام خطا به همراه ویوی Error نمایش میدهد.
بازگشت نتیجه NotFound در صورت عدم وجود داده:
csharp
return NotFound();
نتیجهگیری
این متد اکشن برای ارسال درخواست پرداخت به زرینپال با استفاده از HttpClient و مدیریت خطاهای اتصال طراحی شده است. در صورت وقوع خطاهای مختلف، پیامهای مناسبی به کاربر نمایش داده میشود.