Ejemplo n.º 1
0
 def get(self, request):
     # 获取所有的查询字符串参数
     query_dict = request.GET
     # 将查询字符串参数的类型转成标准的字典类型
     data = query_dict.dict()
     # 从查询字符串参数中提取并移除 sign ,不能参与签名验证
     signature = data.pop('sign')
     # 创建对接支付宝接口的SDK对象
     alipay = AliPay(
         appid=settings.ALIPAY_APPID,
         app_notify_url=None,  # 默认回调url,如果才用同步通知就不传
         # 应用的私钥和支付宝公钥路径
         app_private_key_string=app_private_key_string,
         alipay_public_key_string=alipay_public_key_string,
         sign_type="RSA2",  # 加密方式
         debug=settings.ALIPAY_DEBUG  # 指定是否为开发环境
     )
     # 使用SDK对象,调用通知验证接口函数,得到验证结果
     success = alipay.verify(data=data, signature=signature)
     # 如果验证通过,需要将支付宝的支付状态进行处理(将美多商城的订单ID和支付宝订单ID绑定,修改订单状态)
     if success:
         # 订单绑定
         # 美多商城订单id
         order_id = data.get('out_trade_no')
         # 支付宝订单id
         trade_id = data.get('trade_no')
         Payment.objects.create(order_id=order_id, trade_id=trade_id)
         # 修改订单状态,由"待支付"改为"待评价"
         OrderInfo.objects.filter(
             order_id=order_id,
             status=OrderInfo.ORDER_STATUS_ENUM['UNPAID']).update(
                 status=OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"])
         # 响应支付完成页面
         context = {
             'trade_id': trade_id,
         }
         return render(request, 'pay_success.html', context)
     else:
         return http.HttpResponseForbidden('非法请求')
Ejemplo n.º 2
0
    def __init__(self, **kwargs):
        # 首先调用父类的构造函数
        super().__init__(**kwargs)
        # 创建一个Alipay对象
        self.alipay = AliPay(
            # 应用ID
            appid=settings.ALIPAY_APP_ID,
            # 接受支付宝的url:
            app_notify_url=None,
            # 用户私钥 把自己的私钥传给支付宝,在开发者模式里面设置已经给过公钥
            app_private_key_string=app_private_key_string,
            # 支付宝公钥
            alipay_public_key_string=alipay_public_key_string,
            # 非对称加密的算法
            sign_type='RSA2',
            # 指定为调试模式,请求会发送到沙箱服务器
            debug=True,

        )
        print(settings.ALIPAY_APP_ID)
        print(app_private_key_string)
        print(alipay_public_key_string)
Ejemplo n.º 3
0
 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:
         order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1)
     except OrderInfo.DoesNotExist:
         return JsonResponse({'res': 2, 'errmsg': '订单错误'})
     # 业务处理:使用Python sdk调用支付宝的支付接口
     # 初始化
     alipay = AliPay(
         appid="0000000000000000",  # 应用id(改成自己应用对应的id)
         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  # 默认False 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,  # 订单id
         total_amount=str(total_pay),
         subject='天天生鲜%s' % order_id,
         return_url=None,
         notify_url=None  # 可选, 不填则使用默认notify url
     )
     # 返回应答
     pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
     return JsonResponse({'res': 3, 'pay_url': pay_url})
