def get(self, request, order_id): user = request.user try: order = OrderInfo.objects.get( order_id=order_id, user=user, pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"], status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"], ) except OrderInfo.DoesNotExist: return Response({'meaaage': '订单错误'}, status=status.HTTP_400_BAD_REQUEST) alipay = Alipay(appid="2016100100641406", app_notify_url=None, app_private_key_path=os.path.join( os.path.dirname(os.path.abspath(__file__)), 'app_private_key.pem'), alipay_public_key_path=os.path.join( os.path.dirname(os.path.abspath(__file__)), 'alipay_public_key.pem'), sign_type="RSA2", debug=True) sum_price = order.total_amount order_string = alipay.api_alipay_trade_page_pay( out_trade_no=order_id, total_amount=str(sum_price), subject='美多商城', return_url='http://www.meiduo.site:8080/pay_success.html', notify_url=None # this is optional ) alipay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string return Response({'alipay_url': alipay_url})
def post(self, request): '''订单支付''' # 用户是否登录 user = request.user if not user.is_authenticated(): return JsonResponse({'res':0,'errmsg':'用户未登陆'}) # 接收参数 order_id = request.POST.get('order_id') # 校验参数 if not order_id: return JsonResponse({'res':1,'errmsg':'无效的订单id'}) try: #查出的订单必须要符合id相同,用户相同,支付方式为3,订单状态为:未支付 order = OrderInfo.objects.get(order_id = order_id, user = user, pay_method = 3, order_status = 1) except OrderInfo.DoesNotExist: return JsonResponse({'res':1,'errmsg':订单错误}) # 业务处理:使用python sdk调用支付宝的支付接口 # 初始化 alipay = Alipay( appid = "2016093000628658", #自己沙箱中的APPID app_notify_url = None, #默认的回调url app_private_key_path = os.path.join(settings.BASE_DIR,'apps/order/app_private_key.pem'), alipay_public_key_path = os.path.join(settings.BASE_DIR,'apps/order/alipay_public_key.pem'), sign_type = "RSA2", #RSA或者RSA2 debug = "True" #沙箱模式就是调试模式 ) # 调用支付接口 # 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string total_pay = order.total_price + order.transit_price #Decimal类型,无法序列化 order_string = alipay.api_alipay_trade_page_pay( out_trade_no = order_id,#订单号 total_amount = str(total_pay), #原本是Decimal数据类型,无法序列化Json形式,只能先转化为str subject = '天天生鲜%s'%order_id, #标题 return_url = None, notify_url = None #都不填,因为我们现在没有公网ip ) # 返回应答 pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string return JsonResponse({'res':3,'pay_url':pay_url})
def post(self, request): """创建alipay对象,调用支付接口""" # 获取订单id order_id = request.POST.get('order_id') # 校验订单id if not order_id: return JsonResponse({'code':2, 'message':'没有订单id'}) # 获取订单信息:状态是待支付,支付方式是支付宝 try: order = OrderInfo.objects.get(order_id=order_id, user=request.user, status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"], pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"]) except OrderInfo.DoesNotExist: return JsonResponse({'code': 3, 'message': '订单错误'}) # 创建用于支付宝支付的对象 alipay = AliPay( appid = settings.ALIPAY_APPID, app_notify_url = None, # 默认回调url # 自己生产的私钥 app_private_key_path = settings.APP_PRIVATE_KEY_PATH, # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥, alipay_public_key_path = settings.ALIPAY_PUBLIC_KEY_PATH, sign_type = "RSA2", # RSA 或者 RSA2 debug = True # 默认False 配合沙箱模式使用 ) # 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string order_string = alipay.api_alipay_trade_page_pay( out_trade_no = order_id, total_amount = str(order.total_amount), # 将浮点数转成字符串 subject = '天天生鲜', return_url = None, notify_url = None # 可选, 不填则使用默认notify url ) # 生成url:让用户进入支付宝页面的支付网址 url = settings.ALIPAY_URL + '?' + order_string # 响应结果 return JsonResponse({'code':0, 'message':'支付成功', 'url':url})
def AlipayView(request): order_number = request.GET.get('order_number') order_total = request.GET.get('total') # 实例化支付 alipay = Alipay(appid='2016101200667735', app_notify_url=None, app_private_key_string=alipay_private_key_string, alipay_public_key_string=alipay_public_key_string, sign_type='RSA2') # 实例化订单 order_string = alipay.api_alipay_trade_page_pay( out_trade_no=str(order_number), total_amount=str(order_total), subject='服装', return_url="/Buyer/pay_result/", notify_url="/Buyer/pay_result/", ) # 网页支付订单 # 拼接收款地址=支付宝网关+订单返回参数 result = "https://openapi.alipaydev.com/gateway.do?" + order_string return HttpResponseRedirect(result)
def post(self,request): user = request.user if not user.is_authenticated(): return redirect(reverse('user:login')) ordid_after = request.POST.get('order_id') if not ordid_after: return JsonResponse({'info':'订单不存在'}) try: Order.objects.get(order_id=ordid_after,user=user,pay_style=1,states=0) except Exception as e: return JsonResponse({'indo':'订单不存在'}) # alipay = Alipay( # appid='' # app_notify # ) alipay = Alipay( appid='2016091400508206', app_notify_url=None, # 默认回调url app_private_key_path=os.path.join(settings.BASE_DIR, "user/orderform/app_private_key.pem"), alipay_public_key_path=os.path.join(settings.BASE_DIR, "user/orderform/app_public_key.pem"), # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥, sign_type="RSA2", # RSA 或者 RSA2 debug=True # 默认False 配合沙箱模式使用 ) ord_cost = order.tprice order_sit=alipay.api_alipay_trade_page_pay( subject='hsrsc', out_trade_no=ordid_after, total_amount=ord_cost, return_url=None, notify_url=None, ) # alipay.api_alipay_trade_page_pay这里应该有个结果返回接口 url = 'https://openapi.alipaydev.com/gateway.do'+ordid_after return JsonResponse({'info':'','cost_url':url})