Exemple #1
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,
            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  # True表示沙箱环境
        )

        # 生成支付宝登录网页链接
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            subject="Project_%s" % order_id,
            return_url=settings.ALIPAY_RETURN_URL,  # 默认回调url
            app_notify_url=None,  # 默认为None,必须是公网上线的域名
        )

        # 响应登录支付链接
        # 真实环境电脑网站支付网关:https://openapi.alipay.com/gateway.do? + order_string
        # 沙箱环境电脑网站支付网关:https://openapi.alipaydev.com/gateway.do? + order_string
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return http.JsonResponse({
            'code': RETCODE.OK,
            'errmsg': 'OK',
            'alipay_url': alipay_url
        })
Exemple #2
0
    def get(self, request, order_id):
        """
        1.根据订单id查询订单
        2.创建alipay实例对象
        3.生成支付order_string
        4.返回支付url
        """
        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.HttpResponseBadRequest('订单信息错误')

        app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()
        alipay_public_key_string = open(settings.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=False  # 默认False
        )

        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            subject='测试订单',
            return_url=settings.ALIPAY_RETURN_URL,
        )

        pay_url = settings.ALIPAY_URL + '?' + order_string

        return http.JsonResponse({
            'alipay_url': pay_url,
            'code': RETCODE.OK,
            'errmsg': 'ok'
        })
    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('订单信息错误')

        # 使用python-alipay-sdk对接支付宝的支付接口、功能
        # 初始化对接支付宝的SDK实例
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,  # 应用ID
            app_notify_url=None,  # 默认回调url
            app_private_key_string=open(
                os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             'keys/app_private_key.pem')).read(),
            alipay_public_key_string=open(
                os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             'keys/alipay_public_key.pem')).read(),
            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  # 同步回调的地址(用来等待支付结果的)
        )

        # 拼接电脑网站支付收银台登录页面的地址,正式环境,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        # 拼接电脑网站支付收银台登录页面的地址,开发环境,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
        alipay_url = settings.ALIPAY_URL + '?' + order_string

        return http.JsonResponse({
            'code': RETCODE.OK,
            'errmsg': 'OK',
            'alipay_url': alipay_url
        })
Exemple #4
0
    def get(self, request, order_id):
        """生成支付宝支付url"""

        # 获取当前请求用户
        user = request.user

        # 1.校验订单

        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)

        # 2.创建支付宝对象
        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/alipy_public_key.pem'),
            sign_type='RSA2',
            debug=settings.ALIPAY_DEBUG)

        # 3.生成支付url后面的参数
        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',
        )

        # 4.拼接url + 参数
        alipay_url = settings.ALIPAY_URL + "?" + order_string

        # 5.响应支付url
        return Response({'alipay_url': alipay_url})
Exemple #5
0
def order_pay(request):
    '''
    订单支付
    orderId:订单ID
    '''
    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="2021000116676798",  # 沙箱环境里的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
    )

    # 如果你是 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.goods_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})