Ejemplo n.º 4
0
def pay_order(request):
    # v3.3 获取订单金额
    money = request.GET.get("money")
    # v3.3 获取订单id
    order_id = request.GET.get("order_id")
    # v3.2 定义变量存储支付宝应用公钥
    alipay_public_key_string = """-----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv66JqpsopyoXYMiWiIgyV4O/nc4ptXjRgZO9dkKRzsh1LusdILASoXlZ65nx/4ONCDpFn5QEQQNerVtmCW+Y9N/GmNnQOsEeX5tCxfNlg7vHS5Hk8QDCgIbEzVC3K+9wwYiCc8aQRjSM+Czb/Tq3kI+XJpDIGE6lPtp2zkwZaPt3y8yt88MpYcqPllNn3acEW8U5LnQmMHosohqlXu5iPK57OC7a0oC5AwUPlZcMizO2EqmxonWpfqk+scOhVdyVUwuX6siye76OkUuhO8M1758hhhNOUhmzhurEEW20toqA2eoMP63GweyTt5kWmWcqc30YU0FAN8Aq3QG03wF3xQIDAQAB
    -----END PUBLIC KEY-----"""
    # v3.2 定义变量存储支付宝应用私钥
    app_private_key_string = """-----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAv66JqpsopyoXYMiWiIgyV4O/nc4ptXjRgZO9dkKRzsh1LusdILASoXlZ65nx/4ONCDpFn5QEQQNerVtmCW+Y9N/GmNnQOsEeX5tCxfNlg7vHS5Hk8QDCgIbEzVC3K+9wwYiCc8aQRjSM+Czb/Tq3kI+XJpDIGE6lPtp2zkwZaPt3y8yt88MpYcqPllNn3acEW8U5LnQmMHosohqlXu5iPK57OC7a0oC5AwUPlZcMizO2EqmxonWpfqk+scOhVdyVUwuX6siye76OkUuhO8M1758hhhNOUhmzhurEEW20toqA2eoMP63GweyTt5kWmWcqc30YU0FAN8Aq3QG03wF3xQIDAQABAoIBAHSkuL+qJcX79jf+OKSjBMd+s/dKwtTczdklV5EEl4gXMkA38QS4QM4kc5TMnJgZrJQKKd4fC6uoak/iI6iwUYsKNedD/NQUOvCBIdQl9muAtJmHEaObC8F8wXwTlzPURHBxKrlbZuZiCjrnyYNC3PvKdXeReUJZcXNbLBsD8h6QgVOPaKXnLCSTZf98gHXkDN0IWlNp08143b4Xp6DO+CiaUHUbUrAcHdB+gHQJnN3+YP3dnVGzvyRisjJ8B8mTS1zPk4fpciViA6EMCYLHFCrS+8LZ+WEpJN8o/0o9Mgpd8YPKg1q4WDlYp1ulnRUVqOkJaVZVOvecTtbPbyaJWUECgYEA9fj7peww3VmPNYS3WAAtm/M5YMgsuFNRWC61/o+FKDSVlH57dVRRTnnGF7NE5dUHldloAa+yBw5Zbi/s5LjYV36zvga4dYZpA8Lt4uglzg3QAXwQ+X5YRqkde1gGolOdU/MsnhvehQpdOoZ5XWzJHe/2kA8RNraZyYsER0PQ2hECgYEAx373L2VZZdhPT8EIrgrAU93izxZAS9Cp5A/whogxmVhaKfGHcJa4YygajzyKd3DRoSmYtbXqysGXZyY+RmolCyMeZEBZ1s/2DTj2vtdh3ngV6UQY4vbgpCBgDCOnoiAq/5whcFcTDjma79BmsdHng/ZXgo+5U6v4TrKdZ7ay7nUCgYEArEZnkk175/xLFjPO6d6uExTmMgfhcnRAe9+zbgh9PayeuzNfKs0UaT9W49CWR9bNikGL2+p/aPu+3TLJ22QvehBuuYAhf4bVVGIZlRv9JnV8Ix4PEX9ROqRF1tbPRrADeAHQVSi10D5zD4ORy0JfFg20hi9XYhfAXG12YKd5xtECgYB8t3A6ziZsWCWFG42cmJYSGDYx9pwtiX6cWCarRDuVvTlo3Vkp1t/hBXJNN7Ds6Lf1A/c3KkplhU9sqejmxnbwFn1qeRxxAcO2EnWXazkBBpvUH8FbKrHXiXHiROwInAmlkOsKuzTrgLHO2L9KzYnp4rhkpAtdNrZeJKXo77u+/QKBgF4DmigjHYR32dmKXZQYp2DkM7lFxnuL6McR0r/5b/wkMUPSInCK4n4e8vBH611dkaNNhNSTR5aVsrMZuBGzQrFOGnXawa+PxpGPaVwR/jf/tPCLmsq2KPenQPF15tc+4dosMp726+f+4Klg71qMK8yjGN+fkrHo3Er1y+35Letj
    -----END RSA PRIVATE KEY-----"""

    # v3.2 实例化支付应用
    alipay = AliPay(
        appid="2016101000652510",
        app_notify_url=None,
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2"
    )

    # v3.2 发起支付请求
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_id,  # v3.3 订单号
        total_amount=str(money),  # v3.3 支付金额
        subject="生鲜交易",  # 交易主题暂时固定成“"生鲜交易"
        # v3.3 支付完成要跳转的本地路由
        return_url="http://127.0.0.1:8000/Buyer/pay_result/",
        # v3.3 支付完成要跳转的异步路由
        notify_url="http://127.0.0.1:8000/Buyer/pay_result/"
    )
    # v3.7 添加支付成功后订单状态置为2待发货
    order = Order.objects.get(order_id=order_id)
    order.order_status = 2
    order.save()
    # v3.3 发起购买商品跳转支付路由
    return HttpResponseRedirect("https://openapi.alipaydev.com/gateway.do?" + order_string)
