47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
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)
|
||
|
||
|
||
class CreateOrderResponseSerializer(serializers.Serializer):
|
||
orderId = serializers.CharField()
|
||
status = serializers.CharField()
|
||
paymentUrl = 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)
|