订单结算

Posted hzlnice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了订单结算相关的知识,希望对你有一定的参考价值。

订单结算页面所需的数据从购物车中勾选而来。

1. 后端接口设计

请求方式 : GET /orders/settlement/

请求参数: 无

返回数据: JSON

参数类型是否必须说明
freight decimal 运费
skus sku[] 结算的商品列表
id int 商品id
name str 商品名称
default_image_url str 商品默认图片
price decimal 商品单价
count int 商品数量
{
    "freight":"10.00",
    "skus":[
        {
            "id":10,
            "name":"华为 HUAWEI P10 Plus 6GB+128GB 钻雕金 移动联通电信4G手机 双卡双待",
             "default_image_url":"http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRchWAMc8rAARfIK95am88158618",
            "price":"3788.00",
            "count":1
        },
        {
            "id":16,
            "name":"华为 HUAWEI P10 Plus 6GB+128GB 曜石黑 移动联通电信4G手机 双卡双待",
            "default_image_url":"http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRdPeAXNDMAAYJrpessGQ9777651",
            "price":"3788.00",
            "count":1
        }
    ]
}

2. 后端实现

在orders/serialziers.py中创建序列化器

class CartSKUSerializer(serializers.ModelSerializer):
    """
    购物车商品数据序列化器
    """
    count = serializers.IntegerField(label=‘数量‘)

    class Meta:
        model = SKU
        fields = (‘id‘, ‘name‘, ‘default_image_url‘, ‘price‘, ‘count‘)


class OrderSettlementSerializer(serializers.Serializer):
    """
    订单结算数据序列化器
    """
    freight = serializers.DecimalField(label=‘运费‘, max_digits=10, decimal_places=2)
    skus = CartSKUSerializer(many=True)

在orders/views.py中编写视图

class OrderSettlementView(APIView):
    """
    订单结算
    """
    permission_classes = [IsAuthenticated]

    def get(self, request):
        """
        获取
        """
        user = request.user

        # 从购物车中获取用户勾选要结算的商品信息
        redis_conn = get_redis_connection(‘cart‘)
        redis_cart = redis_conn.hgetall(‘cart_%s‘ % user.id)
        cart_selected = redis_conn.smembers(‘cart_selected_%s‘ % user.id)

        cart = {}
        for sku_id in cart_selected:
            cart[int(sku_id)] = int(redis_cart[sku_id])

        # 查询商品信息
        skus = SKU.objects.filter(id__in=cart.keys())
        for sku in skus:
            sku.count = cart[sku.id]

        # 运费
        freight = Decimal(‘10.00‘)

        serializer = OrderSettlementSerializer({‘freight‘: freight, ‘skus‘: skus})
        return Response(serializer.data)

以上是关于订单结算的主要内容,如果未能解决你的问题,请参考以下文章

Magento2 - 使用Paypal结算协议创建自定义订单(“强制参数缺少referenceId错误”)

订单结算

Android应用程序结算:订单取消后,购买状态保持“已购买”状态

对订单结算理解

行业沙龙第八期丨订单结算在线协同,助力企业生意增长

行业沙龙第八期丨订单结算在线协同,助力企业生意增长