Bazaar: subscriptions (10343/10344), dynamic price (discount codes on Bazaar), auto-renewal sync
- Purchase with paymentMethod=bazaar now works for subscription plans with a bazaar_sku (not only packs);
response carries bazaarProductType. Migration subscription.0014 puts 10343/10344 on the 90/180-day plans.
- Verify asks Bazaar for the right product type (from the order) and stores validUntil (payment.0012).
- POST /api/payment/bazaar/orders/{id}/start: SKU, type, and an HS256 dynamic-price JWT when a discount
code lowered the price (BAZAAR_DYNAMIC_PRICE_KEY); discount on Bazaar orders allowed only with that key
and only before start.
- Auto-renewal: sync_bazaar_renewals re-asks Bazaar when the paid period is near its end (status page and
the paywall via has_subscription_access); each new period becomes a paid order.
- Default BAZAAR_PACKAGE_NAME = com.tadrisino.math.app; health shows bazaarDynamicPrice.
979 tests green. No real Bazaar purchase or renewal tested.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -44,6 +44,12 @@ class Order(models.Model):
|
||||
# بازار میگیره و برای verify به بکاند میفرسته.
|
||||
bazaar_product_sku = models.CharField(max_length=100, blank=True)
|
||||
bazaar_purchase_token = models.CharField(max_length=300, blank=True)
|
||||
# مبلغی (ریال) که در JWTِ «تخفیف پویا» برای همین سفارش امضا شد؛ بعد از آن کدِ تخفیف روی سفارش
|
||||
# نمینشیند (همان قاعدهی gateway_authority). null یعنی بازار قیمتِ پیشخان را گرفته/میگیرد.
|
||||
bazaar_price_rial = models.PositiveIntegerField(null=True, blank=True)
|
||||
# فقط اشتراکِ بازار: پایانِ دورهای که همین سفارش پولش را داده، از پاسخِ بازار. تمدیدِ خودکار با
|
||||
# جلو رفتنِ این عدد در بازار دیده میشود (payment.services.sync_bazaar_renewals).
|
||||
bazaar_valid_until = models.DateTimeField(null=True, blank=True)
|
||||
# فقط وقتی provider == 'gateway' (زرینپال) پر میشه: Authorityِ برگشتی از
|
||||
# PaymentRequest، وقتی کاربر واقعاً لینکِ پرداخت رو باز کنه (نه موقعِ
|
||||
# ساختِ سفارش؛ نگاه کنید به PaymentRedirectView). همون چیزیه که زرینپال
|
||||
|
||||
Reference in New Issue
Block a user