class MyAliPay(View):
    #自定义视图类的基类
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.alipay = AliPay(
            appid= settings.ALIPAY_APP_ID,
            app_notify_url=None,
            #应用私钥
            app_private_key_string= app_private_key_string,
            #支付宝公钥
            alipay_public_key_string= alipay_public_key_string,
            #指明签名算法
            sign_type="RSA2",
            #debug模式 会把请求发送至沙箱环境
            debug=True
        )

    def get_trade_url(self, order_id, amount):

        #pc网站支付地址  https://openapi.alipaydev.com/gateway.do? + querystring
        order_string = self.alipay.api_alipay_trade_page_pay(
            #订单号
            out_trade_no=order_id,
            #订单总金额
            total_amount= amount,
            subject=order_id,
            return_url=settings.ALIPAY_RETURN_URL,
            notify_url= settings.ALIPAY_NOTIFY_URL
        )

        return "https://openapi.alipaydev.com/gateway.do?" + order_string

    def get_verify_result(self, data, sign):
        #验签成功 返回 True   失败是 False
        return self.alipay.verify(data, sign)

    def get_trade_result(self, order_id):
        #查询支付结果
        result = self.alipay.api_alipay_trade_query(out_trade_no=order_id)
        print(result)
        if result.get("trade_status") == "TRADE_SUCCESS":
            return True
        return False
    def post(self, request, *args, **kwargs):

        order_id = request.data.get("order_id")
        pay_channel = request.data.get("pay_channel")
        order = CinemaMovieOrder.objects.get(pk=order_id)

        o_price = order.c_price

        order_id = "cinema_movie" + order_id

        if pay_channel == "alipay":

            subject = "电脑"

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

            order_string = alipay.api_alipay_trade_page_pay(
                out_trade_no=order_id,
                total_amount=o_price,
                subject=subject,
                return_url="http://localhost:8000/cinema/orderpayed/",
                notify_url=
                "http://localhost:8000/cinema/orderpayconfirm/"  # 可选, 不填则使用默认notify url
            )

            pay_info = "https://openapi.alipaydev.com/gateway.do?" + order_string

        elif pay_channel == "wechat":
            pay_info = "xxx"
        else:
            pay_info = "yyy"

        data = {"msg": "ok", "status": 200, "pay_url": pay_info}

        return Response(data)
Exemple #8
0
 def post(self, request):
     user = request.user
     if not user.is_authenticated():
         return JsonResponse({'res': 0, 'errmsg': '用户尚未登录!'})
     order_id = request.POST.get('orderId')
     if order_id is None:
         return JsonResponse({'res': 1, 'errmsg': '尚未选择需要支付的订单!'})
     try:
         order = OrderInfo.objects.get(
             order_id=order_id,
             user=user,
             order_status=1,  # 订单尚未支付
             pay_method=3  # 支付方式为支付宝
         )
     except OrderInfo.DoesNotExist:
         return JsonResponse({'res': 2, 'errmsg': '订单信息不合法!'})
     app_private_key_string = open(
         os.path.join(settings.BASE_DIR,
                      'apps/order/app_private_key.pem')).read()
     alipay_public_key_string = open(
         os.path.join(settings.BASE_DIR,
                      'apps/order/alipay_public_key.pem')).read()
     alipay = AliPay(
         appid="2016092700606291",
         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,沙箱环境应设为True
     )
     # 电脑网站支付,需要跳转到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_price + order.transit_price),
         subject='天天生鲜在线支付:' + order_id,
         return_url=None,
         notify_url=None  # 可选, 不填则使用默认notify url
     )
     # 返回应答
     pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
     return JsonResponse({'res': 'OK', 'pay_url': pay_url})
Exemple #9
0
    def get(self, request, order_id):
        user = request.user
        try:
            order_id = int(order_id)
            pay_for_order = OrderInfo.objects.get(
                order_id=order_id,
                user=user,
                pay_method=OrderInfo.PAY_METHODS_ENUM['ALIPAY'],
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except Exception:
            return Response({'error_message': '订单信息有误'},
                            status=status.HTTP_400_BAD_REQUEST)

        # 对目标order进行支付请求操作;
        total_payment = float(pay_for_order.total_amount +
                              pay_for_order.freight)

        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
        )

        subject = '美多商城'

        query_params = alipay.api_alipay_trade_page_pay(
            subject,
            order_id,
            total_payment,
            return_url="http://www.meiduo.site:8080/pay_success.html",
            notify_url=None)

        alipay_url = settings.ALIPAY_URL + '?' + query_params

        return Response({'alipay_url': alipay_url})
