def check_order(request): """POST请求,支付宝通知支付信息,我们修改订单状态""" if request.method == "POST": alipay = AliPay( appid="2016091700528891", app_notify_url="http://132.232.71.152:8805/check_order/", return_url="http://192.168.11.142:8805/show/", app_private_key_path="keys/app_private_2048.txt", alipay_public_key_path="keys/alipay_public_2048.txt", debug=True, # 默认True 为测试环境 , False 为正式环境 ) from urllib.parse import parse_qs body_str = request.body.decode('utf-8') post_data = parse_qs(body_str) post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0] sign = post_dict.pop('sign', None) status = alipay.verify(post_dict, sign) if status: # 支付成功, 获取订单号将订单状态更新 out_trade_no = post_dict['out_trade_no'] models.Order.objects.filter(no=out_trade_no).update(status=2) return HttpResponse('success') else: return HttpResponse('支付失败') else: return HttpResponse('只支持POST请求')
def check_order(request): """ POST请求,支付宝通知支付信息,我们修改订单状态 :param request: :return: """ if request.method == 'POST': alipay = AliPay( appid="2016091700528920", app_notify_url="http://192.168.11.121:8000/check_order/", # POST,发送支付状态信息 return_url="http://192.168.11.121:8000/show/", # GET,将用户浏览器地址重定向回原网站 app_private_key_path="keys/app_private_2048.txt", alipay_public_key_path="keys/alipay_public_2048.txt", debug=True, # 默认True测试环境、False正式环境 ) from urllib.parse import parse_qs body_str = request.body.decode('utf-8') post_data = parse_qs(body_str) post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0] sign = post_dict.pop('sign', None) status = alipay.verify(post_dict, sign) if status: # 支付成功,获取订单号将订单状态更新 out_trade_no = post_dict['out_trade_no'] models.Order.objects.filter(no=out_trade_no).update(status=2) return HttpResponse('success') else: return HttpResponse('支持失败') else: return HttpResponse('只支持POST请求')
def show(request): """ 回到我们页面 :param request: :return: """ if request.method == "GET": alipay = AliPay( appid="2016091700528920", app_notify_url="http://192.168.11.121:8000/check_order/", # POST,发送支付状态信息 return_url="http://192.168.11.121:8000/show/", # GET,将用户浏览器地址重定向回原网站 app_private_key_path="keys/app_private_2048.txt", alipay_public_key_path="keys/alipay_public_2048.txt", debug=True, # 默认True测试环境、False正式环境 ) params = request.GET.dict() sign = params.pop('sign', None) status = alipay.verify(params, sign) if status: return HttpResponse('支付成功') else: return HttpResponse('失败') else: return HttpResponse('只支持GET请求')
def show_msg(request): if request.method == 'GET': alipay = AliPay( appid="2016101200668044", # APPID app_notify_url='http://106.12.115.136:8000/check_order/', return_url='http://127.0.0.1:8000/show_msg/', app_private_key_path='keys/app_private_2048.txt', # 应用私钥 alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥 debug=True, # 默认是False ) params = request.GET.dict() # 获取请求携带的参数并转换成字典类型 print( request.GET ) # <QueryDict: {'charset': ['utf-8'], 'out_trade_no': ['04f09b6f-e792-4a1d-8dbc-c68f1d046622'], ……} print( params ) # {'charset': 'utf-8', 'out_trade_no': '04f09b6f-e792-4a1d-8dbc-c68f1d046622',……} sign = params.pop('sign', None) # 获取sign的值 # 对sign参数进行验证 status = alipay.verify(params, sign) if status: return render(request, 'show_msg.html', {'msg': '支付成功'}) else: return render(request, 'show_msg.html', {'msg': '支付失败'}) else: return render(request, 'show_msg.html', {'msg': '只支持GET请求,不支持其它请求'})
def show_msg(request): if request.method == 'GET': alipay = AliPay( appid="2016101600696348", # APPID app_notify_url='http://106.12.115.136:8000/check_order/', return_url='http://127.0.0.1:8000/show_msg/', app_private_key_path='keys/app_private_2048.txt', # 应用私钥 alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥 debug=True, # 默认是False ) params = request.GET.dict() # 获取请求携带的参数并转换成字典类型 print(request.GET) print(params) print(type(params)) sign = params.pop('sign', None) # 获取sign的值 # 对sign参数进行验证 status = alipay.verify(params, sign) if status: # 支付成功修改订单状态为已支付 out_trade_no = params['out_trade_no'] print(out_trade_no) userid = request.user.id print(userid) Order.objects.filter(order_number=out_trade_no).update( order_status=1, userid=userid) return render(request, 'show_msg.html', { 'msg': '支付成功', 'params': params }) else: return render(request, 'show_msg.html', {'msg': '支付失败'}) else: return render(request, 'show_msg.html', {'msg': '只支持GET请求,不支持其它请求'})
def show(request): """ 回到我们页面 :param request: :return: """ if request.method == "GET": alipay = AliPay( appid="2016092500597006", app_notify_url="http://47.99.237.142:80/check_order/", # POST,发送支付状态信息 return_url="http://47.99.237.142:80/show/", # GET,将用户浏览器地址重定向回原网站 app_private_key_path="keys/private_key.txt", alipay_public_key_path="keys/ali_public_key.txt", debug=True, # 默认True测试环境、False正式环境 ) params = request.GET.dict() sign = params.pop('sign', None) status = alipay.verify(params, sign) if status: return redirect('/order_list') else: return HttpResponse('失败') else: return HttpResponse('只支持GET请求')
def ordershow(request): """回到我们的页面""" if request.method == "GET": alipay = AliPay() params = request.GET.dict() sign = params.pop('sign', None) status = alipay.verify(params, sign) if status: return HttpResponse('支付成功') else: return HttpResponse('支付失败') else: return HttpResponse("只支持GET请求")
def show(request): """回到我们的页面""" if request.method == "GET": alipay = AliPay( appid="2016091700528891", app_notify_url="http://192.168.11.142:8805/check_order/", return_url="http://192.168.11.142:8805/show/", app_private_key_path="keys/app_private_2048.txt", alipay_public_key_path="keys/alipay_public_2048.txt", debug=True, # 默认True 为测试环境 , False 为正式环境 ) params = request.GET.dict() sign = params.pop('sign', None) status = alipay.verify(params, sign) if status: return HttpResponse('支付成功') else: return HttpResponse('支付失败') else: return HttpResponse("只支持GET请求")
def check_order(request): ''' 支付宝通知支付的结果信息,如果支付成功可以用来修改订单的状态 :param request: :return: ''' if request.method == 'POST': alipay = AliPay( appid="2016101200668044", # APPID app_notify_url= 'http://106.12.115.136:8000/check_order/', # 支付宝会向这个地址发送post请求 return_url='http://127.0.0.1:8000/show_msg/', # 支付宝会向这个地址发送get请求 app_private_key_path='keys/app_private_2048.txt', # 应用私钥 alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥 debug=True, ) # print('request.body:', request.body) # 是字节类型,b'gmt_create=2019-09-21+17%3A00%3A15&charset=utf-8&…… body_str = request.body.decode('utf-8') # 转成字符串 # print('body_str:', body_str) from urllib.parse import parse_qs post_data = parse_qs(body_str) # 根据&符号分割 # print(post_data) # post_data是一个字符串 post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0] sign = post_dict.pop('sign', None) status = alipay.verify(post_dict, sign) print(status) if status: # 支付成功 out_trade_no = post_dict['out_trade_no'] return_value = models.Order.objects.filter( order_number=out_trade_no).update(order_status=1) print('return_value', return_value) return HttpResponse('success') # 向支付宝返回success,表示接收到请求 else: return HttpResponse('支付失败') else: return HttpResponse('只支持POST请求')
def ordercheck(request): """POST请求,支付宝通知支付信息,我们修改订单状态""" if request.method == "POST": alipay = AliPay() from urllib.parse import parse_qs body_str = request.body.decode('utf-8') post_data = parse_qs(body_str) post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0] sign = post_dict.pop('sign', None) status = alipay.verify(post_dict, sign) if status: # 支付成功, 获取订单号将订单状态更新 out_trade_no = post_dict['out_trade_no'] models.Order.objects.filter(no=out_trade_no).update(status=2) return HttpResponse('success') else: return HttpResponse('支付失败') else: return HttpResponse('只支持POST请求')
def check_order(request): if request.method == "POST": alipay = AliPay( # 配置APPID appid="2016091800538549", app_notify_url= "http://118.25.231.23:8899/check_order/", # POST,发送支付状态信息 return_url="http://118.25.231.23:8899/index/", # GET,将用户浏览器地址重定向回原网站 # 配置私钥 app_private_key_path="keys/key_private.txt", # 配置公钥 alipay_public_key_path="keys/key_public.txt", debug=True, # 默认True测试环境、False正式环境 ) from urllib.parse import parse_qs # 获取POST请求体中的数据 body_str = request.body.decode('utf-8') post_data = parse_qs(body_str) post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0] sign = post_dict.pop('sign', None) status = alipay.verify(post_dict, sign) # 判断订单是否支付成功 if status: # 支付成功,获取订单号将订单状态更新 # 获取订单编号 out_trade_no = post_dict['out_trade_no'] models.Orders.objects.filter(no=out_trade_no).update(status=1) # 固定的返回格式 return HttpResponse('success') else: return HttpResponse('支持失败') else: return HttpResponse("仅支持POST请求") pass
def show_msg(request): if request.method == 'GET': # alipay = AliPay( # appid="2016102400749283", # APPID # app_notify_url='http://127.0.0.1:8888/check_order/', # return_url='http://127.0.0.1:8888/show_msg/', # app_private_key_path='zhifu/keys/alipay_private_2048.txt', # 应用私钥 # alipay_public_key_path='zhifu/keys/alipay_public_2048.txt', # 支付宝公钥 # debug=True, # 默认是False # ) alipay = AliPay( appid='2016102400749283', app_notify_url='http://127.0.0.1:8888/check_order/', app_private_key_path='zhifu/keys/my_private_key.txt', alipay_public_key_path='zhifu/keys/alipay_public_key.txt', return_url='http://127.0.0.1:8888/show_msg/', debug=True) params = request.GET.dict() # 获取请求携带的参数并转换成字典类型 print( request.GET ) # <QueryDict: {'charset': ['utf-8'], 'out_trade_no': ['04f09b6f-e792-4a1d-8dbc-c68f1d046622'], ……} print( params ) # {'charset': 'utf-8', 'out_trade_no': '04f09b6f-e792-4a1d-8dbc-c68f1d046622',……} sign = params.pop('sign', None) # 获取sign的值 # 对sign参数进行验证 status = alipay.verify(params, sign) print(status, "哈哈") if status: return render(request, 'show_msg.html', {'msg': '支付成功'}) else: return render(request, 'show_msg.html', {'msg': '支付失败'}) else: return render(request, 'show_msg.html', {'msg': '只支持GET请求,不支持其它请求'})
def post(self, request): resp = {'msg': '操作成功', 'code': 200, 'data': []} processed_dict = {} for key, value in request.data.items(): processed_dict[key] = value sign = processed_dict.pop("sign", None) app_id = processed_dict.get('app_id', '') c_queryset = BusinessInfo.objects.filter(c_appid=app_id) if c_queryset: c_model = c_queryset[0] private_key_path = c_model.c_private_key ali_public_path = c_model.alipay_public_key alipay = AliPay( appid=app_id, app_notify_url=None, app_private_key_path=private_key_path, alipay_public_key_path=ali_public_path, debug=ALIPAY_DEBUG, # 默认False, return_url=None) try: # 验证通过返回True verify_result = alipay.verify(processed_dict, sign) except: resp['msg'] = '操作失败' resp['code'] = 400 return Response(resp) pay_status = processed_dict.get("trade_status", "") print('pay_status', pay_status) if verify_result is True and pay_status == "TRADE_SUCCESS": trade_no = processed_dict.get("trade_no", None) order_no = processed_dict.get("out_trade_no", None) total_amount = processed_dict.get("total_amount", 0) exited_order = OrderInfo.objects.filter(order_no=order_no)[0] user_id = exited_order.user_id user_info = UserProfile.objects.filter(id=user_id)[0] if exited_order.pay_status == 'PAYING': exited_order.trade_no = trade_no exited_order.pay_status = pay_status exited_order.pay_time = datetime.now() exited_order.save() # 更新用户收款 user_info.total_money = '%.2f' % (user_info.total_money + float(total_amount)) user_info.save() # 更新商家存钱 c_model.total_money = '%.2f' % (c_model.total_money + float(total_amount)) c_model.last_time = datetime.now() c_model.save() '支付状态,下单时间,支付时间,商户订单号' notify_url = user_info.notify_url if not notify_url: return Response('success') data_dict = {} data_dict['pay_status'] = pay_status data_dict['add_time'] = str(exited_order.add_time) data_dict['pay_time'] = str(exited_order.pay_time) data_dict['total_amount'] = total_amount data_dict['order_id'] = exited_order.order_id data_dict['order_no'] = exited_order.order_no data_dict['user_msg'] = exited_order.user_msg resp['data'] = data_dict r = json.dumps(resp) headers = {'Content-Type': 'application/json'} try: res = requests.post(notify_url, headers=headers, data=r, timeout=5, stream=True) return Response(res.text) except requests.exceptions.Timeout: exited_order.pay_status = 'NOTICE_FAIL' exited_order.save() return Response('') resp = {'msg': '验签失败', 'code': 400, 'data': {}} return Response(resp)