زمان:
حجم:
10.3M
صفر تا صد اتصال به زرین پال در ASP.Net Core MVC
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
صفر تا صد اتصال به زرین پال در ASP.Net Core MVC ساخته شده از هوش مصنوعی
این پادکست رو برات در سه بخش تنظیم کردم، با تمرکز روی اتصال به درگاه زرینپال در پروژه ASP.NET Core MVC، استفاده از کتابخانهها، و بررسی کدهای مهم بدون اینکه همه جزئیات رو بگیم—درست مثل سبک notebooklm که فقط نکات کلیدی رو برجسته میکنه:
---
🎙️ بخش اول: شروع پرداخت با زرینپال در ASP.NET Core MVC
سلام به همه شنوندههای عزیز!
توی این قسمت، میخوایم درباره نحوه اتصال به درگاه پرداخت زرینپال در پروژههای ASP.NET Core MVC صحبت کنیم.
در ابتدا، کنترلری به نام PayController داریم که با [Authorize] محافظت شده تا فقط کاربران واردشده بتونن پرداخت انجام بدن.
در متد Index، اطلاعات سبد خرید کاربر از طریق سرویس ICartService گرفته میشه. اگر مبلغ سبد بیشتر از صفر باشه، درخواست پرداخت با IAddRequestPayService ساخته میشه.
🔹 نکته مهم:
برای ارسال درخواست به زرینپال، از HttpClient استفاده میکنیم و اطلاعات پرداخت مثل مبلغ، توضیحات، شناسه پذیرنده و لینک بازگشتی رو به صورت JSON ارسال میکنیم.
---
🎙️ بخش دوم: کتابخانهها و ساختار درخواست پرداخت
در این بخش، به کتابخانههایی که برای این عملیات استفاده میشن اشاره میکنیم:
- Newtonsoft.Json
برای سریالسازی JSON
- RestSharp
برای ارسال درخواست تأیید پرداخت
- System.Text
برای تنظیم Encoding
- JObject
برای تجزیه پاسخ دریافتی از زرینپال
- سرویسهای سفارشی مثل IAddRequestPayService, ICartService, IGetRequestPayService, IAddNewOrderService
🔧 نکته کلیدی:
در متد Verify، بعد از بازگشت از درگاه، با استفاده از authority و guid، وضعیت پرداخت بررسی میشه. اگر موفق باشه، شماره پیگیری (ref_id) دریافت میشه و سفارش نهایی با AddNewOrderService ثبت میشه.
---
🎙️ بخش سوم: نکات امنیتی و تجربه کاربری
در پایان، چند نکته مهم برای امنیت و تجربه بهتر کاربر:
- بررسی وضعیت پرداخت (status != "OK") برای جلوگیری از ثبت سفارش اشتباه
- استفاده از ViewBag برای نمایش پیامهای خطا یا موفقیت
- هدایت کاربر به صفحه سفارشها بعد از پرداخت موفق
- استفاده از CookiesManeger برای شناسایی مرورگر و سبد خرید
- استفاده از callback_url برای بازگشت امن به سایت بعد از پرداخت
✅ این ساختار باعث میشه پرداخت آنلاین در پروژه MVC هم امن باشه، هم قابل توسعه، و هم تجربه خوبی برای کاربر ایجاد کنه.
زمان:
حجم:
7.6M
احراز هویت پیامکی در ASP.Net Core
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
احراز هویت پیامکی در ASP.Net Core ساخته شده از هوش مصنوعی
پادکست، با اصلاح کامل پنلهای پیامکی، کتابخانهها، و اضافه شدن بخش مدیریت پیامها از طریق داشبورد پنلها. این نسخه هم فنیه، هم کاربردی، و هم خوشبیان برای شنوندههای حرفهای.
---
🎙️ بخش اول: تولید اعداد تصادفی برای اعتبارسنجی
سلام به همهی شنوندههای عزیز!
توی این قسمت، میخوایم دربارهی یکی از پایهایترین قابلیتها در اپلیکیشنهای تحت وب صحبت کنیم: تولید اعداد تصادفی برای ارسال پیامک تأیید هویت.
در ASP.NET Core MVC، برای تولید کد اعتبارسنجی امن، بهتره از RandomNumberGenerator استفاده کنیم:
using System.Security.Cryptography;
byte[] bytes = new byte[4];
RandomNumberGenerator.Fill(bytes);
int code = BitConverter.ToInt32(bytes, 0) % 900000 + 100000; // عدد ۶ رقمی
این کد معمولاً در Session یا Redis ذخیره میشه و بعداً با ورودی کاربر مقایسه میشه.
---
🎙️ بخش دوم: ارسال پیامک با پنلهای معتبر
برای ارسال پیامک، از پنلهای حرفهای و معتبر استفاده میکنیم که API قدرتمند و داشبورد مدیریتی دارن:
۱ـ کاوهنگار
ارسال OTP، گزارش تحویل، RESTful API
kavenegar.com
۲ـ SMS.ir
ارسال زماندار، دفترچه تلفن، گزارشگیری
sms.ir
۳ـ فراپیامک
ارسال منطقهای، خطوط اختصاصی، پیامک انبوه
farapayamak.ir
پس از ثبتنام در این سایتها، به پنل کاربری دسترسی پیدا میکنیم که در اون میتونیم:
- محتوای پیامهای ارسالشده رو ببینیم
- وضعیت تحویل پیامها رو بررسی کنیم
- لیست مخاطبین و گروهبندیها رو مدیریت کنیم
- گزارشهای آماری و نمودارهای ارسال رو دریافت کنیم
---
🎙️ بخش سوم: ارسال پیامک از طریق API
برای اتصال به API، میتونیم از HttpClient یا Refit استفاده کنیم. مثال ساده با HttpClient برای کاوهنگار:
var client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(new {
receptor = userPhone,
message = $"کد شما: {code}"
}), Encoding.UTF8, "application/json");
await client.PostAsync("https://api.kavenegar.com/v1/YOURAPIKEY/sms/send.json", content);
---
🎙️ بخش چهارم: مقایسه کد دریافتی با کد تولیدشده
بعد از ارسال پیامک، کاربر کد رو وارد میکنه و ما اون رو با کد ذخیرهشده مقایسه میکنیم:
if (inputCode == HttpContext.Session.GetString("otpCode"))
{
// اعتبارسنجی موفق
}
else
{
// کد اشتباه است
}
برای امنیت بیشتر، میتونیم زمان انقضا برای کد بذاریم یا تعداد دفعات ورود رو محدود کنیم.
---
🎙️ بخش پنجم: نصب کتابخانهها در ویژوال استودیو
برای استفاده از کتابخانههای موردنیاز، از NuGet استفاده میکنیم:
Install-Package System.Text.Json
Install-Package Newtonsoft.Json
Install-Package Refit
Install-Package StackExchange.Redis
> توجه: System.Security.Cryptography بهصورت پیشفرض در .NET Core وجود داره.
---
🎙️ بخش ششم: انواع ارسال پیامک
پنلهای پیامکی معمولاً این نوع ارسالها رو پشتیبانی میکنن:
1. ارسال پیامک ساده (متنی)
2. ارسال پیامک اعتبارسنجی (OTP)
3. ارسال پیامک تبلیغاتی یا انبوه
4. ارسال پیامک زمانبندیشده یا خودکار
---
🎯 نکتههای تکمیلی برای توسعهدهندهها
- برای استفاده از Redis، سرور Redis رو روی لوکال یا فضای ابری مثل Azure یا Docker راهاندازی کن
- برای استفاده از Refit، ابتدا Interface مربوط به API رو تعریف کن و بعد با RestService.For<T>() کلاینت بساز
- کلید API رو از پنل پیامکی دریافت کن و در appsettings.json ذخیره کن:
json
"Kavenegar": {
"ApiKey": "YOURAPIKEY"
}
---
با این پادکست، نهتنها با نحوهی تولید و ارسال کد اعتبارسنجی آشنا شدی، بلکه یاد گرفتی چطور پیامها رو از طریق پنل مدیریت کنی و گزارش بگیری.
📁 مقایسه دو پروژه ASP.NET Core MVC
در این پست دو نسخه از پروژه فروشگاه محصول رو قرار دادم:
✅ ProductShopC
- ساختار ساده و مستقیم
- منطق برنامه داخل کنترلرها نوشته شده
- مناسب برای شروع یادگیری MVC و آشنایی با Entity Framework
✅ ProductShopRS
- ساختار حرفهای با معماری Repository + Service
- جداسازی کامل منطق تجاری از کنترلرها
- قابل توسعه، تستپذیر و مناسب برای پروژههای واقعی
ProductShopC (2).zip
حجم:
24.8M
📌 بهروزرسانی پروژه ProductShopC
در نسخهی اولیهی پروژه ProductShopC، فرم ویرایش ویژگیها بهدرستی مقدار جدید را ذخیره نمیکرد.
در این اصلاح، منطق ویرایش ویژگیها در کنترلر بازنویسی شد تا تغییرات متن ویژگیها بهدرستی در دیتابیس ذخیره شوند.
✅ حالا هنگام ویرایش محصول، میتونید متن ویژگیها را تغییر دهید و مطمئن باشید که تغییرات اعمال میشوند.
📁 پروژه دوم (ProductShopRS) با معماری سرویس و ریپوزیتوری از ابتدا این قابلیت را دارد.
اما در این پست، نسخهی سادهی پروژه اول نیز اصلاح شده و آماده استفاده است.
## ✅ دلیل اصلی: هر پروژه کوکی احراز هویت خودش را دارد
وقتی با ASP.NET Core از احراز هویت مبتنی بر کوکی (Cookie Authentication) استفاده میکنی، اطلاعات لاگینشدهی کاربر در قالب یک کوکی در مرورگر ذخیره میشه.
اما این کوکی به نام پروژه (یا دامنه) وابسته است.
### یعنی چی؟
- وقتی وارد پروژه اول (مثلاً
ProductShopC) میشی، کوکیای با نام خاصی ذخیره میشه - وقتی وارد پروژه دوم (
ProductShopRS) میشی، اون یکی پروژه کوکی خودش رو مینویسه - چون هر دو پروژه روی یک دامنه محلی (مثلاً
localhost) اجرا میشن، کوکی جدید قبلی رو جایگزین میکنه - نتیجه: پروژه اول فکر میکنه کاربر از سیستم خارج شده --- ## 🛠 راهحلها ### 1. استفاده از نام کوکی متفاوت برای هر پروژه در Program.cs یا `Startup.cs`، میتونی نام کوکی را برای هر پروژه متفاوت تنظیم کنی: csharp builder.Services.ConfigureApplicationCookie(options => { options.Cookie.Name = "ProductShopC.Auth"; }); و در پروژه دوم: csharp builder.Services.ConfigureApplicationCookie(options => { options.Cookie.Name = "ProductShopRS.Auth"; }); > حالا هر پروژه کوکی خودش رو داره و لاگینها تداخل نمیکنن. --- ### 2. اجرای پروژهها روی پورت یا دامنه متفاوت اگر پروژهها رو روی پورتهای مختلف اجرا کنی (مثلاً یکی روی
localhost:5000و دیگری روی
localhost:6000)، کوکیها جدا میمونن. --- ### 3. استفاده از محیطهای جداگانه (مثلاً IIS یا Docker) در محیط واقعی، هر پروژه روی دامنه خودش اجرا میشه و کوکیها مستقل هستن. در حالت توسعه، چون هر دو روی
localhostهستن، باید با نام کوکی یا پورت جداشون کنی. --- ## ✨ نتیجهگیری | راهحل | مزیت | |--------|------| | تغییر نام کوکی | سادهترین و سریعترین راه | | تغییر پورت | مناسب برای تست همزمان | | محیط جداگانه | مناسب برای پروژههای واقعی | --- تو داری دقیق و حرفهای فکر میکنی، و اینجور جزئیات نشونهی رشد واقعیته. اگه خواستی، میتونم یه فایل تنظیمات کامل برای هر پروژه آماده کنم تا کوکیها تداخل نداشته باشن. بزن بریم ، اینم یکی از اون لحظههای طلایی یادگیری بود 💙🧠🔐
زمان:
حجم:
16M
معماری کلین در ASP.Net Core MVC
ساخته شده از هوش مصنوعی
پروژه ASP.Net Core MVC (وب و سی شارپ)
معماری کلین در ASP.Net Core MVC ساخته شده از هوش مصنوعی
انواع معماری و لایهها در ASP.Net Core MVC
---
🎙️ توضیح تکمیلی: انواع معماری و لایهها در طراحی نرمافزار
در طراحی نرمافزار، معماری یعنی نحوهی سازماندهی کدها و مسئولیتها. چند مدل رایج وجود داره:
- معماری سهلایه (Three-Tier): شامل لایه نمایش (UI)، لایه منطق (Business Logic)، و لایه داده (Data Access). ساده و مناسب پروژههای کوچک تا متوسط.
- معماری MVC (Model-View-Controller): دادهها در Model، رابط کاربری در View، و کنترل جریان در Controller. پایهی ASP.NET Core MVC.
- معماری کلین (Clean Architecture): شامل پنج لایه مستقل:
- Domain: موجودیتها و منطق اصلی
- Application: سرویسها و Use Caseها
- Infrastructure: ارتباط با سرویسهای خارجی
- Persistence: دیتابیس و Repositoryها
- Presentation: رابط کاربری و APIها
مزیت معماری کلین اینه که وابستگیها از بیرون به درون هستن، نه برعکس—یعنی منطق اصلی پروژه همیشه مستقل باقی میمونه.
---
🎙️ بخش اول: چرا معماری کلین؟
معماری کلین یه سبک طراحی نرمافزار مدرن و قابل توسعهست که هدفش جداسازی مسئولیتها، کاهش وابستگیها و افزایش تستپذیریه.
در این معماری، منطق کسبوکار در مرکز قرار میگیره و لایههای دیگر به اون وابسته هستن—not the other way around.
---
🎙️ بخش دوم: معرفی پنج لایه اصلی
1️⃣ Domain Layer (لایه دامنه)
هستهی اصلی سیستم.
شامل موجودیتها (Entities)، قوانین کسبوکار، و مدلهای اصلی.
کاملاً مستقل از سایر لایههاست و هیچ وابستگی به دیتابیس یا UI نداره.
> مثال: کلاس User با ویژگیهایی مثل Name, Email, IsActive
---
2️⃣ Application Layer (لایه کاربردی)
منطق اجرایی و سرویسهای اپلیکیشن اینجا قرار میگیرن.
شامل Use Caseها، اینترفیسها، و سرویسهایی که با Domain تعامل دارن.
> مثال: IUserService برای مدیریت کاربران، یا RegisterUserCommand
---
3️⃣ Infrastructure Layer (زیرساخت)
پیادهسازیهای واقعی برای اینترفیسهای لایه Application.
شامل سرویسهای ارسال ایمیل، پیامک، فایل، و ارتباط با APIهای خارجی.
> مثال: کلاس SmsSender که از ISmsService پیروی میکنه و به پنل پیامکی متصل میشه
---
4️⃣ Persistence Layer (لایه ذخیرهسازی)
مسئول ارتباط با دیتابیس.
شامل Repositoryها، DbContext، و Migrationها.
از Entity Framework Core یا Dapper استفاده میشه.
> مثال: UserRepository که عملیات CRUD روی جدول کاربران انجام میده
---
5️⃣ Presentation Layer (لایه نمایش)
رابط کاربری پروژه.
در ASP.NET Core MVC شامل Controllerها، Viewها، Razor Pages و API Endpointهاست.
> مثال: UserController که اطلاعات کاربر رو از سرویس میگیره و به View ارسال میکنه
---
🎙️ بخش سوم: مزایای معماری کلین
- تستپذیری بالا
- توسعهپذیری و نگهداری آسان
- جداسازی کامل منطق کسبوکار از UI و دیتابیس
- پیادهسازی اصول SOLID و Dependency Inversion