Payment providers as classes (Strategy + factory); 10342 = monthly; health logs a failed Bazaar check
- payment/providers.py: ZarinpalProvider / BazaarProvider with one interface (check_plan, sku_for, payment_url, purchase_extras, discount_blocker, reconcile_user); provider_for / provider_for_method pick one; unknown fails. create_order, purchase view, discount redeem and reconcile_user_orders use it instead of scattered ifs. - subscription.0015: Bazaar SKU 10342 on the one-month plan (owner: "probably the monthly one"). - config/health: the Bazaar check no longer swallows its exception without a log. 982 tests green. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -281,14 +281,18 @@ callbackِ زرینپال، برگشت از پرداخت، `BAZAAR_REDIRECT_U
|
||||
## فروش در کافهبازار (اشتراک و بسته)
|
||||
|
||||
اپِ اندروید (پوستهی WebViewِ همین سایت، `android/` در ریپوی فرانت) با پرداختِ درونبرنامهایِ بازار میفروشد. در
|
||||
برگهی پرداخت دو کاشی همیشه کنارِ هماند: «کارتِ بانکی» (زرینپال) و «کافهبازار». در مرورگر، یا وقتی پلن SKU ندارد،
|
||||
کاشیِ بازار غیرفعال است و دلیلش را میگوید.
|
||||
برگهی پرداخت دو کاشی همیشه کنارِ هماند و کاربر هر کدام را بخواهد میزند: «کارتِ بانکی» (زرینپال، پیشفرض) و
|
||||
«کافهبازار». در مرورگر، یا وقتی پلن SKU ندارد (الان همهی بستهها)، کاشیِ بازار غیرفعال است و دلیلش را میگوید. داخلِ اپ
|
||||
زیرِ «کافهبازار» قیمتی میآید که خودِ بازار برای آن SKU دارد (Poolakey روی گوشی؛ API سرور قیمت نمیدهد).
|
||||
|
||||
تفاوتِ روشها در یک جاست: `payment/providers.py` (هر روش یک کلاس، `provider_for`/`provider_for_method` انتخابش
|
||||
میکنند). روشِ تازه = یک زیرکلاس و یک خط در `PROVIDERS`.
|
||||
|
||||
| چه | کجا | الان |
|
||||
|---|---|---|
|
||||
| محصول در پیشخانِ بازار | اشتراک = محصولِ «اشتراکی» (بازار خودکار تمدید میکند)، بسته = «مصرفشدنی» | سهماهه `10343`، ششماهه `10344`؛ `10342` هم هست و معلوم نیست چیست |
|
||||
| SKU روی پلن | `/admin/subscription/plan/` ← «Bazaar sku» (سرور SKU را فقط از اینجا میگیرد) | دو اشتراکِ بالا (migrationِ `subscription.0014`) |
|
||||
| قیمت | قیمتِ پیشخان باید با قیمتِ ادمین یکی باشد | **سنجیده نشده** |
|
||||
| محصول در پیشخانِ بازار | اشتراک = محصولِ «اشتراکی» (بازار خودکار تمدید میکند)، بسته = «مصرفشدنی» | یکماهه `10342` (به گفتهی مالک)، سهماهه `10343`، ششماهه `10344`؛ بستهها هنوز تعریف نشدهاند |
|
||||
| SKU روی پلن | `/admin/subscription/plan/` ← «Bazaar sku» (سرور SKU را فقط از اینجا میگیرد) | سه اشتراکِ بالا (`subscription.0014`، `0015`)؛ بستهای که در پیشخان تعریف شد، SKUاش اینجا نوشته شود |
|
||||
| قیمت | بازار قیمتِ پیشخان را میگیرد؛ ادمین باید با آن یکی باشد | داخلِ اپ قیمتِ بازار روی کاشی دیده میشود؛ برابریاش **سنجیده نشده** |
|
||||
| کلیدِ «تخفیف پویا» | `BAZAAR_DYNAMIC_PRICE_KEY` در `.env` سرور | با آن کدِ تخفیف روی خریدِ بازار هم کار میکند |
|
||||
| کلیدِ RSAِ عمومی | `android/app/build.gradle.kts` | گذاشته شد |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user