def get(self, request): """ 处理支付宝的return_url返回 :param request: :return: """ processed_dict = {} for key, value in request.GET.items(): processed_dict[key] = value sign = processed_dict.pop("sign", None) alipay = Alipay( appid="2016091600527206", app_notify_url="https://vue.crazyballoon.xin/alipay/return/", app_private_key_path=private_key_path, alipay_public_key_path=ali_pub_key_path, debug=True, return_url="https://vue.crazyballoon.xin/alipay/return/") verify_result = alipay.verify(processed_dict, sign) # 此处理想返回True if verify_result is True: order_sn = processed_dict.get("out_trade_no", None) trade_no = processed_dict.get("trade_no", None) trade_status = processed_dict.get("trade_status", None) existed_orders = OrderInfo.objects.filter(order_sn=order_sn) for existed_order in existed_orders: existed_order.pay_status = trade_status existed_order.trade_no = trade_no existed_order.pay_time = datetime.now() existed_order.save() return Response("success")
def post(self, request): """ :param request: :return: """ money = request.data.get("money", 0) pay_pid = request.data.get("pay_pid", '').strip() # alipay_partner pay_private_key = request.data.get("pay_private_key", '').strip() # alipay_private_key email = request.data.get("email", '').strip() # alipay_seller_email if not money: return Response({"status": 500, "msg": "支付金额错误", "data": {}}) try: float(money) except Exception as e: return Response({"status": 500, "msg": "支付金额错误", "data": {}}) if not email or not pay_pid: return Response({"status": 500, "msg": "支付信息不完整", "data": {}}) if not pay_private_key: agent = request.user.userinfo.agent obj = SetPay.objects.get_or_create(agent=agent)[0] mydata = model_to_dict(obj) user = request.user crm = Crm(user=user) data = crm.get_agent_info() pay_private_key = data['data']['pay_private_key'] alipay = Alipay(partner=pay_pid, private_key=pay_private_key, seller_id=pay_pid, seller_email=email) cache_data = { "partner": pay_pid, "private_key": pay_private_key, "seller_id": pay_pid, "seller_email": email } # 把数据存入缓存 有效期10分钟 cache.set('alipay', cache_data, 10 * 60) site = get_current_site(request) protocol = 'http://' if request.is_secure() else 'https://' notify_url = protocol + site.domain + "/soc/system/order_callback" return_url = protocol + site.domain + '/soc/system/finance/alipay' alipay_dict = { 'notify_url': notify_url, 'return_url': "http" + return_url[5:], 'sign_type': 'MD5', # 'out_trade_no': ''.join([random.SystemRandom().choice("asdfghjklqwertyuiopmnbvcxz") for i in range(20)]), 'out_trade_no': str(int(time.time() * 10000)), 'subject': "测试订单", 'total_fee': money, 'body': "测试支付", 'anti_phishing_key': 'AABBCDDEG', } pay_url = alipay.create_direct_pay_by_user_url(**alipay_dict) context = {"status": 200, "url": pay_url, "data": {}} return Response(context)
def post(self, request): order_id = request.POST.get('order_id') try: order_info = OrderInfo.objects.get(order_id=order_id, order_status=1) except OrderInfo.DoesNotExist: pass alipay = Alipay() response = alipay.payorders(order_id, order_info.total_price) # return JsonResponse({"code": response.code, 'msg': response.msg, 'trade_no': response.trade_no}) return JsonResponse({"code": 200, 'url': response})
def get_alipay_url(self, obj): alipay = Alipay( appid=ALI_APP_ID, app_private_key_path=private_key_path, alipay_public_key_path=ali_public_key_path, app_notify_url="http://39.108.55.149:8000/alipay/return", return_url="http://39.108.55.149:8000/alipay/return", method="alipay.trade.page.pay", debug=True, # 使用沙箱环境 ) url = alipay.pay(out_trade_no=obj.order_sn, total_amount=obj.order_mount, subject=obj.order_sn) return 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') try: order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1) except OrderInfo.DoesNotExist: return JsonResponse({'res': 1, 'errmsg': '订单不存在!'}) # 业务处理,查询订单是否支付成功 # 获取查询返回值 result = Alipay.get_pay_status(order.order_id) # 如果为真 if result: order.order_status = 4 order.trade_no = result order.save() else: return JsonResponse({'res': 2, 'errmsg': '支付失败!'}) # 返回应答 return JsonResponse({'res': 4, 'msg': 'succceed!'})
def get_alipay_url(self, obj): alipay = Alipay( appid="2016091600527206", app_notify_url="https://vue.crazyballoon.xin/alipay/return/", app_private_key_path=private_key_path, alipay_public_key_path=ali_pub_key_path, debug=True, return_url="https://vue.crazyballoon.xin/alipay/return/") url = alipay.direct_pay( subject=obj.order_sn, out_trade_no=obj.order_sn, total_amount=obj.order_mount, ) re_url = "https://openapi.alipaydev.com/gateway.do?{data}".format( data=url) return re_url
def do_pay(self, request): """ 支付宝异步回调接口 :param request: :return: 向支付宝返回成功接收并处理异步通知状态 success """ request_data = getattr(request, request.method) request_data = deepcopy(request_data) form = PaymentReturnBaseForm(request_data) if not form.is_valid(): logger.error('error alipay form {0}'.format(form.errors)) return HttpResponse('出现未知错误') cld = form.cleaned_data # 获取订单号 seller_id = cld["seller_id"] # 取缓存 cache_data = cache.get('alipay') alipay = Alipay(partner=cache_data.get('partner'), private_key=cache_data.get('private_key'), seller_id=cache_data.get('seller_id'), seller_email=cache_data.get('seller_email'), alipay_public_key_string='') if not alipay.partner == seller_id: logger.error("error seller_id: %s" % seller_id) return HttpResponse("支持出现错误") notify_id = cld['notify_id'] # # 验证签名 if not alipay.verify_sign(cld): logger.error("invalid sign") return HttpResponse('支持出现错误') # 验证是否是支付宝发来的通知 if not alipay.verify_notify(notify_id): logger.error("invalid sign") return HttpResponse("支持出现错误") # 验证 total_fee if not float(cld['total_fee']) == 0.01: logger.error("error total_fee: %s" % str(cld['total_fee'])) return HttpResponse("支持出现错误") logging.info('pay test successful') return HttpResponse("支付成功")
def post(self, request): process_dict = {} # 得到一个字符串参数对应字典 for key, value in request.POST.items(): process_dict[key] = value sign = process_dict.pop("sign") process_dict.pop("sign_type") alipay = Alipay( appid=ALI_APP_ID, app_private_key_path=private_key_path, alipay_public_key_path=ali_public_key_path, app_notify_url="http://39.108.55.149:8000/alipay/return", return_url="http://39.108.55.149:8000/alipay/return", method="alipay.trade.page.pay", debug=True, # 使用沙箱环境 ) result = alipay.verify(process_dict, sign) if result: order_sn = process_dict.get('out_trade_no', None) trade_no = process_dict.get('trade_no', None) trade_status = process_dict.get('trade_status', None) existed_orders = OrderInfo.objects.filter(order_sn=order_sn) for existed_order in existed_orders: # 修改销量 order_goods = existed_order.goods.all() for order_good in order_goods: goods = order_good.goods goods.sold_num += order_good.goods_num goods.save() existed_order.pay_status = trade_status existed_order.trade_no = trade_no existed_order.pay_time = datetime.now() existed_order.save() return Response("success") else: return Response("fail")
def get(self, request): order_id = request.GET.get('order_id') try: order_info = OrderInfo.objects.get(order_id=order_id) except OrderInfo.DoesNotExist: pass alipay = Alipay() while True: time.sleep(5) response = alipay.order_status_query(order_id) if response.code == '10000': print(response.out_trade_no) order_info.trade_no = response.trade_no order_info.order_status = 2 order_info.save() return JsonResponse({'msg': '支付成功,caolouyaqianba'}) break elif response.code == '40004': print(response) continue else: print(response.code) continue
def post(self, request): # 用户校验 user = request.user if not user.is_authenticated: return JsonResponse({'res': 0, 'errmsg': '请先登录!'}) # 订单校验 order_id = request.POST.get('order_id') try: order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1) except OrderInfo.DoesNotExist: return JsonResponse({'res': 1, 'errmsg': '订单异常'}) # 业务处理 total_amount = order.total_price + order.transport_price response_url = Alipay.get_pay_url(order.order_id, total_amount) # 返回应答 return JsonResponse({'res': 4, 'url': response_url})