前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day101-支付接口&支付数据结构

day101-支付接口&支付数据结构

原创
作者头像
少年包青菜
修改2020-03-30 17:33:43
9770
修改2020-03-30 17:33:43
举报
文章被收录于专栏:Python 学习Python 学习

1.支付接口

代码语言:javascript
复制
class PaymentView(APIView):
    authentication_classes = [authentication.MyAuthentication, ]

    # 后台获取优惠券集合
    @staticmethod
    def get_coupons_queryset(request, course_id=None):
        coupons_query_set = models.CouponRecord.objects.filter(
            user=request.user,
            status=0,
            coupon__content_type_id=ContentType.objects.filter(
                # 类表名._meta
                model=models.Course._meta.model_name
            ).first().id,
            coupon__valid_begin_date__lte=now(),
            coupon__valid_end_date__gte=now(),
            coupon__object_id=course_id,  # 课程id
        )
        return coupons_query_set

    # 结算只用优惠券之后的价格
    @staticmethod
    def cal_course_coupon_price(price, coupon_id):
        coupon_obj = models.Coupon.objects.filter(id=coupon_id).first()
        coupon_type = coupon_obj.coupon_type
        # 等值货币
        money_equivalent_value = coupon_obj.money_equivalent_value
        # 折扣百分比
        off_percent = coupon_obj.off_percent
        # 最低消费
        minimum_consume = coupon_obj.minimum_consume
        if coupon_type == 0:  # 立减券
            price -= money_equivalent_value
            if price < 0:
                price = 0
        elif coupon_type == 1:  # 满减券
            if price < minimum_consume:
                raise MyException(1070, '不满足最低消费')
            price -= money_equivalent_value
        else:  # 折扣券
            price *= off_percent/100
        return price

    @staticmethod
    def post(request):
        my_res = BaseResponse()
        total_price = 0
        try:
            """1.对course_info列表每一项进行校验"""
            # 是否为列表类型
            course_info_list = request.data.get('course_info', '')
            if type(course_info_list) != list:
                raise MyException(501, '参数类型错误')

            # 获取数据
            for dic in course_info_list:
                if type(dic) != dict:
                    raise MyException(502, '参数类型错误')

                # get 出来的全部都是 str
                course_id = dic.get('course_id', ' ').strip()
                price_policy_id = dic.get('price_policy_id', ' ').strip()
                course_coupon_id = dic.get('coupon_record_id', ' ').strip()

                # 优惠券可以不填
                if not course_id or not price_policy_id or not course_coupon_id:
                    raise MyException(503, '缺少参数值')

                """2.判断课程id是否合法"""
                if not course_id.isdigit() or not price_policy_id.isdigit() or not course_coupon_id.isdigit():
                    raise MyException(504, '课程参数类型非法')

                """3.判断价格策略id是否合法"""
                course_obj = models.Course.objects.filter(id=course_id).first()
                if not course_obj:
                    raise MyException(5041, '课程类型不合法')
                if price_policy_id not in \
                        [str(obj.id) for obj in course_obj.price_policy.all()]:
                    raise MyException(505, '价格策略不存在')

                """4.判断课程优惠券id是否合法"""
                course_coupons_query_set = PaymentView.get_coupons_queryset(request, course_id=course_id)
                if course_coupon_id not in [str(obj.id) for obj in course_coupons_query_set]:
                    raise MyException(506, '课程户优惠券不合法')

                """4.1 计算课程优惠券之后的价格"""
                price = models.PricePolicy.objects.filter(id=price_policy_id).first().price
                total_price += PaymentView.cal_course_coupon_price(price, course_coupon_id)

            """5.判断通用优惠券是否合法"""
            global_coupon_id = request.data.get('global_coupon_id', '')
            global_coupons_query_set = PaymentView.get_coupons_queryset(request)
            if global_coupon_id not in [str(obj.id) for obj in global_coupons_query_set]:
                raise MyException(507, '通用优惠券不合法')

            """5.1计算通用优惠券之后的价格"""
            price = models.PricePolicy.objects.filter(id=global_coupon_id).first().price
            total_price += price

            my_res.code = 1000
            my_res.msg = 'SUCCESS'
            my_res.data = '您实际需要支付的费用是{}'.format(total_price)

        except MyException as e:
            my_res.code = e.code
            my_res.msg = e.msg

        except Exception as e:
            my_res.code = 500
            my_res.error = '网络异常!'
            my_res.ex = str(e)
        return Response(my_res.dict)

2.支付数据结构

代码语言:javascript
复制
# 支付数据结构
payment = {
    "courses_info": [
        {
            'course_id': "XXX",
            'price_policy_id': "XXX",
            'coupon_record_id': "XXX"
        },
        {
            'course_id': "XXX",
            'price_policy_id': "XXX",
            'coupon_record_id': "XXX"
        }
        # ...
        # ...
    ],
    'global_coupon_id': "XXX",
    'beli': "XXX",
    'pay_money': "XXX",
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.支付接口
  • 2.支付数据结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档