Ejemplo n.º 5
0
def kb_alipay():
    APP_PRIVATE_KEY_PATH = os.path.join(
        settings.BASE_DIR, "utils/kbalipay/alipay_keys/app_private.pem")
    ALIPAY_PUBLIC_KEY_PATH = os.path.join(
        settings.BASE_DIR, "utils/kbalipay/alipay_keys/alipay_public.pem")
    app_private_key_string = open(APP_PRIVATE_KEY_PATH).read()
    alipay_public_key_string = open(ALIPAY_PUBLIC_KEY_PATH).read()
    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False  配合沙箱模式使用
    )
    ali_url = {
        'alipay_url': settings.ALIPAY_URL,
        'return_url': settings.RETURN_URL,
        'notify_url': settings.NOTICE_URL,
    }
    return ali_url, alipay
Ejemplo n.º 6
0
def payment_alipay_process(request):
    order_id = request.session.get('order_id')  # 获得订单id
    order = get_object_or_404(Order, id=order_id)

    app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()
    alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read()
    host = request.get_host()  # 获得host,即网址

    alipay = AliPay(
        appid="2016091400505954",
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=
        alipay_public_key_string,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=settings.DEBUG  # 默认False
    )

    subject = "测试订单"

    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order.id,
        total_amount='{0:.2}'.format(order.get_total_cost().quantize(
            Decimal('.01'))),
        subject=subject,
        return_url='http://{}{}'.format(
            host, reverse('payment:alipay_done')),  # 成功后返回商家的url
        notify_url='https://{}{}'.format(
            host, reverse('payment:alipay_done'))  # 可选, 不填则使用默认notify url
    )

    # import pdb
    # pdb.set_trace()
    if settings.DEBUG:
        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
    else:
        pay_url = 'https://openapi.alipay.com/gateway.do?' + order_string
    return redirect(pay_url)
Ejemplo n.º 7
0
def generate_order_payment(order_id):
    '''生成支付宝的支付信息'''
    user_id = g.user_id
    try:
        order = Order.query.filter(Order.id == order_id,
                                   Order.status == "WAIT_PAYMENT",
                                   Order.user_id == user_id).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg="查询订单出错")

    if not order:
        return jsonify(errno=RET.NODATA, errmsg="此订单无效")

    # 构造支付宝的工具对象
    alipay_client = AliPay(
        appid=current_app.config.get("ALIPAY_APPID"),
        app_notify_url=None,  # 默认支付宝通知url
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/alipay_public_key.pem"),
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False, 如果是沙箱模式,debug=True
    )

    # 向支付宝发起手机网站支付的请求
    # 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string

    order_string = alipay_client.api_alipay_trade_wap_pay(
        out_trade_no=order_id,  # 我们自己的订单编号
        total_amount=str(order.amount / 100.0),  # 订单总金额
        subject=u"爱家租房-%s" % order_id,  # 展示给用户的订单信息
        return_url="http://127.0.0.1:5000/payComplete.html",  # 支付完成后跳转回的页面路径
        notify_url=None)

    alipay_url = current_app.config.get("ALIPAY_APPID") + "?" + order_string
    return jsonify(errno=RET.OK, errmsg="OK", data={"alipay_url": alipay_url})
