docs: فاز ۱۱ — فیکسهای پرداخت ZarinPal + تصحیح تومان/ریال + امنیت Callback URL
- CHANGELOG: Phase 11 (11a-11f) — ZarinPal verify fix, تومان/ریال مدل, صفحه موفقیت, حذف ×۱۰ دوبار, callback URL امنیت - BUSINESS-02: تصحیح مدل ارزی (DB=تومان نه ریال), ZarinPal verify fix, جدول callback URL امنیت - TECH-01: اضافه CmsBaseUrl/FrontOfficeBaseUrl به appsettings, توضیح امنیت Open Redirect - TECH-02: اضافه PaymentCallback.razor, وضعیتهای جدید - ROADMAP: بروزرسانی Payment 97→99%, اضافه فاز ۱۱ به DONE list
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 📜 تاریخچه کارهای انجامشده
|
||||
|
||||
> **همه فعالیتهای پروژه به صورت بولت با توضیح یکخطی و درصد تکمیل**
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۱۰ — DataMigration + EF Staging + PackagePurchaseDialog + UI Fixes | NuGet v0.0.189)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فاز ۱۱ — فیکسهای پرداخت ZarinPal + امنیت Callback URL + اصلاح تومان/ریال)
|
||||
|
||||
---
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
| حوزه | تعداد آیتم | تکمیلشده | درصد کل |
|
||||
|------|-----------|----------|---------|
|
||||
| **BackOffice** | 67 | 67 | **100%** |
|
||||
| **FrontOffice** | 54 | 54 | **100%** |
|
||||
| **CMS Core** | 82 | 82 | **100%** |
|
||||
| **FrontOffice** | 60 | 60 | **100%** |
|
||||
| **CMS Core** | 89 | 89 | **100%** |
|
||||
| **Package-Based System** | 52 | 52 | **100%** |
|
||||
| **Deployment** | 22 | 21 | **95%** |
|
||||
| **Migration** | 21 | 21 | **100%** |
|
||||
| **مجموع** | **298** | **297** | **99%** |
|
||||
| **مجموع** | **311** | **310** | **99.5%** |
|
||||
|
||||
---
|
||||
|
||||
@@ -106,6 +106,12 @@
|
||||
- ✅ دکمه پرداخت شارژ کیفپول جادویی — MagicWallet.razor فعال شد (حذف «بزودی»)
|
||||
- ✅ دکمههای پرداخت مستقیم خرید پکیج — Index.razor هر دو شاخه فعال شدند (حذف «بزودی»)
|
||||
|
||||
### فیکسهای پرداخت و UX (اسفند ۱۴۰۴ — Phase 11)
|
||||
- ✅ **صفحه موفقیت پرداخت** — `TransactionId` بجای `RefId` + موجودی واقعی + `Href="/profile"` (FO:`5ded91a`)
|
||||
- ✅ **حذف دوبار ×۱۰** — FO مستقیم تومان ارسال میکند، CMS/ZarinPal ×۱۰ میکند (FO:`2f9ef15`)
|
||||
- ✅ **حذف CallbackUrl از درخواست** — `Index.razor.cs` و `Checkout.razor.cs` دیگر URL ارسال نمیکنند (FO:`2b1dc47`)
|
||||
- ✅ ۳ کامیت، ۷ فایل تغییر
|
||||
|
||||
### Phase 8a+8c: Checkout + Package Pages (اسفند ۱۴۰۴)
|
||||
- ✅ Checkout wire-up — مهاجرت به `CustomerPurchasePackageAsync` (حذف dead code قدیمی)
|
||||
- ✅ PackageDetail: `GetPackageAsync` → `GetCustomerPackageDetailsAsync` — features/specs از API (نه hardcoded)
|
||||
@@ -123,12 +129,66 @@
|
||||
- ✅ کامیت: `a3681a8` (FO)
|
||||
|
||||
### Phase 10b: ۴ فیکس UI پکیج (اسفند ۱۴۰۴)
|
||||
- ✅ فیکس Toman/Rial — قیمت از سرور به ریال میرسد، `FormattedPrice` حالا `Price / 10` میکند برای نمایش صحیح تومان
|
||||
- ✅ تغییر لیبل «ضریب تخفیف» → «ضریب اعتبار» در دیالوگ خرید + صفحه لیست پکیجها
|
||||
- ✅ دکمه بازگشت در مرحله انتخاب روش پرداخت — `MudIconButton ArrowForward` + `BackToList()` (قبلاً وجود داشت، تأیید شد)
|
||||
- ✅ رندر HTML در توضیحات پکیج — `@((MarkupString)pkg.Description)` بجای متن ساده
|
||||
- ✅ **Toman/Rial**: قیمت از سرور به ریال ← `FormattedPrice` حالا `Price / 10` برای نمایش صحیح تومان
|
||||
- ✅ **لیبل**: «ضریب تخفیف» → «ضریب اعتبار» (دیالوگ + صفحه لیست پکیجها)
|
||||
- ✅ **دکمه بازگشت**: وجود داشت (`ArrowForward` + `BackToList`) — تأیید عملکرد
|
||||
- ✅ **HTML Description**: `@((MarkupString)pkg.Description)` بجای متن ساده
|
||||
- ✅ کامیت: `3c1a8ff` (FO)
|
||||
|
||||
### Phase 11: فیکسهای پرداخت + تومان/ریال + امنیت Callback URL (اسفند ۱۴۰۴)
|
||||
|
||||
#### 11a: اصلاح مدل تومان/ریال (CMS+FO)
|
||||
> **تصحیح مهم:** دیتابیس به **تومان** ذخیره میکند نه ریال. فقط درگاه ZarinPal ریال نیاز دارد (×۱۰).
|
||||
- ✅ `ZarinPalPaymentService.InitiatePaymentAsync` — مبلغ ×۱۰ تبدیل به ریال فقط هنگام ارسال به ZarinPal
|
||||
- ✅ `ZarinPalPaymentService.VerifyPaymentWithAmountAsync` — مبلغ ×۱۰ هنگام verify
|
||||
- ✅ FrontOffice نمایش مستقیم مبلغ تومان (بدون `/10`) — فیکس `MagicWallet.razor`, `ChargeDiscountWallet.razor.cs`
|
||||
- ✅ حذف `Price / 10` اضافی در `ClubMembershipContractDialog.razor`
|
||||
|
||||
#### 11b: فیکس ZarinPal Verify — رفع خطای Code=-1 (CMS:`721661a`)
|
||||
> **باگ:** `VerifyPaymentAsync` با ۲ آرگومان مبلغ صفر (0) ارسال میکرد → ZarinPal Code=-1 برمیگرداند
|
||||
- ✅ `PackageService` — lookup `PaymentTransaction.Amount` + استفاده از overload ۳ آرگومانه
|
||||
- ✅ `TransactionsService` — همان فیکس
|
||||
- ✅ `VerifyDiscountWalletChargeCommandHandler` — مبلغ از `PaymentTransaction` + رفع کپیپیست باگ
|
||||
- ✅ `VerifyPackagePurchaseCommandHandler` — مبلغ از `PaymentTransaction`
|
||||
- ✅ `IPaymentGatewayService` — default impl ۳ آرگومانه با `NotImplementedException`
|
||||
- ✅ `MockPaymentGatewayService` + `DayaPaymentService` — اضافه overload ۳ آرگومانه
|
||||
- ✅ ۷ فایل تغییر
|
||||
|
||||
#### 11c: بهبود صفحه موفقیت پرداخت (FO:`5ded91a`)
|
||||
- ✅ `PaymentCallback.razor` — نمایش `TransactionId` بجای `RefId` برای کد رهگیری
|
||||
- ✅ نمایش موجودی واقعی کیفپول از `WalletService.GetBalancesAsync()` (نه مقدار ثابت)
|
||||
- ✅ دکمه بازگشت: `Href="/profile"` بجای `history.back()` (جلوگیری از حلقه بازگشت به درگاه)
|
||||
|
||||
#### 11d: حذف دوبار ×۱۰ شارژ کیفپول (FO:`2f9ef15`)
|
||||
> **باگ:** FO مبلغ تومان را ×۱۰ تبدیل به ریال میکرد، سپس CMS/ZarinPal دوباره ×۱۰ → مبلغ ۱۰۰ برابر
|
||||
- ✅ `MagicWallet.razor.cs` — حذف تبدیل ×۱۰ (ارسال مستقیم تومان)
|
||||
- ✅ `MagicWallet.razor` — فیکس Max و فیلتر preset مبالغ
|
||||
- ✅ `ChargeDiscountWallet.razor.cs` — حذف تبدیل ×۱۰
|
||||
- ✅ `ClubMembershipContractDialog.razor` — حذف `Price/10` اضافی
|
||||
- ✅ ۴ فایل تغییر
|
||||
|
||||
#### 11e: فیکس مسیر Callback کیفپول (CMS:`ed2b20a`)
|
||||
- ✅ `PaymentCallbackController` — مسیر redirect از `/magic-wallet` به `/profile/magic-wallet`
|
||||
- ✅ ایجاد `appsettings.Development.json` — URLهای محلی (`localhost:32846` و `localhost:5268`)
|
||||
- ✅ تصحیح کامنتهای proto: «ریال» → «تومان»
|
||||
|
||||
#### 11f: امنیت Callback URL — حذف از ورودی کاربر (CMS:`0107308`, FO:`2b1dc47`)
|
||||
> **اصلاح امنیتی:** هیچ callback URL نباید از ورودی کاربر بیاید — همه از `appsettings.json` خوانده شوند
|
||||
- ✅ `PackageService` — خواندن `FrontOfficeBaseUrl` از `IConfiguration` بجای `request.CallbackUrl`
|
||||
- ✅ `TransactionsService` — همان فیکس، خواندن از config
|
||||
- ✅ تأیید: `MagicWallet` و `DiscountWallet` از قبل از `CmsBaseUrl` config میخوانند ✅
|
||||
- ✅ تأیید: `DiscountShop PlaceOrder` از قبل از `CmsBaseUrl` config میخواند ✅
|
||||
- ✅ FO: حذف `CallbackUrl` از `Index.razor.cs` و `Checkout.razor.cs`
|
||||
- ✅ جدول Callback URLها:
|
||||
|
||||
| فلو | Callback URL | منبع |
|
||||
|-----|-------------|------|
|
||||
| خرید پکیج | `FrontOfficeBaseUrl/profile/payment-callback?orderId=X` | config |
|
||||
| کیفپول جادویی | `CmsBaseUrl/api/wallet/verify-magic-charge` | config |
|
||||
| کیفپول اعتباری | `CmsBaseUrl/api/wallet/verify-discount-charge` | config |
|
||||
| فروشگاه اعتباری | `CmsBaseUrl/api/payment/discount-order/callback?orderId=X` | config |
|
||||
| تراکنش عمومی | `FrontOfficeBaseUrl/profile/payment-callback` | config |
|
||||
|
||||
### محتوا و ناوبری
|
||||
- ✅ بلاگ — لیست + جزئیات + pagination
|
||||
- ✅ صفحات سایت — About, Contact, FAQ, Terms, Privacy, Licenses
|
||||
@@ -191,6 +251,14 @@
|
||||
- ✅ اغنای پاسخ UserWalletService — join با جدول Users برای نمایش نام کاربر
|
||||
- ✅ ارتقای Proto NuGet به نسخه 0.0.183
|
||||
|
||||
### فیکسهای پرداخت و امنیت (اسفند ۱۴۰۴ — Phase 11)
|
||||
- ✅ **ZarinPal Verify fix** — رفع باگ amount=0 در VerifyPaymentAsync (Code=-1) — ۳ آرگومانه overload
|
||||
- ✅ **تصحیح مدل تومان/ریال** — DB به تومان ذخیره میکند، فقط ZarinPal ریال (×۱۰) نیاز دارد
|
||||
- ✅ **Callback URL از config** — `PackageService` و `TransactionsService` از `FrontOfficeBaseUrl` config میخوانند (نه از ورودی)
|
||||
- ✅ **فیکس مسیر redirect** — `/magic-wallet` → `/profile/magic-wallet` در PaymentCallbackController
|
||||
- ✅ **appsettings.Development.json** — URLهای محلی برای توسعه (CmsBaseUrl + FrontOfficeBaseUrl)
|
||||
- ✅ کامیتها: `721661a` → `ed2b20a` → `0107308`
|
||||
|
||||
### محتوا
|
||||
- ✅ Blog CRUD — با pagination
|
||||
- ✅ SitePage Settings — JSON typed
|
||||
@@ -431,3 +499,4 @@
|
||||
| اسفند ۱۴۰۴ (هفته ۵) | 📦 فاز 8e: گزارشهای پورسانت per-package (Proto + CMS + BO + FO) | 98% |
|
||||
| اسفند ۱۴۰۴ (هفته ۶) | 📦 فاز ۹: Q24-Q30 (آستانه + SP Worker + History Tables + UI Guidance + Rename + Interceptor + Migration) | 99% |
|
||||
| اسفند ۱۴۰۴ (هفته ۷) | 📦 فاز ۱۰: DataMigration Tool + EF Staging + PackagePurchaseDialog + UI Fixes (Toman/Rial + لیبل + HTML) | 99.5% |
|
||||
| اسفند ۱۴۰۴ (هفته ۸) | 💳 فاز ۱۱: فیکس ZarinPal Verify + اصلاح تومان/ریال + صفحه موفقیت + حذف دوبار ×۱۰ + امنیت Callback URL | 99.5% |
|
||||
|
||||
Reference in New Issue
Block a user