Exemplo n.º 1
0
    def post(self, request, *args, **kwargs):
        # 1)获取前台信息:商品、价格、支付方式
        request_data = request.data
        subject = request_data.get('subject')
        total_amount = request_data.get('total_amount')
        pay_type = request_data.get('pay_type')
        if not (subject and total_amount and pay_type):
            return APIResponse(2, '数据有误')

        # 2)生成订单(订单号,订单表的订单记录)
        out_trade_no = str(time.time())
        user = request.user  # 当前登录用户
        try:
            models.Order.objects.create(subject=subject,
                                        total_amount=total_amount,
                                        pay_type=pay_type,
                                        out_trade_no=out_trade_no,
                                        user=user)
        except:
            return APIResponse(1, '订单生成失败')
        # 3)生成支付链接,并返回
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=out_trade_no,
            total_amount=total_amount,
            subject=subject,
            return_url=settings.RETURN_URL,
            notify_url=settings.NOTIFY_URL)
        order_url = pay_url + order_string
        return APIResponse(order_url=order_url)
Exemplo n.º 2
0
    def validate(self, attrs):
        club_id = attrs['club'].id

        car = models.Club.objects.filter(id=club_id).first()

        price = car.detail.spend

        print(price)
        # 生成订单号
        order_on = self._get_order_no()

        # 生成订单链接
        order_params = alipay.api_alipay_trade_page_pay(out_trade_no=order_on,
                                                        total_amount=float(price),
                                                        subject="加入俱乐部",
                                                        return_url=settings.RETURN_URL2,  # 同步回调的前台接口
                                                        notify_url=settings.NOTIFY_URL  # 异步回调的后台接口
                                                        )
        pay_url = alipay_gateway + order_params

        # 将支付链接保存在serializer对象中
        self.pay_url = pay_url

        # 添加额外的订单号字段
        attrs['out_trade_no'] = order_on
        attrs['payed'] = price

        # 视图类给序列化类传参
        attrs['user'] = self.context.get('request').user
        print("1111")
        # 代表校验通过
        return attrs
Exemplo n.º 3
0
    def validate(self, attrs):
        goods_pks = attrs.pop('goods_pks')
        total_amount = attrs.get('total_amount')
        goods_lt_pks = goods_pks.split(',')
        try:
            goods_obj = [Course.objects.get(pk=pk) for pk in goods_lt_pks]
        except:
            raise serializers.ValidationError({'pk': '课程主键有误'})

        count_price = 0
        for goods in goods_obj:
            count_price += goods.price

        if count_price != total_amount:
            raise serializers.ValidationError({'total_amount': '价格异常'})

        order_on = self._get_order_no()
        subject = attrs.get('subject')
        order_params = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_on,
            total_amount=float(total_amount),
            subject=subject,
            return_url=settings.RETURN_URL,  # 同步回调的前台接口
            notify_url=settings.NOTIFY_URL  # 异步回调的后台接口
        )

        pay_url = alipay_gateway + order_params

        self.pay_url = pay_url

        attrs['out_trade_no'] = order_on
        request = self.context.get('request')
        attrs['user'] = request.user
        attrs['courses'] = goods_obj
        return attrs
Exemplo n.º 4
0
    def validate(self, attrs):
        car_id = attrs['car'].id

        car = models.Car.objects.filter(id=car_id).first()

        price = car.price

        print(price)
        # 生成订单号
        order_on = self._get_order_no()

        # 生成订单链接
        order_params = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_on,
            total_amount=float(price * 10000),
            subject="购车",
            return_url=settings.RETURN_URL,  # 同步回调的前台接口
            notify_url=settings.NOTIFY_URL  # 异步回调的后台接口
        )
        pay_url = alipay_gateway + order_params

        # 将支付链接保存在serializer对象中
        self.pay_url = pay_url

        # 添加额外的订单号字段
        attrs['out_trade_no'] = order_on

        # 视图类给序列化类传参
        print(self.context.get('request').user)
        attrs['user'] = self.context.get('request').user
        # 代表校验通过
        return attrs
Exemplo n.º 5
0
 def _get_pay_url(self, out_trade_no, total_amount, subject):
     from libs.iPay import alipay, alipay_gateway
     from django.conf import settings
     order_string = alipay.api_alipay_trade_page_pay(
         out_trade_no=out_trade_no,
         total_amount=str(total_amount),
         subject=subject,
         return_url=settings.RETURN_URL,  # 同步回调:前台回调接口
         notify_url=settings.NOTIFY_URL  # 异步回调:后台回调接口
     )
     return alipay_gateway + order_string
Exemplo n.º 6
0
    def validate(self, attrs):
        goods_pks = attrs.pop('goods_pks')
        goods_pks = [pk for pk in goods_pks.split(',')]
        goods_objs = []
        for pk in goods_pks:
            try:
                obj = Course.objects.get(pk=pk)
                goods_objs.append(obj)
            except:
                raise serializers.ValidationError({'pk': '课程主键有误'})

        total_price = 0
        for good in goods_objs:
            total_price += good.price

        # 商品总价
        total_amount = attrs.get('total_amount')
        if total_price != total_amount:
            raise serializers.ValidationError({'total_amount': '价格被恶意篡改'})

        # 生成订单号
        order_on = self._get_order_no()
        # 订单名
        subject = attrs.get('subject')

        # 生成订单链接
        order_params = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_on,
            total_amount=float(total_amount),
            subject=subject,
            return_url=settings.RETURN_URL,  # 同步回调的前台接口
            notify_url=settings.NOTIFY_URL  # 异步回调的后台接口
        )
        pay_url = alipay_gateway + order_params

        # 将支付链接保存在serializer对象中
        self.pay_url = pay_url

        # 添加额外的入口字段
        attrs['out_trade_no'] = order_on
        # 视图类给序列化类传参
        attrs['user'] = self.context.get('request').user

        # 将所有的商品对象存放在校验数据中,辅助订单详情表商品信息的入库
        attrs['courses'] = goods_objs

        # 代表校验通过
        return attrs
Exemplo n.º 7
0
 def validate(self, attrs):
     num=attrs.pop('num')
     order_on = self._get_order_no()
     subject = attrs.get('method')
     print(num,subject)
     order_params = alipay.api_alipay_trade_page_pay(out_trade_no=order_on,
                                                     total_amount=float(num),
                                                     subject=subject,
                                                     return_url=settings.RETURN_URL,  # 同步回调的前台接口
                                                     notify_url=settings.NOTIFY_URL  # 异步回调的后台接口
                                                     )
     pay_url = alipay_gateway + order_params
     self.pay_url = pay_url
     attrs['trade_no'] = order_on
     attrs['num'] = num
     return attrs
Exemplo n.º 8
0
import os, django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lufeiapi.settings.dev")
django.setup()

from libs.iPay import alipay, alipay_gateway

import time

order_params = alipay.api_alipay_trade_page_pay(
    out_trade_no='%s' % time.time(),
    total_amount=4200000,
    subject='波音747定金',
    return_url="http://localhost:8080",  # 同步回调的前台接口
    notify_url="https://example.com/notify"  # 异步回调的后台接口
)
print(alipay_gateway + order_params)