Ejemplo n.º 8
0
    def get(self, request):
        # get the data from request
        dict_data = request.GET.dict()
        sign = dict_data.pop("sign")
        trade_no = dict_data.get("trade_no")
        out_trade_no = dict_data.get("out_trade_no")

        # check the data
        if not all([sign, trade_no, out_trade_no]):
            return http.HttpResponseForbidden("非法请求")

        app_private_key_string = open(settings.ALIPAY_PRIVATE_KEY_PATH).read()
        alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read()

        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=settings.ALIPAY_RETURN_URL,
            app_private_key_string=app_private_key_string,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA2",
            debug=settings.ALIPAY_DEBUG,
        )
        success = alipay.verify(dict_data, sign)

        if not success:
            return http.HttpResponseForbidden("订单信息给篡改了。")

        # save the data to the database
        PayModel.objects.create(
            out_trade_no=out_trade_no,
            trade_no=trade_no,
        )

        OrderInfo.objects.filter(order_id=out_trade_no).update(status=OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"])

        context = {
            "order_id": out_trade_no
        }
        return render(request, "pay_success.html", context=context)
Ejemplo n.º 9
0
def pay(request):
    app_private_key_path = 'keys/app_private_2048.txt'
    alipay_public_key_path = "keys/alipay_public_2048.txt"
    alipay = AliPay(
        appid="2016102200736333",
        app_notify_url="http://127.0.0.1:8804/page2/",  # 默认回调url
        app_private_key_string=open(app_private_key_path).read(),
        alipay_public_key_string=open(
            alipay_public_key_path).read(),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True,  # 默认False
    )
    order_string = alipay.api_alipay_trade_page_pay(
        # out_trade_no=datetime.now().strftime('%Y''%m''%d''%H''%M''%S'),
        out_trade_no="x2" + str(time.time()),
        total_amount=0.01,
        subject="充气式赵俊明",
        # notify_url="https://blog.csdn.net/" # 可选, 不填则使用默认notify url
    )
    pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
    print(pay_url)
    return redirect(pay_url)
Ejemplo n.º 10
0
 def get(self,request):
     # 获取参数
     out_trade_no = request.GET.get('out_trade_no')
     print('===1===')
     # 验证参数的完整性
     if not all([out_trade_no]):
         return HttpResponse('参数有误!')
     # 验证订单号是否正确
     try:
         order = OrderInfo.objects.get(order_id = out_trade_no)
     except OrderInfo.DoesNotExist:
         return HttpResponse('商品不存在!')
     # 初始化alipay的参数
     alipay = AliPay(
         appid=settings.ALIPAY_APP_ID,  # 应用APPID
         app_notify_url=settings.ALIPAY_APP_NOTIFY_URL,  # 默认回调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=settings.ALIPAY_DEBUG  # 默认False,False代表线上环境,True代表沙箱环境
     )
     # 验证支付结果
     response = alipay.api_alipay_trade_query(
         out_trade_no=out_trade_no,  # 商品订单号
     )
     res_code = response.get('code')
     status = response.get('trade_status')
     print(res_code)
     print(status)
     if res_code == '10000' and status == 'TRADE_SUCCESS':
         # 更新交易状态和支付宝交易号
         order.order_id = out_trade_no
         order.order_status = 4
         order.trade_no = response.get('trade_no')
         order.save()
         return render(request, 'pay_result.html', {'pay_result': '支付成功'})
     else:
         return render(request, 'pay_result.html', {'pay_result': '支付失败'})
Ejemplo n.º 11
0
    def put(self, request):
        # 获取查询字符串的参数
        data = request.query_params.dict()
        # 取出签证信息
        sign = data.pop('sign')

        # 创建网站链接支付宝的客户端
        alipay_client = AliPay(
            appid=settings.ALIPAY_APPID,  # 网站的id
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2 加密方式
            debug=settings.ALIPAY_DEBUG  # 默认False, 沙箱环境
        )
        # 调用verify()验证签证及返回前端的数据是否正确
        success = alipay_client.verify(data, sign)
        if success:
            # 创建交易成功的数据,在模型类中添加当前交易的信息
            # 订单编号
            order_id = data.get('out_trade_no')
            # 支付宝支付流水号
            trade_id = data.get('trade_no')
            Payment.objects.create(order_id=order_id, trade_id=trade_id)
            # 修改订单的状态
            OrderInfo.objects.filter(
                order_id=order_id,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID']).update(
                    status=OrderInfo.ORDER_STATUS_ENUM['UNSEND'])
            # 返回客户交易成功的流水号
            return Response({'trade_id': trade_id})

        else:
            return Response({'message': '非法请求'},
                            status=status.HTTP_403_FORBIDDEN)
Ejemplo n.º 12
0
def pay(request, order_code):
    alipay = AliPay(
        appid='2016092700609211',
        app_notify_url=None,  # 默认回调url
        app_private_key_path=os.path.join(settings.BASE_DIR,
                                          "alipay/app_private_key.pem"),
        alipay_public_key_path=os.path.join(settings.BASE_DIR,
                                            "alipay/alipay_public_key.pem"),
        sign_type="RSA2",
        debug=True)

    order = Order.objects.get(order_code=order_code)

    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_code,
        total_amount=float(order.total_amount),
        subject='商品支付信息',
        return_url='http://127.0.0.1:8000/payback/',
    )

    alipay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
    return redirect(alipay_url)
Ejemplo n.º 13
0
    def get(self, request, order_id):
        """获取支付链接"""
        # 判断订单信息是否正确
        try:
            order = OrderInfo.objects.get(
                pk=order_id,
                user=request.user,
                pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"],
                status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"])
        except OrderInfo.DoesNotExist:
            return Response({"message": "订单信息有误"},
                            status=status.HTTP_400_BAD_REQUEST)

        # 构造支付宝对象
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        # 构造支付宝支付链接地址

        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            subject="美多商城%s" % order_id,
            return_url=settings.ALIPAY_CALLBACK_URL + "pay_success.html",
        )

        alipay_url = settings.ALIPAY_URL + "?" + order_string

        return Response({"alipay_url": alipay_url})