Exemple #10
0
def ali_buy(request):
    # order_no = "2019082102983"

    alipay = AliPay(
        appid=ALI_APP_ID,
        app_notify_url=None,  # 默认回调url
        app_private_key_string=APP_PRIVATE_KEY,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=ALIPAY_PUBLIC_KEY,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False  # 默认False
    )
    # trade_no = datetime.now().strftime("%Y%m%d%H%M%S%f")
    jine = int(
        sum([
            i.products.first().price * i.productnum
            for i in Order.objects.filter(order_status=1,
                                          user_id=request.user.uid)
        ])) - request.user.score / 10
    trade_no = Order.objects.filter(user_id=request.user.uid).first().id
    print(trade_no)
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=trade_no,  # 订单号
        total_amount=jine,  # 金额
        subject="macpro",  # 描述
        return_url="http://127.0.0.1:8000/app/",
        # notify_url="http://online.xiaohaitao.wang/callback/"  # 可选, 不填则使用默认notify url
    )
    print(request.POST.get('money'))

    # print(order_string)

    # 支付宝网关
    net = "https://openapi.alipaydev.com/gateway.do?"

    order = Order.objects.filter(user_id=request.user.uid)
    for i in order:
        print(11111)
        i.order_status = 2
        i.save()

    return redirect(net + order_string)
Exemple #11
0
    def get(self, request, order_id):
        '''
        发起支付
        :param request:
        :param order_id: 前端传来的订单id
        :return:
        '''
        user = request.user

        # 校验订单号
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=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_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, 沙箱环境
        )
        # 根据客户端调用接口,来生成交易的流水号, 3456789
        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",
        )
        # 拼接链接,返回给用户,让用户去登录
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return Response({'alipay_url': alipay_url})
Exemple #12
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"],
                pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"])
        except OrderInfo.DoesNotExist:
            return Response({"message": "订单信息有误"},
                            status=status.HTTP_400_BAD_REQUEST)

        # 向支付宝发送请求,获取支付链接参数
        alipay_client = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 阿里服务器post提交程序服务器告知支付信息
            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 or RSA2
            # True为沙箱环境
            debug=settings.ALIPAY_DEBUG  # False by default
        )

        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        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",  # 支付完成后回调网址
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 拼接支付链接网址
        alipay_url = settings.ALIPAY_URL + "?" + order_string

        return Response({"alipay_url": alipay_url})
Exemple #13
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_path = open(os.path.join(os.path.dirname(__file__), "key/app_private_key.pem")).read()  # 私钥
    alipay_public_key_path = open(os.path.join(os.path.dirname(__file__), "key/alipay_public_key.pem")).read()
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,

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

    # 手机网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
    # api_alipay_trade_wap_pay
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no=5,  # order.id,  # 订单编号
        total_amount=str(100 / 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})
Exemple #14
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 Exception as e:
            return JsonResponse({'code': 400, 'errmsg': 'order_id有误'})

        # 创建支付宝支付对象
        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,
        )

        # 响应登录支付宝连接
        # 真实环境电脑网站支付网关:https://openapi.alipay.com/gateway.do? + order_string
        # 沙箱环境电脑网站支付网关:https://openapi.alipaydev.com/gateway.do? + order_string
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return JsonResponse({
            'code': 0,
            'errmsg': 'OK',
            'alipay_url': alipay_url
        })
