update callback payment reponse
This commit is contained in:
@@ -37,4 +37,11 @@ class SetAddressPermissions(BasePermission):
|
|||||||
self.message = "این ادرس متعلق به شما نیست."
|
self.message = "این ادرس متعلق به شما نیست."
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
class PaymentCallBackPermissions(BasePermission):
|
||||||
|
|
||||||
|
def has_object_permission(self, request, view, obj):
|
||||||
|
if obj.order.user != request.user:
|
||||||
|
self.message = "این پرداخت متعلق به شما نیست."
|
||||||
|
return False
|
||||||
|
return True
|
||||||
+50
-4
@@ -268,22 +268,68 @@ def callback_view(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
from rest_framework import serializers
|
||||||
|
from azbankgateways.models import Bank
|
||||||
|
from azbankgateways.models.enum import PaymentStatus
|
||||||
|
from .permissons import PaymentCallBackPermissions
|
||||||
|
|
||||||
|
class BankCallbackSerializer(serializers.ModelSerializer):
|
||||||
|
status_detail = serializers.SerializerMethodField()
|
||||||
|
bank_type = serializers.SerializerMethodField()
|
||||||
|
amount = serializers.SerializerMethodField()
|
||||||
|
status = serializers.SerializerMethodField()
|
||||||
|
class Meta:
|
||||||
|
model = Bank
|
||||||
|
fields = ['status', 'bank_type', 'tracking_code', 'amount', 'created_at', 'response_result', 'reference_number', 'status_detail']
|
||||||
|
def get_status_detail(self, obj):
|
||||||
|
return obj.get_status_display()
|
||||||
|
def get_bank_type(self, obj):
|
||||||
|
return obj.get_bank_type_display()
|
||||||
|
def get_amount(self, obj):
|
||||||
|
return f'{int(obj.amount):,.0f} تومان'
|
||||||
|
def get_status(self, obj):
|
||||||
|
if obj.status in {
|
||||||
|
PaymentStatus.WAITING,
|
||||||
|
PaymentStatus.REDIRECT_TO_BANK,
|
||||||
|
PaymentStatus.RETURN_FROM_BANK,
|
||||||
|
}:
|
||||||
|
return "waiting"
|
||||||
|
elif obj.status in {
|
||||||
|
PaymentStatus.CANCEL_BY_USER,
|
||||||
|
PaymentStatus.EXPIRE_GATEWAY_TOKEN,
|
||||||
|
PaymentStatus.EXPIRE_VERIFY_PAYMENT,
|
||||||
|
PaymentStatus.ERROR,
|
||||||
|
}:
|
||||||
|
return "canceled"
|
||||||
|
elif obj.status == PaymentStatus.COMPLETE:
|
||||||
|
return "succeeded"
|
||||||
|
return "unknown"
|
||||||
|
|
||||||
|
|
||||||
class CallbackView(APIView):
|
class CallbackView(APIView):
|
||||||
|
serializer_class = BankCallbackSerializer
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
def get(self, request, tracking_code):
|
def get(self, request, tracking_code):
|
||||||
if not tracking_code:
|
if not tracking_code:
|
||||||
return Response({'detail': 'کد تریسکد درست نمیباشد.'})
|
return Response({'detail': 'تریسکد خالی است.'}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
bank_record = bank_models.Bank.objects.get(tracking_code=tracking_code)
|
bank_record = bank_models.Bank.objects.get(tracking_code=tracking_code)
|
||||||
|
|
||||||
|
permission = PaymentCallBackPermissions()
|
||||||
|
if not permission.has_object_permission(request, self, bank_record):
|
||||||
|
return Response({"detail": permission.message}, status=status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
bank_record_ser = self.serializer_class(instance=bank_record, context={'request': request})
|
||||||
|
|
||||||
except bank_models.Bank.DoesNotExist:
|
except bank_models.Bank.DoesNotExist:
|
||||||
return Response({'detail': 'کد تریسکد معتبر نمیباشد.'}, status=status.HTTP_400_BAD_REQUEST)
|
return Response({'detail': 'کد تریسکد معتبر نمیباشد.'}, status=status.HTTP_404_NOT_FOUND)
|
||||||
|
|
||||||
if bank_record.is_success:
|
if bank_record.is_success:
|
||||||
return Response({"detail" : "پرداخت با موفقیت انجام شد."}, status=status.HTTP_200_OK)
|
return Response({"detail" : "پرداخت با موفقیت انجام شد.", "bank_result": bank_record_ser.data}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
{"detail": "پرداخت با شکست مواجه شده است. اگر پول کم شده است ظرف مدت ۴۸ ساعت پول به حساب شما بازخواهد گشت."}, status=status.HTTP_404_NOT_FOUND
|
{"detail": "پرداخت با شکست مواجه شده است. اگر پول کم شده است ظرف مدت ۴۸ ساعت پول به حساب شما بازخواهد گشت.", "bank_result": bank_record_ser.data}, status=status.HTTP_200_OK
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user