Ejemplo n.º 14
0
def init_alipay_cfg(appID:str, publicKey:str, privateKey:str, callbackUrl:str):
    '''
    初始化alipay配置
    :return: alipay 对象
    '''

    ssl._create_default_https_context = ssl._create_unverified_context
    publicKey = '''-----BEGIN PUBLIC KEY-----\n ''' + publicKey + '''\n-----END PUBLIC KEY-----'''
    privateKey = '''-----BEGIN RSA PRIVATE KEY-----\n''' + privateKey + '''\n-----END RSA PRIVATE KEY-----'''
    # print(publicKey)

    alipay = AliPay(
        appid=appID,
        app_notify_url=callbackUrl,  # 默认回调url
        # app_private_key_string=app_private_key_string,
        # alipay_public_key_string=alipay_public_key_string,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        app_private_key_string=privateKey,
        alipay_public_key_string=publicKey,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False  # 默认False ,若开启则使用沙盒环境的支付宝公钥
    )
    return alipay
Ejemplo n.º 15
0
    def get(self, request, order_id):

        try:
            # 校验
            order = OrderInfo.objects.get(order_id=order_id, status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'],
                                          user=request.user)
        except OrderInfo.DoesNotExist:
            return http.HttpResponseForbidden('订单有误')
        # 创建alipay SDK对像
        #
        # ALIPAY_APPID = '2016091900551154'
        # ALIPAY_DEBUG = True  # 表示是沙箱环境还是真实支付环境
        # ALIPAY_URL = 'https://openapi.alipaydev.com/gateway.do'
        # ALIPAY_RETURN_URL = 'http://www.meiduo.site:8000/payment/status/'
        #

        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'keys/app_private_key.pem'),
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                'keys/alipay_public_key.pem'),
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False      #  Ture就是测试沙箱环境
        )
        # 调用SDK方法获取到支付链接查询参数
        # 电脑网站支付,需要跳转到https://openapi.alipay.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='美多商城:%s' % order_id,  # 支付时的主题
            return_url=settings.ALIPAY_RETURN_URL
        )

        # 拼接支付宝支付界面url
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        # 响应
        return http.JsonResponse({'code': '0', 'errmsg': 'ok', 'alipay_url': alipay_url})
Ejemplo n.º 16
0
def order_pay(order_id):
    '''发起支付宝支付'''
    user_id = g.user_id
    # 判断订单状态
    try:
        order = Order.query.filter(Order.id == order_id, Order.user_id == user_id, Order.status == 'WAIT_PAYMENT').first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库异常')

    if order is None:
        return jsonify(errno=RET.NODATA, errmsg='订单数据有误')

    app_private_key_string = open(os.path.join(os.path.dirname(__file__), 'keys/app_private_key.pem')).read()
    alipay_public_key_string = open(os.path.join(os.path.dirname(__file__), 'keys/alipay_public_key.pem')).read()
    # 创建支付宝的SDK工具对象
    alipay = AliPay(
        appid="2021000118643231",
        app_notify_url=None,  # the default notify path
        app_private_key_string=app_private_key_string,
        # alipay public key, do not use your own public key!
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA or RSA2
        debug=True,  # False by default
        # config=AliPayConfig(timeout=15)  # optional, request timeout
    )

    order_string = alipay.api_alipay_trade_wap_pay(
        out_trade_no=order.id,      # 订单编号
        total_amount=str(order.amount/100.0),       # 总金额
        subject='爱家 %s' % order.id,     # 订单标题
        return_url="http://127.0.0.1:5000/payComplete.html",    # 返回的链接地址
        notify_url=None  # this is optional
    )

    # 构建让用户跳转的支付链接地址
    pay_url = constants.ALIPAY_URL_PREFIX + order_string

    return jsonify(errno=RET.OK, errmsg='OK', data={'pay_url':pay_url})