Exemple #15
0
    def post(self, request):
        if not request.user.is_authenticated():
            return JsonResponse({'res': 0, 'errmssg': '请先登录'})

        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=request.user,
                                  pay_method=3,
                                  order_status=1)
        except OrderInfo.DoesNotExist:
            return JsonResponse({'res': 2, 'errmsg': '订单错误'})
        # 初始化
        # 配置地址
        private_path = os.path.join(settings.BASE_DIR, 'order/app_private_key.pem')
        public_path = os.path.join(settings.BASE_DIR, 'order/alipay_public_key.pem')
        # 获取公私钥字符串
        app_private_key_string = open(private_path).read()
        alipay_public_key_string = open(public_path).read()

        alipay = AliPay(
            appid='2016101900720150',
            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
        )
        # 调用支付接口
        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
        )
        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
        return JsonResponse({'res': 3, 'pay_url': pay_url})
    def get(self, request):
        """获取支付宝的链接"""
        order_number = request.query_params.get('order_number')
        app_private_key_path = settings.ALIAPY_CONFIG['app_private_key_path']
        alipay_public_key_string = settings.ALIAPY_CONFIG['alipay_public_key_path']
        print(app_private_key_path)
        print(alipay_public_key_string)

        try:
            # 查询当前的订单是否存在
            order = Order.objects.get(order_number=order_number)
        except Order.DoesNotExist:
            return Response({'message': '对不起,当前的订单不存在'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        # 初始化支付宝所需的参数
        alipay = AliPay(
            appid=settings.ALIAPY_CONFIG['appid'],  # 沙箱应用的id
            app_notify_url=settings.ALIAPY_CONFIG['app_notify_url'],  # 默认回调url
            # 开发者私钥
            app_private_key_string=settings.ALIAPY_CONFIG['app_private_key_path'],
            # app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=settings.ALIAPY_CONFIG['alipay_public_key_path'],
            # alipay_public_key_string=alipay_public_key_string,
            sign_type=settings.ALIAPY_CONFIG['sign_type'],  # RSA 或者 RSA2
            debug=settings.ALIAPY_CONFIG['debug'],  # 默认False
        )

        # 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            # 支付宝所接受的订单号
            out_trade_no=order.order_number,
            # 总价
            total_amount=float(order.real_price),
            subject=order.order_title,
            return_url=settings.ALIAPY_CONFIG['return_url'],
            notify_url=settings.ALIAPY_CONFIG['notify_url'],  # 可选, 不填则使用默认notify url
        )

        url = settings.ALIAPY_CONFIG['gateway_url'] + order_string

        return Response(url)
Exemple #17
0
def order_pay(request):
    '''订单支付'''
    # 用户登录判断
    if not request.session.has_key('islogin'):
        return JsonResponse({'res': 0, 'errmsg': '用户未登录'})

    # 接收订单id
    order_id = request.POST.get('order_id')

    # 数据校验
    if not order_id:
        return JsonResponse({'res': 1, 'errmsg': '订单不存在'})

    try:
        order = OrderInfo.objects.get(order_id=order_id,
                                      status=1,
                                      pay_method=3)
    except OrderInfo.DoesNotExist:
        return JsonResponse({'res': 2, 'errmsg': '订单信息出错'})

    # 和支付宝进行交互
    alipay = AliPay(
        appid="2016090800464054",# 应用id
        app_notify_url=None,  # 默认回调url
        app_private_key_path=os.path.join(settings.BASE_DIR, 'order/app_private_key.pem'),
        alipay_public_key_path=os.path.join(settings.BASE_DIR, 'order/alipay_public_key.pem'),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True,  # 默认False
    )

    # 电脑网站支付,需要跳转到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 = settings.ALIPAY_URL + '?' + order_string
    return JsonResponse({'res': 3, 'pay_url': pay_url, 'message': 'OK'})
Exemple #18
0
    def get(self, request):
        """生成支付宝的支付链接地址"""
        # 获取订单号  有订单才可去支付
        order_number = request.query_params.get("order_number")
        print(order_number)

        # 查询订单是否存在
        try:
            order = Order.objects.get(order_number=order_number)
        except Order.DoesNotExist:
            return Response({"message": "对不起,您支付的订单不存在"},
                            status=status.HTTP_400_BAD_REQUEST)

        # 初始化支付宝参数
        alipay = AliPay(
            appid=settings.ALIAPY_CONFIG['appid'],  # 沙箱支付id
            app_notify_url=settings.
            ALIAPY_CONFIG["app_notify_url"],  # the default notify path
            # 应用私钥
            app_private_key_string=settings.
            ALIAPY_CONFIG['app_private_key_path'],
            # 支付宝公钥
            alipay_public_key_string=settings.
            ALIAPY_CONFIG['alipay_public_key_path'],
            sign_type=settings.ALIAPY_CONFIG['sign_type'],  # RSA or RSA2
            debug=settings.ALIAPY_CONFIG['debug'],  # False by default
        )

        # TODO 电脑网站支付,需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order.order_number,
            total_amount=float(order.real_price),
            subject=order.order_title,
            return_url=settings.ALIAPY_CONFIG['return_url'],
            notify_url=settings.
            ALIAPY_CONFIG['notify_url'],  # 可选, 不填则使用默认notify url
        )

        # 生成好的支付地址需要将order_string 与网关拼接起来才可以访问
        url = settings.ALIAPY_CONFIG['gateway_url'] + order_string

        return Response(url)
