پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
<div class="col-md-2 pl mt-5">
<div class="proceed-to-checkout">
<a href="#" class="checkout-button d-block">تسویه حساب</a>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
مجموع کل سبد خرید: شامل بخشهایی برای نمایش قیمت کل، هزینه حمل و نقل و مجموع نهایی.
گزینههای حمل و نقل: شامل گزینههای حمل و نقل رایگان و حمل و نقل معمولی است.
کد تخفیف: یک فرم برای وارد کردن کد تخفیف و اعمال آن.
دکمه تسویه حساب: دکمهای برای انتقال به صفحه تسویه حساب.
اسکریپتها
csharp
@section Scripts
{
<script>
function AddCount(CartItemId) {
window.location.replace('/cart/add?CartItemId=' + CartItemId);
}
function lowCount(CartItemId) {
window.location.replace('/cart/LowOff?CartItemId=' + CartItemId);
}
</script>
}
افزایش تعداد آیتم: فراخوانی متد AddCount با استفاده از شناسه آیتم.
کاهش تعداد آیتم: فراخوانی متد lowCount با استفاده از شناسه آیتم.
نتیجهگیری
این ویو Razor یک صفحه کامل برای نمایش و مدیریت سبد خرید کاربر است. شامل نمایش آیتمهای موجود در سبد خرید، محاسبه مجموع قیمتها، نمایش گزینههای حمل و نقل، اعمال کد تخفیف و امکان تسویه حساب است.
Cookie management.zip
حجم:
2.5M
پروژه کوچک مدیریت کوکی که فقط در همین پروژه کوکی ساخته میشود و حذف کرد
Test_Store 16.zip
حجم:
57M
افزودن به سبد قسمت دوم
من را ببخشید نتوانستم از صفحه تست زرین پال ارتباط برقرار کنم بعدا من بیشتر برسی کنم که مشکل کجاست و اینکه من تا بعد عید نمیتوانم آموزش بگذارم شاید در عید اگر وقت کردم آموزش میگذارم
تا بعد عید از صبر شکیبایی متشکرم
من کد ها را توضیح نمیدهم چون نتوانستم ارتباط با صفحه تست زرین پال برقرار کنم، خودتان کدها را برسی کنید و اگر مشکل را حل کردید در ایتا به من پیام دهید چند تا جدول هم اضافه شده که مایگریشن جدید و آپدیت دیتابیس
لینک سایت و نمونه کدها:
https://www.zarinpal.com/lab/category/samplecode/
اگر لینک باز نشد، لینک را کپی و در مرورگر پیس کن تا لینک باز شود
zarinpalasp.netcorerest.zip
حجم:
9.6M
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود
نکته مهم : برنامه فقط یک بار اجرا می شود و نمیتونید به صفحه قبل برگردید و دوباره تست کنید.
شما پس از انصراف یا پرداخت موفق به صفحه پرداخت برگشتهاید و به دلیل مسائل امنیتی، سشن (session) پرداخت قبلی به پایان رسیده و دیگر نمیتوان از آن استفاده کرد. این یک مکانیزم امنیتی استاندارد است تا از پرداختهای تکراری یا مشکلات مرتبط با سشنهای نامعتبر جلوگیری شود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
بیایید این کد را قدم به قدم توضیح دهیم.
شرح کد:
این کد یک کلاس به نام RequestParameters در فضای نام zarinpalasp.netcorerest.Models ایجاد میکند. این کلاس برای نگهداری پارامترهای مربوط به درخواست پرداخت از زرینپال استفاده میشود.
جزئیات کد:
فضای نام و استفادهها:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
این خطوط از کد، فضاهای نام مورد نیاز برای عملکرد برنامه را وارد میکنند.
تعریف کلاس:
csharp
namespace zarinpalasp.netcorerest.Models
{
public class RequestParameters
{
کلاس RequestParameters در فضای نام zarinpalasp.netcorerest.Models تعریف شده است.
خصوصیات کلاس:
csharp
public string merchant_id { get; set; }
public string amount { get; set; }
public string description { get; set; }
public string callback_url { get; set; }
public string[]? metadata { get; set; }
این خصوصیات پارامترهای مختلف مربوط به درخواست پرداخت را تعریف میکنند:
merchant_id: شناسه تاجر.
amount: مقدار پرداخت.
description: توضیح درباره پرداخت.
callback_url: URL
بازگشتی برای تأیید یا لغو پرداخت.
metadata:
اطلاعات اضافهای که میتواند شامل موبایل و ایمیل باشد.
سازنده کلاس:
csharp
public RequestParameters(string merchant_id, string amount, string description, string callback_url, string? mobile, string? email)
{
this.merchant_id = merchant_id;
this.amount = amount;
this.description = description;
this.callback_url = callback_url;
this.metadata = new string[2];
if (mobile != null)
{
this.metadata[0] = mobile;
}
if (email != null)
{
this.metadata[1] = email;
}
}
سازنده کلاس RequestParameters پارامترهای ورودی را میپذیرد و آنها را به خصوصیات کلاس اختصاص میدهد. همچنین، آرایه metadata را مقداردهی اولیه میکند و در صورت وجود مقادیر موبایل و ایمیل، آنها را به آرایه metadata اضافه میکند.
تبدیل ضمنی:
csharp
public static implicit operator RestSharp.RequestParameters(RequestParameters v)
{
throw new NotImplementedException();
}
این خط از کد یک تبدیل ضمنی (implicit) از RequestParameters به RestSharp.RequestParameters تعریف میکند. اما چون پیادهسازی نشده، یک استثنای NotImplementedException پرتاب میکند.
نتیجهگیری
کلاس RequestParameters برای نگهداری پارامترهای مربوط به درخواست پرداخت از زرینپال استفاده میشود. این کلاس شامل پارامترهای مهمی مانند merchant_id, amount, description, callback_url, و metadata (که میتواند موبایل و ایمیل باشد) است.
پروژه 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();
نتیجهگیری
این متد اکشن برای تأیید پرداخت استفاده میشود و در صورت موفقیت، اطلاعات پرداخت را نمایش میدهد. اگر خطایی رخ دهد، پیام خطا برگردانده میشود.