示例#1
0
 def post(self, request, *args, **kwargs):
     client = Iamporter(imp_key=imp_key, imp_secret=imp_secret)
     imp_uid = request.data['imp_uid']
     customer_id = request.user.pk
     payment_info = client.find_payment(imp_uid=imp_uid)
     queryset = Cart.objects.filter(customer=customer_id).aggregate(
         total_amount=Sum(
             Case(When(product__is_discount=True,
                       then=F('product__discount_price') * F('quantity')),
                  default=F('product__price') * F('quantity'))))
     instance = {'status': 'failed'}
     if payment_info['amount'] == queryset['total_amount']:
         with transaction.atomic():
             ordered = Order.objects.bulk_create(
                 Cart.objects.filter(customer=customer_id))
             Cart.objects.filter(customer=customer_id).delete()
             for i in ordered:
                 product = Product.objects.get(name=i.product)
                 product.stock -= i.quantity
                 product.save()
             instance = {'status': 'success'}
     else:
         client.cancel_payment(imp_uid=imp_uid, reason="amount mismatch")
     serializer = self.get_serializer(instance)
     return Response(serializer.data)