Пример #1
0
 def post(self, request, *args, **kwargs):
     ret = {"code": 1000}
     alipay = AliPay(
         appid=settings.APPID,
         app_notify_url=settings.
         NOTIFY_URL,  # 如果支付成功,支付宝会向这个地址发送POST请求(校验是否支付已经完成)
         return_url=settings.RETURN_URL,  # 如果支付成功,重定向回到你的网站的地址。
         alipay_public_key_path=settings.PUB_KEY_PATH,  # 支付宝公钥
         app_private_key_path=settings.PRI_KEY_PATH,  # 应用私钥
         debug=True,  # 默认False,
     )
     money = list(request.POST)[0]
     money = float(json.loads(money)["price"])
     # money = float(request.POST.get('price'))
     # print(money,type(money))
     out_trade_no = "x2" + str(time.time())
     query_params = alipay.direct_pay(
         subject="小姐姐晚上好",  # 商品简单描述
         out_trade_no=out_trade_no,  # 商户订单号
         total_amount=money,  # 交易金额(单位: 元 保留俩位小数)
     )
     pay_url = "https://openapi.alipaydev.com/gateway.do?{}".format(
         query_params)
     ret["data"] = pay_url
     return Response(ret)
Пример #2
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请求,不支持其它请求'})
Пример #3
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请求')
Пример #4
0
def buy(request, pk):
    #  0. 判读要购买的商品是否存在
    good_obj = models.Goods.objects.get(id=pk)
    if not good_obj:
        return HttpResponse('商品不存在')
    #  1. 创建订单
    no = str(uuid.uuid4())
    orders_obj = models.Orders.objects.create(no=no, good=good_obj)
    print("order", orders_obj)
    #  2. 根据支付宝SDK生成跳转链接
    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正式环境
    )

    query_params = alipay.direct_pay(
        subject=good_obj.title,  # 商品简单描述
        out_trade_no=no,  # 商户订单号
        total_amount=good_obj.price,  # 交易金额(单位: 元 保留俩位小数)
    )

    pay_url = "https://openapi.alipaydev.com/gateway.do?{0}".format(
        query_params)

    return redirect(pay_url)
Пример #5
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请求')
Пример #6
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请求')
Пример #7
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请求')
Пример #8
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请求,不支持其它请求'})
Пример #9
0
def purchase(request, goods_id):
    obj_goods = Goods.objects.get(pk=goods_id)
    order_number = str(uuid.uuid4())
    Order.objects.create(order_number=order_number, goods=obj_goods)
    print('AAAAAAA')
    print(Order.objects.create(order_number=order_number, goods=obj_goods))
    #实例化对象
    alipay = AliPay(
        appid='2016102400749283',
        app_notify_url=
        'http://127.0.0.1:8888/show_msg/',  # 支付宝发送支付状态信息的地址,支付宝会向这个地址发送post请求,可以先不写但是必须有内容(我这里用的是空格)
        alipay_public_key_path='zhifu/keys/alipay_public_key.txt',  # 支付宝公钥
        app_private_key_path='zhifu/keys/my_private_key.txt',  # 应用私钥
        return_url=
        'http://127.0.0.1:8888/show_msg/',  # 将用户浏览器地址重定向回原来的地址,支付宝会向这个地址发送get请求,可以先不写但是必须有内容\
        debug=True)
    # 定义请求地址传入的参数
    query_params = alipay.direct_pay(
        subject=obj_goods.goods_name,  # 商品的简单描述
        out_trade_no=order_number,  # 商品订单号
        total_amount=obj_goods.goods_price,  # 交易金额(单位是元,保留两位小数)
    )
    # 需要跳转到支付宝的支付页面,所以需要生成跳转的url
    pay_url = 'https://openapi.alipaydev.com/gateway.do?{0}'.format(
        query_params)
    return redirect(pay_url)
Пример #10
0
def buy(request, gid):
    """
    去购买并支付
    :param request:
    :param gid:
    :return:
    """
    obj = models.Goods.objects.get(pk=gid)

    # 生成订单(未支付)
    no = str(uuid.uuid4())
    models.Order.objects.create(no=no, goods_id=obj.id)

    # 根据
    #   APPID
    #   支付宝网关
    #   公钥和私钥
    # 生成要跳转的地址
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

    alipay = AliPay(
        appid="	2016091800538531",
        app_notify_url="http://47.98.134.86:8805/check_order/",  # POST,发送支付状态信息
        return_url="http:///47.98.134.86:8805/show/",  # GET,将用户浏览器地址重定向回原网站
        app_private_key_path="keys/private.txt",
        alipay_public_key_path="keys/public.txt",
        debug=True,  # 默认True测试环境、False正式环境
    )

    query_params = alipay.direct_pay(
        subject=obj.name,  # 商品简单描述
        out_trade_no=no,  # 商户订单号
        total_amount=obj.price,  # 交易金额(单位: 元 保留俩位小数)
    )
