Пример #1
0
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请求')
Пример #2
0
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请求')
Пример #3
0
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请求')
Пример #4
0
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请求,不支持其它请求'})
Пример #5
0
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请求,不支持其它请求'})
Пример #6
0
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请求')
Пример #7
0
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请求")
Пример #8
0
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请求")
Пример #9
0
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请求')
Пример #10
0
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请求')
Пример #11
0
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
Пример #12
0
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请求,不支持其它请求'})
Пример #13
0
    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)