Ejemplo n.º 17
0
def save_order_payment_result():
    '''保存订单支付结果'''

    alipay_dict = request.form.to_dict()

    # 对支付宝进行数据分离 提取支付宝的签名参数sign和剩下的数据
    alipay_sign = alipay_dict.pop("sign")

    # 创建支付宝工具对象
    alipay = AliPay(
        appid="2016102200736882",  # 应用id
        app_notify_url=None,  # 默认回调url
        app_private_key_string=open(
            os.path.join(os.path.dirname(__file__),
                         'keys/rsa_private_key.pem')).read(),
        alipay_public_key_string=open(
            os.path.join(os.path.dirname(__file__),
                         'keys/alipay_public_key.pem')).read(),
        sign_type="RSA2",  # RSA 或 RSA2
        debug=True  # 默认false
    )
    # 借助工具验证参数的合法性
    # 如果参数是支付宝返回的,result返回True,否则返回false
    result = alipay.verify(alipay_dict, alipay_sign)

    if result:
        order_id = alipay_dict.get("out_trade_no")
        trade_no = alipay_dict.get("trade_no")  # 支付宝的交易号
        try:
            Order.query.filter_by(id=order_id).update({
                "status": "WAIT_COMMENT",
                "trade_no": trade_no
            })
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()

    return jsonify(errno=RET.OK, errmsg="ok")
Ejemplo n.º 18
0
def save_order_payment_result():
    '''保存订单支付结果'''
    alipay_data = request.form.to_dict()
    # sign must be poped out
    # 对支付宝的数据进行分离操作     提取出支付宝的签名参数sign值 和 剩下的其他数据
    signature = alipay_data.pop("sign")

    print(json.dumps(alipay_data))
    print(signature)

    app_private_key_string = open(os.path.join(os.path.dirname(__file__), 'keys/app_private_key.pem')).read()
    alipay_public_key_string = open(os.path.join(os.path.dirname(__file__), 'keys/alipay_public_key.pem')).read()
    # 创建支付宝的SDK工具对象
    alipay = AliPay(
        appid="2021000118643231",
        app_notify_url=None,  # the default notify path
        app_private_key_string=app_private_key_string,
        # alipay public key, do not use your own public key!
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA or RSA2
        debug=True,  # False by default
        # config=AliPayConfig(timeout=15)  # optional, request timeout
    )

    # verify
    # 借助工具验证参数的合法性
    # 如果确定参数是支付宝的,返回True,否则返回False
    result = alipay.verify(alipay_data, signature)
    order_id = alipay_data.get('out_trade_no')
    trade_no = alipay_data.get('trade_no')
    if result:
        try:
            Order.query.filter_by(id=order_id).update({'status':'WAIT_COMMENT', 'trade_no':trade_no})
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()

    return jsonify(errno=RET.OK, errmsg='OK')
Ejemplo n.º 19
0
    def get(self, request, order_id):
        """
        获取支付链接
        """
        # 判断订单信息是否正确
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=request.user,
                pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"],
                status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"])
        except OrderInfo.DoesNotExist:
            return Response({'message': '订单信息有误'},
                            status=status.HTTP_400_BAD_REQUEST)

        # 构造支付宝支付链接地址
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(
                os.path.dirname(os.path.abspath(__file__)),
                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            subject="美多商城%s" % order_id,
            return_url="http://www.meiduo.site:8080/pay_success.html",
        )
        # 需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        # 拼接链接返回前端
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return Response({'alipay_url': alipay_url})
Ejemplo n.º 20
0
    def post(self, request):
        """"""
        # 订单id
        order_id = request.POST.get("order_id")

        if not order_id:
            return JsonResponse({"code": 2, "message": "缺失订单号"})

        # 获取订单的信息
        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=os.path.join(settings.BASE_DIR, "apps/orders/app_private_key.pem"),
            alipay_public_key_path=os.path.join(settings.BASE_DIR, "apps/orders/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False  配合沙箱模式使用
        )

        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),  # 将Decimal类型转换为字符串交给支付宝
            subject="天天生鲜%s" % order_id,
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 让用户进行支付的支付宝页面网址
        url = settings.ALIPAY_URL + "?" + order_string

        return JsonResponse({"code": 0, "message": "请求支付成功", "url": url})
Ejemplo n.º 21
0
def alipay(request):
    alipay = AliPay(
        appid="2016101200665774",
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA",  # RSA 或者 RSA2
        debug=False  # 默认False
    )

    subject = "兰波激励"

    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no="20161112",
        total_amount=10,
        subject=subject,
        return_url="https://www.1000phone.com",
        notify_url="https://www.1000phone.com"  # 可选, 不填则使用默认notify url
    )
    return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