Exemple #19
0
    def get(self, request, order_id):

        # 1.校验参数 判断 order 是否存在
        user = request.user
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=user,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except Exception as e:
            return HttpResponseForbidden('订单不存在')

        # 2. 创建 alipay对象  链接支付宝
        from alipay import AliPay
        alipy = AliPay(appid=settings.ALIPAY_APPID,
                       app_notify_url=None,
                       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)

        # 3. 根据alipay对象, 加密参数
        order_string = alipy.api_alipay_trade_page_pay(
            subject="美多商城%s" % order_id,
            out_trade_no=order_id,
            total_amount=str(order.total_amount),
            return_url=settings.ALIPAY_RETURN_URL)

        # 4.拼接 支付宝的支付url 返回给前端
        # 真实环境电脑网站支付网关:https://openapi.alipay.com/gateway.do? + order_string
        # 沙箱环境电脑网站支付网关:https://openapi.alipaydev.com/gateway.do? + order_string
        alipay_url = settings.ALIPAY_URL + "?" + order_string

        return JsonResponse({
            'code': RETCODE.OK,
            'errmsg': 'OK',
            'alipay_url': alipay_url
        })
Exemple #20
0
    def get(self,request,order_id):
        # ①获取订单id
        try:
            # 为了让查询更准确
            order=OrderInfo.objects.get(order_id=order_id,
                                        user=request.user,
                                        status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except OrderInfo.DoesNotExist:
            return JsonResponse({'code':RETCODE.NODATAERR,'errmsg':'没有此订单'})
        # ②创建alipay实例对象
        from alipay import AliPay
        from meiduo_mall import settings
        #读取私钥和公钥
        app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()
        alipay_public_key_string = open(settings.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 = settings.ALIPAY_DEBUG  # 默认False
        )
        # ③调用电脑网站支付方法,生成order_string
        subject = "测试订单"

        # 线上 电脑网站支付,需要跳转到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=subject,
            return_url=settings.ALIPAY_RETURN_URL,
            #notify_url="https://example.com/notify"  # 可选, 不填则使用默认notify url
        )
        # ④拼接url
        alipay_url=settings.ALIPAY_URL + '?' + order_string
        # ⑤返回相应 支付的url
        return JsonResponse({'code':RETCODE.OK,'errmsg':'ok','alipay_url':alipay_url})
Exemple #21
0
    def get(self, request, order_id):

        # 1. 验证Order_id
        try:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=request.user,
                                          status=1)

        except Exception as e:
            return JsonResponse({"code": 400, "errmsg": 'order_id有误'})

        # 2. 调用Python-alipay-sdk工具类, 创建一个对象
        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)

        # 3. 调用对象的方法 ====> 拼接好的字符串
        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,
        )

        # 4. 把支付宝的网关(url) + 字符串 ====> 完整的url地址
        # 响应登录支付宝连接
        # 真实环境电脑网站支付网关:https://openapi.alipay.com/gateway.do? + order_string
        # 沙箱环境电脑网站支付网关:https://openapi.alipaydev.com/gateway.do? + order_string
        alipay_url = settings.ALIPAY_URL + "?" + order_string
        return JsonResponse({
            'code': 0,
            'errmsg': 'OK',
            'alipay_url': alipay_url
        })
