Initial commit - clean project structure
This commit is contained in:
67
payment/serializers.py
Normal file
67
payment/serializers.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class CreateOrderRequestSerializer(serializers.Serializer):
|
||||
# این فراخوانی سرور-به-سرور از اپ Subscriptionه، نه از کلاینت؛ به همین
|
||||
# دلیل userId اینجا مستقیماً در بدنه ارسال میشه (نه از توکن استخراج).
|
||||
userId = serializers.CharField()
|
||||
amount = serializers.IntegerField()
|
||||
currency = serializers.CharField(required=False, default='IRT')
|
||||
subscriptionId = serializers.CharField(required=False, allow_null=True, allow_blank=True)
|
||||
# provider='bazaar' وقتی کاربر از همون ابتدا پرداخت درونبرنامهای بازار
|
||||
# رو انتخاب کرده؛ در این حالت amount باید دقیقاً برابر قیمتِ محصولِ
|
||||
# تعریفشده در پنل بازار برای همون bazaarProductSku باشه (بازار خودش
|
||||
# قیمت رو کنترل میکنه، نه ما).
|
||||
provider = serializers.ChoiceField(choices=['gateway', 'bazaar'], required=False, default='gateway')
|
||||
bazaarProductSku = serializers.CharField(required=False, allow_blank=True)
|
||||
|
||||
|
||||
class BazaarVerifyRequestSerializer(serializers.Serializer):
|
||||
orderId = serializers.CharField()
|
||||
productSku = serializers.CharField(required=False, allow_blank=True)
|
||||
purchaseToken = serializers.CharField()
|
||||
|
||||
|
||||
class BazaarVerifyResponseSerializer(serializers.Serializer):
|
||||
orderId = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
valid = serializers.BooleanField()
|
||||
|
||||
|
||||
class CreateOrderResponseSerializer(serializers.Serializer):
|
||||
orderId = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
# provider='bazaar' یعنی paymentUrl نداریم (کلاینت با SDK بازار خودش
|
||||
# خرید میکنه، نه با ریدایرکت به یک URL).
|
||||
paymentUrl = serializers.CharField(allow_null=True)
|
||||
provider = serializers.CharField()
|
||||
|
||||
|
||||
class WebhookRequestSerializer(serializers.Serializer):
|
||||
# کالبک از سمت درگاه پرداخت میاد، نه از اپ
|
||||
orderId = serializers.CharField()
|
||||
gateway = serializers.CharField(required=False, default='zarinpal')
|
||||
gatewayRefId = serializers.CharField(required=False, allow_blank=True)
|
||||
# ⚠️ اصلاح امنیتی: قبلاً status یک CharField آزاد بود و هر مقداری
|
||||
# (حتی مقادیر پشتیبانینشده/اشتباه) رو مستقیم روی Order ذخیره میکرد.
|
||||
# حالا فقط دو وضعیت نهاییِ معتبرِ کالبک درگاه پذیرفته میشه؛ 'pending'
|
||||
# وضعیت اولیهی داخلیه و نباید از بیرون توسط webhook قابلتنظیم باشه.
|
||||
status = serializers.ChoiceField(choices=['paid', 'failed'])
|
||||
|
||||
|
||||
class WebhookResponseSerializer(serializers.Serializer):
|
||||
received = serializers.BooleanField()
|
||||
|
||||
|
||||
class TransactionSerializer(serializers.Serializer):
|
||||
id = serializers.CharField()
|
||||
gateway = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
paidAt = serializers.DateTimeField(allow_null=True)
|
||||
|
||||
|
||||
class OrderDetailResponseSerializer(serializers.Serializer):
|
||||
orderId = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
amount = serializers.IntegerField()
|
||||
transactions = TransactionSerializer(many=True)
|
||||
Reference in New Issue
Block a user