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)
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
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
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
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
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
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
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)