Exemple #22
0
def order_pay(request):
    order_id = request.POST.get('order_id')

    if not order_id:
        return JsonResponse({'res': 1, 'errmsg': '订单不存在'})
    try:
        order = OrderInfo.objects.get(order_id=order_id,
                                      status=1,
                                      pay_method=3)
    except OrderInfo.DoesNotExist:
        return JsonResponse({'res': 2, 'errmsg': '订单信息出错'})

    app_private_key_path = os.path.join(settings.BASE_DIR,
                                        'order/app_private_key.txt')
    alipay_public_key_path = os.path.join(settings.BASE_DIR,
                                          'order/app_public_key.txt')

    app_private_key_string = open(app_private_key_path).read()
    alipay_public_key_string = open(alipay_public_key_path).read()

    alipay = AliPay(
        appid="2016092000554906",  # 应用id
        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
    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),  # Json传递,需要将浮点转换为字符串
        subject='尚硅谷书城%s' % order_id,
        return_url=None,
        notify_url=None  # 可选, 不填则使用默认notify url
    )
    # 返回应答
    pay_url = settings.ALIPAY_URL + '?' + order_string
    return JsonResponse({'res': 3, 'pay_url': pay_url, 'message': 'OK'})
Exemple #23
0
    def post(self, request):
        # 接收order_id
        order_id = request.POST.get('order_id')

        # 校验参数
        if not order_id:
            return JsonResponse({'code': 2, 'message': 'order_id错误'})

        # 查询:需要查询出订单信息,将来交给支付宝
        try:
            # id正确,user正确,待支付,支付方式是支付宝
            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 配合沙箱模式使用,沙箱模式写True
        )

        # 电脑网站支付,需要跳转到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='天天生鲜',
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 拼接访问支付宝的请求地址
        url = settings.ALIPAY_URL + '?' + order_string

        return JsonResponse({'code': 0, 'message': '支付成功', 'url': url})
Exemple #24
0
    def get(self, request, *args, **kwargs):
        order_number = request.query_params.get('order_number')

        # TODO 查询订单是否存在

        try:
            order = Order.objects.get(order_number=order_number)
        except Order.DoesNotExist:
            return Response({'message': '订单不存在'},
                            status=status.HTTP_400_BAD_REQUEST)

        # TODO 初始化支付宝参数
        alipay = AliPay(
            appid=settings.ALIPAY_CONFIG['appid'],  # 沙箱应用的id
            app_notify_url=settings.ALIPAY_CONFIG['app_notify_url'],  # 默认回调url
            # k开发者私钥
            app_private_key_string=settings.
            ALIPAY_CONFIG['app_private_key_path'],
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=settings.
            ALIPAY_CONFIG['alipay_public_key_path'],
            sign_type=settings.ALIPAY_CONFIG['sign_type'],  # RSA 或者 RSA2
            debug=settings.ALIPAY_CONFIG['debug'],  # 默认False
        )

        # TODO 电脑网站支付 alipay.trade.page.pay
        # 这是订单信息.
        order_string = alipay.api_alipay_trade_page_pay(
            # 支付宝所接受的订单号
            out_trade_no=order.order_number,
            # 总价
            total_amount=float(order.real_price),
            subject=order.order_title,
            return_url=settings.ALIPAY_CONFIG['return_url'],
            notify_url=settings.
            ALIPAY_CONFIG['notify_url'],  # 可选, 不填则使用默认notify url
        )

        # TODO 生成订单信息 需要将订单信息(order_string)和网关(沙箱地址)拼接
        url = settings.ALIPAY_CONFIG['gateway_url'] + order_string

        return Response(url)
Exemple #25
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'],
                pay_method=OrderInfo.PAY_METHODS_ENUM['ALIPAY'])
        except OrderInfo.DoesNotExist:
            return Response({'message': '订单信息有误'},
                            status=status.HTTP_400_BAD_REQUEST)

        # 向支付宝发起请求,获取支付链接参数
        alipay_client = 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  是否是沙箱环境
        )

        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        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",
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 拼接支付链接网址
        alipay_url = settings.ALIPAY_URL + '?' + order_string

        # 返回
        return Response({'alipay_url': alipay_url})