Ejemplo n.º 22
0
def order_pay(order_id):
    """发起支付宝支付"""
    user_id = g.user_id

    # 判断订单状态
    try:
        order = Order.query.filter(Order.id == order_id,
                                   Order.user_id == user_id,
                                   Order.status == "WAIT_PAYMENT").first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据库异常")

    if order is None:
        return jsonify(errno=RET.NODATA, errmsg="订单数据有误")

    # 创建支付宝sdk的工具对象
    alipay_client = AliPay(
        appid="2021000116672604",  # APPID
        app_notify_url=None,  # 默认回调url
        app_private_key_string=
        app_private_key_string,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    # 手机网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
    order_string = alipay_client.api_alipay_trade_wap_pay(
        out_trade_no=order.id,  # 订单编号
        total_amount=str(order.amount / 100.0),  # 总金额
        subject="爱家租房 {}".format(order.id),  # 订单标题
        return_url="http://192.168.193.211:5002/payComplete.html",  # 返回的连接地址
        notify_url=None  # 可选, 不填则使用默认notify url
    )

    # 构建让用户跳转的支付链接地址
    pay_url = constants.ALIPAY_URL_PREFIX + order_string
    return jsonify(errno=RET.OK, errmsg="OK", data={"pay_url": pay_url})
Ejemplo n.º 23
0
    def get(self, request, order_id):
        # 查询要支付的订单

        user = request.user

        try:
            order = OrderInfo.objects.get(order_id=order_id, user=user, status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"])
        except OrderInfo.DoesNotExist:
            return http.HttpResponseForbidden("无效订单")

        # 创建支付宝支付对象
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                "keys/alipay_public_key.pem"),
            sign_type="RSA2",
            debug=settings.ALIPAY_DEBUG
        )

        # 生成支付宝登录连接
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),








            subject="怡红院%s" % order_id,
            return_url=settings.ALIPAY_RETURN_URL
        )
        # 响应登录支付宝连接
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return http.JsonResponse({"code": RETCODE.OK, "errmsg": "OK", "alipay_url": alipay_url})
Ejemplo n.º 24
0
def order_pay(request):
    order_id = request.POST.get('orderId')
    if not order_id:
        return JsonResponse({'status': '401', 'errmsg': '无效的订单编号'})
    try:
        order = Order.objects.get(user=request.user, order_id=order_id, pay_method=2, order_status=1)
    except:
        return JsonResponse({'status': '401', 'errmsg': '订单错误'})

    app_private_key_string = open(settings.PRIVATE_KEY).read()
    alipay_public_key_string = open(settings.PUBLIC_KEY).read()

    alipay = AliPay(
        appid="2016092300575166",
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    # 如果你是 Python 3的用户,使用默认的字符串即可
    subject = "三岁书屋" + str(order_id)

    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_id,
        total_amount=str(order.total),
        subject=subject,
        return_url=None,
        notify_url=None  # 可选, 不填则使用默认notify url
    )

    url = 'https://openapi.alipaydev.com/gateway.do?'

    path = url + order_string

    return JsonResponse({'status': '200', 'pay_path': path})
Ejemplo n.º 25
0
def order_pay(order_id):
    """发起支付宝支付"""
    user_id = g.user_id

    # 判断订单状态
    try:
        order = Order.query.filter(Order.id == order_id,
                                   Order.user_id == user_id,
                                   Order.status == "WAIT_PAYMENT").first()
    except Exception as e:
        # current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据库异常")

    if order is None:
        return jsonify(errno=RET.NODATA, errmsg="数据库异常")

    # 创建支付宝sdk的工具对象
    alipay_client = AliPay(
        appid="2016101000651833",
        app_notify_url=None,
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/ali_pay_public_key.pem"),
        sign_type="RSA2",
        debug=True)

    # 手机网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do + order_string
    order_string = alipay_client.api_alipay_trade_wap_pay(
        out_trade_no=order.id,  # 订单编号
        total_amount=str(order.amount / 100.0),  # 总金额
        subject=u"爱家租房 %s " % order.id,  # 订单标题
        return_url="http:127.0.0.1:5000/payComplete.html",  # 回转链接
        notify_url=None  # 可选, 不填则使用默认notify url
    )

    # 构建用户跳转的支付宝链接地址
    pay_url = constants.ALIPAY_URL_PREFIX + order_string
    return jsonify(errno=RET.OK, errmsg="ok", data={"pay_url": pay_url})
Ejemplo n.º 26
0
    def get(self, request, order_id):
        user = request.user
        # 校验订单order_id
        try:
            # 订单的用户和订单的状态相符也是发起支付的前提,不能支付别人的和已经取消的订单
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=user,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except OrderInfo.DoesNotExist:
            return Response({'message': "订单信息有误"},
                            status=status.HTTP_400_BAD_REQUEST)

        # 根据订单的数据,向支付宝发起请求,获取支付链接参数
        with open('keys/app_private_key.pem', 'r') as f1:
            app_private_key_string = f1.read()
        with open('keys/alipay_public_key.pem', 'r') as f2:
            alipay_public_key_string = f2.read()
        alipay_client = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        order_string = alipay_client.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            subject="美多商城%s" % order_id,
            return_url="http://www.meiduo.site:8080/pay_success.html",
        )

        # 需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        # 拼接链接返回前端
        alipay_url = settings.ALIPAY_GATEWAY_URL + '?' + order_string

        return Response({'alipay_url': alipay_url})