Пример #11
0
def buy(request, gid):
    """去购买并支付"""
    obj = models.Goods.objects.get(pk=gid)

    # 生成未支付订单
    no = str(uuid.uuid4())
    models.Order.objects.create(no=no, goods_id=obj.id)

    #  根据
    #  APPID
    #  支付宝网关
    #  公钥 和私钥
    #  生成要跳转的地址
    #  沙箱环境地址 https://openhome.alipay.com/platform/appDaily.htm?tab=info

    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 为正式环境
    )
    query_params = alipay.direct_pay(
        subject=obj.name,  # 商品简单描述
        out_trade_no=no,  # 商户的订单号
        total_amount=obj.price,  # 交易金额(单位:元 保留两位小数)
    )
    pay_url = "https://openapi.alipaydev.com/gateway.do?{0}".format(
        query_params)
    return redirect(pay_url)
Пример #12
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请求")
Пример #13
0
def ali():
    # 商户app_id
    app_id = "2016092000557856"  #复制来自支付宝生成的id
    # 服务器异步通知页面路径 需http: // 格式的完整路径,不能加?id = 123 这类自定义参数,必须外网可以正常访问
    # 发post请求
    notify_url = "http://127.0.0.1:8000/page2/"  #将这两个链接复制到支付宝中

    # 页面跳转同步通知页面路径 需http: // 格式的完整路径,不能加?id = 123 这类自定义参数,必须外网可以正常访问
    # 发get请求
    return_url = "http://127.0.0.1:8000/page2/"
    # 商户私钥路径
    merchant_private_key_path = "keys/pri"  #设置公钥和私钥的地址,文件上下两行begin和end是必须的,公钥就放在第二行。
    # 支付宝公钥路径
    alipay_public_key_path = "keys/pub"

    alipay = AliPay(
        appid=app_id,
        app_notify_url=notify_url,
        return_url=return_url,
        app_private_key_path=merchant_private_key_path,
        alipay_public_key_path=
        alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #14
0
def get_ali_object():
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
    app_id = "2016092100565140"  #  APPID (沙箱应用)

    # 支付完成后,支付偷偷向这里地址发送一个post请求,识别公网IP,如果是 192.168.20.13局域网IP ,支付宝找不到,def page2() 接收不到这个请求
    # notify_url = "http://47.94.172.250:8804/page2/"
    notify_url = "http://127.0.0.1:8000/page2/"

    # 支付完成后,跳转的地址。
    return_url = "http://127.0.0.1:8000/gouwu/"

    merchant_private_key_path = "keys/app_private_2048.txt"  # 应用私钥
    alipay_public_key_path = "keys/alipay_public_2048.txt"  # 支付宝公钥
    # merchant_private_key_path = "keys/pri" # 应用私钥
    # alipay_public_key_path = "keys/pub"  # 支付宝公钥

    alipay = AliPay(
        appid=app_id,
        app_notify_url=notify_url,
        return_url=return_url,
        app_private_key_path=merchant_private_key_path,
        alipay_public_key_path=
        alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #15
0
def get_ali_object():
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

    app_id = "2016091100483079"

    # 支付完成后,支付偷偷向这里地址发送一个post请求
    notify_url = "http://47.94.239.156/page2/"

    # 支付完成后,跳转的地址。
    return_url = "http://47.94.239.156/page2/"

    # http://47.94.239.156/page2/?total_amount=12.00
    # &timestamp=2018-03-06+12%3A22%3A53&
    # sign=NOdwPRkmY1jpkYYpmyZUR4Y7sxuMaZe6nnbhrl%2Fh3USdCfqoQ1dMO7ED%2FTHnKoZ%2BIGbudlromV5yb6J71NeZ2Tteq8Gi3%2Fb%2FaZC2CnFWOQeo7WnO50DUmJi59Dbcn7ggc3XcPcwssMgEn%2FGb%2F6lGIBBp5pLBFd7tVpoOSQoHwwd0iS%2BHBGiS69CA6aL7WWeokw1Juy9PudvBN4Wc2hgcmMiJh%2Fd74Ii7aURV%2FyWsOTKPc223WqvrZQO587y8oAg1zt8AIoB670rxr7YsV8DZYoa8LiDn%2FRLIu7uMIqpW11OiDQLD%2FCutvGu2mojCNZMfQxw1swi6UbH6CEXox3fKFw%3D%3D&trade_no=2018030621001004780200663793&sign_type=RSA2
    # &auth_app_id=2016091100483079&charset=utf-8&seller_id=2088102175075390&method=alipay.trade.page.pay.return&app_id=2016091100483079&out_trade_no=x21520310152.1253147&version=1.0

    merchant_private_key_path = "keys/app_private_2048.txt"
    alipay_public_key_path = "keys/alipay_public_2048.txt"

    alipay = AliPay(
        appid=app_id,
        app_notify_url=notify_url,
        return_url=return_url,
        app_private_key_path=merchant_private_key_path,
        alipay_public_key_path=alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #16
0
def get_ali_object():
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
    app_id = "2016100100635842"  #  APPID (沙箱应用)

    # 支付完成后,支付偷偷向这里地址发送一个post请求,识别公网IP,如果是 192.168.20.13局域网IP ,支付宝找不到,def page2() 接收不到这个请求
    #所以必须在服务器中将ip修改了,不然,支付不成功。你可以尝试尝试,更多详细功能参考:https://blog.csdn.net/qq_37193537/article/details/89497071
    notify_url = "http://47.94.172.250:8804/page2/"
    # notify_url = "http://127.0.0.1:8000/page2/"

    # 支付完成后,跳转的地址。
    # return_url = "http://127.0.0.1:8000/page2/"
    return_url = "http://47.94.172.250:8804/page2/"

    merchant_private_key_path = "keys/app_private_2048.txt" # 应用私钥
    alipay_public_key_path = "keys/alipay_public_2048.txt"  # 支付宝公钥

    alipay = AliPay(
        appid=app_id,
        app_notify_url=notify_url,
        return_url=return_url,
        app_private_key_path=merchant_private_key_path,
        alipay_public_key_path=alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #17
0
def alipay():
    obj = AliPay(
        appid="",######添写自己的appid
        app_notify_url="http://127.0.0.1:8000/update_order/",  #这是一个公网地址,这里省略暂不实现。 如果支付成功,支付宝会向这个地址发送POST请求(校验是否支付已经完成)
        return_url="http://127.0.0.1:8000/payresult/",  # 如果支付成功,重定向回到你的网站的地址。
        alipay_public_key_path="keys/alipay_public.txt",  # 支付宝公钥 使用自己的支付宝公钥,这里的公钥现在为空
        app_private_key_path="keys/app_private.txt",  # 应用私钥 使用自己的支付宝公钥,这里的公钥现在为空
        debug=True,  # 默认False,
    )
    return obj
Пример #18
0
def aliPay():
    obj = AliPay(
        appid=settings.APPID,
        app_notify_url=settings.NOTIFY_URL,
        return_url=settings.RETURN_URL,
        alipay_public_key_path=settings.PUB_KEY_PATH,
        app_private_key_path=settings.PRI_KEY_PATH,
        debug=True,  # 默认False,
    )
    return obj
Пример #19
0
def Get_AliPay_Object():
    alipay = AliPay(
        appid=settings.ALIPAY_APPID,  # APPID (沙箱应用)
        app_notify_url=settings.ALIPAY_NOTIFY_URL,  # 回调通知地址
        return_url=settings.ALIPAY_NOTIFY_URL,  # 支付完成后的跳转地址
        app_private_key_path=settings.APP_PRIVATE_KEY_PATH,  # 应用私钥
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,  # 支付宝公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #20
0
def aliPay():
    obj = AliPay(
        appid=settings.APPID,
        app_notify_url=settings.NOTIFY_URL,  # 如果支付成功,支付宝会向这个地址发送POST请求(校验是否支付已经完成)
        return_url=settings.RETURN_URL,  # 如果支付成功,重定向回到你的网站的地址。
        alipay_public_key_path=settings.PUB_KEY_PATH,  # 支付宝公钥
        app_private_key_path=settings.PRI_KEY_PATH,  # 应用私钥
        debug=True,  # 默认False,
    )
    return obj
Пример #21
0
def buy(request,gid):
    """
    去购买并支付
    :param request:
    :param gid:
    :return:
    """
    # 通过商品ID,获取对象,并生成订单状态信息
    obj = models.Goods.objects.get(pk=gid)

    # 生成订单(未支付)
    no = str(uuid.uuid4())
    models.Order.objects.create(no=no,goods_id=obj.id)

    # 根据
    #   APPID
    #   支付宝网关
    #   公钥和私钥
    # 生成要跳转的地址
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

    alipay = AliPay(
        appid= "2016082500309412",                               #在支付宝网站上登录之后就可以查看
        app_notify_url="http://47.98.134.86:8805/check_order/",  # POST,发送支付状态信息
        return_url="http:///47.98.134.86:8805/show/",            # GET,将用户浏览器地址重定向回原网站
        app_private_key_path="keys/app_private_2048.txt",        #在官网下载支付宝秘钥生成组件,秘钥和公钥自动生成
        alipay_public_key_path="keys/alipay_public_2048.txt",
        debug=True,                                              # 默认True测试环境、False正式环境
    )

    query_params = alipay.direct_pay(
        subject=obj.name,             # 商品简单描述
        out_trade_no=no,              # 商户订单号
        total_amount=obj.price,       # 交易金额(单位: 元 保留俩位小数)
    )

    # "https://openapi.alipaydev.com/gateway.do?{0}"   支付宝网关
    pay_url = "https://openapi.alipaydev.com/gateway.do?{0}".format(query_params)



    return redirect(pay_url)
Пример #22
0
def getobj():
    obj = AliPay(
        appid='2016080400164979',
        app_notify_url='http://118.24.249.103:8000/update/',  # post请求
        return_url='http://118.24.249.103:8000/result/',  # 支付完跳转的地址
        alipay_public_key_path='keys/alipay_public_2048.txt',
        app_private_key_path='keys/app_private_2048.txt',
        debug=True,  # 默认False,
    )

    return obj
Пример #23
0
def getobj():
    obj = AliPay(
        appid=settings.APPID,
        app_notify_url='http://47.93.220.42:80/update/',  # post请求
        return_url='httppycryptodome://47.93.220.42:80/result/',  # 支付完跳转的地址
        alipay_public_key_path='keys/alipay_public_2048.txt',
        app_private_key_path='keys/app_private_2048.txt',
        debug=True,  # 默认False,
    )

    return obj
Пример #24
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请求")
Пример #25
0
def index(request):
    if request.method == 'GET':
        return render(request, 'index.html')
    else:
        # 价格要保留两位小数
        price = float(request.POST.get('price'))
        alipay = AliPay(
            appid="2016080400164979",
            app_notify_url="http://www.baidu.com",
            app_private_key_path="keys/app_private_2048.txt",
            alipay_public_key_path="keys/alipay_public_2048.txt",
            return_url="http://www.baidu.com",
            debug=True,
        )
        params = alipay.direct_pay(subject='买了一个老王',
                                   out_trade_no=str(time.time()),
                                   total_amount=price)
        pay_url = "https://openapi.alipaydev.com/gateway.do?{}".format(params)

        return redirect(pay_url)
Пример #26
0
def alipay_obj():
    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url="http://47.93.4.198:8004/page2/",
        return_url="http://47.93.4.198:8004/page3/",
        app_private_key_path="keys/app_private_2048.txt",
        alipay_public_key_path=
        "keys/alipay_public_2048.txt",  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        debug=True,  # 默认False,
    )
    return alipay
Пример #27
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请求')
Пример #28
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请求')
Пример #29
0
def buy(request, pk):
    """
    去购买并支付
    :param request:
    :param gid:
    :return:
    """
    obj = models.Goods.objects.get(pk=pk)

    # 生成订单(未支付)
    no = str(uuid.uuid4())
    models.Order.objects.create(no=no, goods_id=obj.id)

    # 根据
    #   APPID
    #   支付宝网关
    #   公钥和私钥
    # 生成要跳转的地址
    # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

    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正式环境
    )

    query_params = alipay.direct_pay(
        subject=obj.name,  # 商品简单描述
        out_trade_no=no,  # 商户订单号
        total_amount=obj.price,  # 交易金额(单位: 元 保留俩位小数)
    )

    pay_url = "https://openapi.alipaydev.com/gateway.do?{0}".format(query_params)

    return redirect(pay_url)
Пример #30
0
 def get_alipay_url(self, obj):
     private_key_path = "keys/app_private_2048.txt"
     ali_public_path = "keys/alipay.txt"
     from utils.pay import AliPay
     alipay = AliPay(
         appid="2016092100565912",
         app_notify_url="http://120.43.159.62:8000/alipay/receive/",
         app_private_key_path=private_key_path,
         alipay_public_key_path=
         ali_public_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
         debug=True,  # 默认False,
         return_url="http://120.43.159.62:8000/alipay/return/")
     url = alipay.direct_pay(
         subject=obj.order_no,
         # 商品id
         out_trade_no=obj.order_no,
         # 资金
         total_amount=obj.total_amount)
     # 沙箱环境
     re_url = "https://openapi.alipaydev.com/gateway.do?{data}".format(
         data=url)
     # print(re_url)
     return re_url