def put(self, request, *args, **kwargs): """ 更新订单状态 :param request: :param args: :param kwargs: 'order_id': 订单ID 'payment_status': 订单支付状态 'payment_mode': 订单支付方式 :return: Orders instance """ form = OrdersUpdateForm(request.data) if not form.is_valid(): return Response({'Detail': form.errors}, status=status.HTTP_400_BAD_REQUEST) cld = form.cleaned_data obj = Orders.get_object(**{'orders_id': cld['orders_id']}) if isinstance(obj, Exception): return Response({'Detail': obj.args}, status=status.HTTP_400_BAD_REQUEST) serializer = OrdersSerializer(obj) try: serializer.update_orders_status(obj, cld) except Exception as e: return Response({'Detail': e.args}, status=status.HTTP_400_BAD_REQUEST) payment_mode = cld['payment_mode'] if cld.get('payment_status'): # 更新支付状态为现金支付 orders_detail = self.get_orders_detail(obj) res_serializer = OrdersDetailSerializer(data=orders_detail) if not res_serializer.is_valid(): return Response({'Detail': res_serializer.errors}, status=status.HTTP_400_BAD_REQUEST) return Response(res_serializer.data, status=status.HTTP_206_PARTIAL_CONTENT) else: if payment_mode == 'cash': # 现金支付 orders_detail = self.get_orders_detail(obj) res_serializer = OrdersDetailSerializer(data=orders_detail) if not res_serializer.is_valid(): return Response({'Detail': res_serializer.errors}, status=status.HTTP_400_BAD_REQUEST) return Response(res_serializer.data, status=status.HTTP_206_PARTIAL_CONTENT) elif payment_mode == 'scan': # 扫码支付 _wxPay = WXPay(obj) wx_result = _wxPay.native() if isinstance(wx_result, Exception): return Response(wx_result.args, status=status.HTTP_400_BAD_REQUEST) _alipay = AliPay(obj) ali_result = _alipay.pre_create() if isinstance(ali_result, Exception): return Response(ali_result.args, status=status.HTTP_400_BAD_REQUEST) return Response( { 'ali_code_url': ali_result, 'wx_code_url': wx_result }, status=status.HTTP_206_PARTIAL_CONTENT) elif payment_mode == 'yinshi': # 吟食支付 data = self.make_yinshi_pay_initial_data(request, obj) instance = self.save_yinshi_pay_random_code(data) if isinstance(instance, Exception): return Response({'Detail': instance.args}, status=status.HTTP_400_BAD_REQUEST) return_data = self.get_yinshi_pay_response(instance) return Response(return_data, status=status.HTTP_206_PARTIAL_CONTENT) else: return Response(status=status.HTTP_204_NO_CONTENT)