Пример #1
0
    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)