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 ZarinpalCallbackResponseSerializer(serializers.Serializer): """فقط وقتی settings.ZARINPAL_REDIRECT_URL خالی باشه برگردونده می‌شه؛ وگرنه کاربر به همون URL ریدایرکت می‌شه، نه به این JSON.""" orderId = serializers.CharField() status = serializers.CharField() 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)