Exemple #26
0
    def get(self, request, order_id):
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=request.user,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except:
            return JsonResponse({"code": 5555, "errmsg": "订单不存在"})

        from alipay import AliPay

        app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()
        alipay_public_key_string = open(settings.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=settings.ALIPAY_DEBUG  # 默认False
        )
        # 如果你是 Python 3的用户,使用默认的字符串即可
        subject = "测试订单"

        # 电脑网站支付,需要跳转到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=subject,
            return_url=settings.ALIPAY_RETURN_URL,
            # notify_url="https://example.com/notify"  # 可选, 不填则使用默认notify url
        )

        alipay_url = settings.ALIPAY_URL + '?' + order_string

        return JsonResponse({
            "code": 0,
            "errmsg": "ok",
            "alipay_url": alipay_url
        })
Exemple #27
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 as e:
            return JsonResponse({'res': 2, 'errmsg': '订单错误'})

        # 调用支付宝接口
        alipay = AliPay(appid="2016101400683195",
                        app_notify_url=None,
                        app_private_key_string=open(
                            'apps/order/app_private_key.pem').read(),
                        alipay_public_key_string=open(
                            'apps/order/alipay_public_key.pem').read(),
                        sign_type="RSA2",
                        debug=True)

        # 电脑网站支付 需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        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="https://example.com",
            notify_url="https://example.com/notify")

        # 返回应答,引导html页面跳转去接受支付的页面
        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
        return JsonResponse({'res': 3, 'pay_url': pay_url})
Exemple #28
0
def ali_pay(request):
    order_num = request.GET.get('order_num')
    total_fee = request.GET.get('total_fee')
    subject = request.GET.get('subject')
    # 实例化支付
    ali_pay = AliPay(appid="2016101200667842",
                     app_notify_url=None,
                     alipay_public_key_string=ALIPAY_PUBLIC,
                     app_private_key_string=APP_PRIVATE,
                     sign_type="RSA2")

    # 实例化订单
    order_string = ali_pay.api_alipay_trade_page_pay(
        out_trade_no=order_num,
        total_amount=str(total_fee),
        subject=subject,
        return_url='http://127.0.0.1:8000/buyer/payinfo/',
        notify_url=None)
    ret = ALIPAY_URL + '?' + order_string
    return redirect(ret)
Exemple #29
0
def AliPayViews(request):
    alipay_id = request.GET.get("alipay_id")
    order_total_price = request.GET.get("order_total_price")
    #实例化支付
    alipay = AliPay(appid="2016101200667752",
                    app_notify_url=None,
                    app_private_key_string=alipay_private_key_string,
                    alipay_public_key_string=alipay_public_key_string,
                    sign_type="RSA2")
    # 实例化订单
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=alipay_id,
        total_amount=str(order_total_price),
        subject="商品交易",
        return_url='http://10.10.14.182/shop/pay_result/',
        notify_url='http://10.10.14.182/shop/pay_result/')  #网页支付订单

    #拼接收款地址 = 支付宝网关 + 订单返回参数
    result = "https://openapi.alipaydev.com/gateway.do?" + order_string
    return HttpResponseRedirect(result)
Exemple #30
0
def AlipayViews(request):
    order_number = request.GET.get("order_number")
    order_total = request.GET.get("total")
    #实例化支付
    alipay = AliPay(appid="2016101200667858",
                    app_notify_url=None,
                    app_private_key_string=alipay_private_key_string,
                    alipay_public_key_string=alipay_public_key_string,
                    sign_type="RSA2")
    #订单实例化
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_number,
        total_amount=str(order_total),
        subject="中公教育",
        return_url="http://127.0.0.1:8000/Buyer/payresult/",  #结果返回的地址
        notify_url="http://127.0.0.1:8000/Buyer/payresult/"  #订单状态发生改变后返回的地址
    )  #网页支付订单
    #拼接收款地址 = 支付宝网关 + 订单返回参数
    result = "https://openapi.alipaydev.com/gateway.do?" + order_string
    return HttpResponseRedirect(result)