Ejemplo n.º 27
0
def order_pay(order_id):
    """发起支付宝支付"""
    user_id = g.user_id

    # 判断订单状态
    try:
        order = Order.query.filter(Order.id == order_id,
                                   Order.user_id == user_id,
                                   Order.status == "WAIT_PAYMENT").first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据库异常")

    if order is None:
        return jsonify(errno=RET.NODATA, errmsg="订单数据有误")

    # 创建支付宝sdk的工具对象
    alipay_client = AliPay(
        appid=constants.ALIPAY_APP_ID,
        app_notify_url=None,  # 默认回调url
        app_private_key_path=constants.ALIPAY_APP_PRIVATE_KEY,  # 私钥
        alipay_public_key_path=constants.
        ALIPAY_PUBLIC_KEY,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    # 手机网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
    order_string = alipay_client.api_alipay_trade_wap_pay(
        out_trade_no=order.id,  # 订单编号
        total_amount=str(order.amount / 100.0),  # 总金额
        subject=u"爱家租房 %s" % order.id,  # 订单标题
        return_url=constants.ALIPAY_RESULT_URL,  # 返回的连接地址
        notify_url=None  # 可选, 不填则使用默认notify url
    )

    # 构建让用户跳转的支付连接地址
    pay_url = constants.ALIPAY_URL_PREFIX + order_string
    return jsonify(errno=RET.OK, errmsg="OK", data={"pay_url": pay_url})
Ejemplo n.º 28
0
    def get(self, request):
        """处理get返回结果的数据"""
        # 接受数据
        data = request.query_params.dict()
        print(data)
        # sign 不能参与签名验证
        signature = data.pop("sign")
        # print(json.dumps(data))
        # print(signature)
        alipay = AliPay(
            appid=settings.ALIPAY_APP_ID,
            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",  # 密码加密的算法
            debug=settings.ALIPAY_DEBUG  # 开发时属于调试模式,  默认False
        )

        # verify验证支付结果,布尔值
        success = alipay.verify(data, signature)

        if success:
            # 支付成功
            order = Order.objects.get(order_number=data.get("out_trade_no"))
            order.order_status = 1  # 修改订单状态
            order.pay_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            order.save()

            return Response(
                {
                    "length": order.order_course.count(),
                    "paytime": order.pay_time,
                    "price": order.total_price,
                    "info": order.order_desc,
                    'staus': 'OK',
                },
                status=status.HTTP_200_OK)

        return Response({"message": "订单没有变化"})
Ejemplo n.º 29
0
def save_order_payment_result():
    """保存订单支付结果"""
    alipay_dict = request.form.to_dict()

    # 对支付宝的数据进行分离  提取出支付宝的签名参数sign 和剩下的其他数据
    alipay_sign = alipay_dict.pop("sign")

    # 创建支付宝sdk的工具对象
    alipay_client = AliPay(
        appid="2016081600258081",
        app_notify_url=None,  # 默认回调url
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),  # 私钥
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/alipay_public_key.pem"),
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    # 借助工具验证参数的合法性
    # 如果确定参数是支付宝的,返回True,否则返回false
    result = alipay_client.verify(alipay_dict, alipay_sign)

    if result:
        # 修改数据库的订单状态信息
        order_id = alipay_dict.get("out_trade_no")
        trade_no = alipay_dict.get("trade_no")  # 支付宝的交易号
        try:
            Order.query.filter_by(id=order_id).update({
                "status": "WAIT_COMMENT",
                "trade_no": trade_no
            })
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()

    return jsonify(errno=RET.OK, errmsg="OK")
Ejemplo n.º 30
0
    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:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=user,
                                          pay_method=3,
                                          order_status=1)
        except OrderInfo.DoesNotExist:
            return JsonResponse({'res': 2, 'errmsg': '订单错误!'})

        alipay = AliPay(
            appid=settings.ALIPAY_APP_ID,
            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
        )
        total_pay = order.total_price + order.transit_price
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(total_pay),
            subject='天天生鲜%s' % order_id,
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string

        return JsonResponse({'res': 3, 'pay_url': pay_url})