- 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>
23 lines
949 B
Python
23 lines
949 B
Python
from django.urls import path
|
|
|
|
from .views import (
|
|
BazaarStartPurchaseView,
|
|
BazaarVerifyPurchaseView,
|
|
CreateOrderView,
|
|
InvoiceListView,
|
|
OrderDetailView,
|
|
PaymentRedirectView,
|
|
ZarinpalCallbackView,
|
|
)
|
|
|
|
urlpatterns = [
|
|
path('payment/orders', CreateOrderView.as_view(), name='payment-create-order'),
|
|
path('payment/zarinpal/callback', ZarinpalCallbackView.as_view(), name='payment-zarinpal-callback'),
|
|
path('payment/bazaar/verify', BazaarVerifyPurchaseView.as_view(), name='payment-bazaar-verify'),
|
|
path('payment/bazaar/orders/<int:order_id>/start', BazaarStartPurchaseView.as_view(),
|
|
name='payment-bazaar-start'),
|
|
path('payment/invoices', InvoiceListView.as_view(), name='payment-invoices'),
|
|
path('payment/orders/<int:order_id>', OrderDetailView.as_view(), name='payment-order-detail'),
|
|
path('payment/orders/<int:order_id>/pay', PaymentRedirectView.as_view(), name='payment-order-pay'),
|
|
]
|