Example #1
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.pem')
    alipay_public_key_path = os.path.join(settings.BASE_DIR,'order/app_public_key.pem')

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

    alipay = AliPay(
        appid='2016091500515408',
        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 = settings.ALIPAY_URL + '?' + order_string
    return JsonResponse({'res':3,'pay_url': pay_url,'message':'OK'})
Example #2
0
def AlipayViews(request):
    payorder_id = request.GET.get('payorder_id')
    payorder = PayOrder.objects.get(id=payorder_id)
    ## 实例化支付对象
    alipay = AliPay(
        appid='2016101300674021',
        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(
        subject='牛羊生鲜',  ## 交易主题
        out_trade_no=payorder.order_number,  ## 订单号
        total_amount=payorder.order_total,  ## 交易总金额
        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
    # print(result)
    return HttpResponseRedirect(result)
Example #3
0
def check_pay(request):
    passport_id = request.session.get('passport_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,
                                      passport_id=passport_id,
                                      pay_method=3)
    except OrderInfo.DoesNotExist:
        return JsonResponse({'res': 2, 'errmsg': '订单信息出错'})

    alipay = AliPay(
        appid='2016092300577139',
        app_notify_url=None,
        app_private_key_path=APP_PRIVATE_KEY_PATH,
        alipay_public_key_path=
        ALIPAY_PUBLIC_KEY_PATH,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        debug=True,  # 默认False,
        sign_type='RSA2')
    while True:
        result = alipay.api_alipay_trade_query(order_id)
        code = result.get('code')
        if code == '10000' and result.get('trade_status') == 'TRADE_SUCCESS':
            order.status = 2
            order.trade_id = result.get('trade_no')

            order.save()
            return JsonResponse({'res': 3, 'message': '支付成功'})
        elif code == '40004' or (code == '10000' and result.get('trade_status')
                                 == 'WAIT_BUYER_PAY'):
            time.sleep(5)
            continue
        else:
            return JsonResponse({'res': 4, 'errmsg': '支付出错'})
Example #4
0
def init_alipay_cfg():
    '''
    初始化alipay配置
    :return: alipay 对象
    '''
    alipay = AliPay(
        appid=APP_ID,
        # app_private_key_path="keys/app_private_2048.txt",
        # alipay_public_key_path="keys/alipay_public_2048.txt",
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False ,若开启则使用沙盒环境的支付宝公钥
    )
    return alipay
Example #5
0
    def get(self, request, order_id):
        # 1.根据order_id查询订单对象
        try:
            order = OrderInfo.objects.get(pk=order_id)
        except:
            raise Exception('订单编号无效')

        # 2.创建alipay对象
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,
            app_private_key_path=settings.ALIPAY_PRIVATE_KEY_PATH,
            alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,
            debug=settings.ALIPAY_DEBUG
        )
        # 3.调用方法生成url
        order_string = alipay.api_alipay_trade_page_pay(
            subject=settings.ALIPAY_SUBJECT,
            out_trade_no=order_id,  # 订单编号
            total_amount=str(order.total_amount),  # 支付总金额, 类型为Decimal(),不支持序列化,需要强转成str
            return_url=settings.ALIPAY_RETURN_URL  # 支付成功后的回调地址
        )
        # 4. 返回url
        return Response({'alipay_url': settings.ALIPAY_GATE + order_string})
Example #6
0
def alipay(request):
    # pdb.set_trace()
    order_id = request.GET.get("orderid")
    totalPrice = float(request.GET.get("totalPrice"))
    order = Order.objects.get(pk=order_id)
    order.o_status = ORDER_STATUS_NOT_SEND
    order.save()

    # 构建支付的客户端  AlipayClient
    alipay_client = AliPay(
        appid=APP_ID,
        app_notify_url=None,  # 默认回调url
        app_private_key_string=APP_PRIVATE_KEY,
        alipay_public_key_string=
        ALIPAY_PUBLIC_KEY,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        # alipay_public_key_path=os.path.join(BASE_DIR, 'alipay/app_private_key.pem'),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        # app_private_key_path=os.path.join(BASE_DIR, 'alipay/alipay_public_key.pem'),
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )
    # 使用Alipay进行支付请求的发起

    subject = "购买商品所需费用"

    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no=uuid.uuid4().hex,
        total_amount=totalPrice,
        subject=subject,
        # return_url="http://www.fand.wang/forgood/changestate/",
        return_url="http://127.0.0.1:8080/axf/mine/",
        # notify_url="http://www.fand.wang"  # 可选, 不填则使用默认notify url
    )
    # 客户端操作

    return redirect("https://openapi.alipaydev.com/gateway.do?" + order_string)
Example #7
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="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
    )

    # 手机网站支付,需要跳转到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})
Example #8
0
def pay(request):
    if request.method == 'POST':
        newOrder = Order()
        newOrder.number = datetime.now().strftime("%Y%m%d%H%M%S%f")
        newOrder.money = int(request.POST.get('summary')[0:-3])
        newOrder.create_time = datetime.now()
        newOrder.uid = request.user
        newOrder.receiver = request.POST.get('receiver')
        newOrder.address = request.POST.get('address')
        newOrder.mobile = request.POST.get('mobile')
        clist = ''
        idlist = request.POST.getlist('cid')
        for cid in idlist:
            c = cid + '/' + request.POST.get('quantity' + cid) + ','
            clist += c
        newOrder.clist = clist
        newOrder.save()

        alipay = AliPay(appid=ALI_APP_ID,
                        app_notify_url=None,
                        app_private_key_string=APP_PRIVATE_KEY,
                        alipay_public_key_string=ALIPAY_PUBLIC_KEY,
                        sign_type="RSA2",
                        debug=False)
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no="{}".format(newOrder.number),
            total_amount=newOrder.money,
            subject=newOrder.number,
            return_url="http://49.234.99.134/finish/?id=" + str(newOrder.id),
            notify_url="http://49.234.99.134/orders/",
        )
        net = "https://openapi.alipaydev.com/gateway.do?{}".format(
            order_string)
        return redirect(net)

    return redirect(reverse('app:index'))
    def put(self, request):
        query_dict = request.GET
        data = query_dict.dict()
        signature = data.pop('sign')

        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/app_public_key.pem'),
                        sign_type="RSA2",
                        debug=settings.ALIPAY_DEBUG)
        success = alipay.verify(data, signature)

        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['UNCOMMENT'])

            return JsonResponse({
                'code': 0,
                'errmsg': 'ok',
                'trade_id': trade_id
            })
        else:
            return JsonResponse({'code': 400, 'errmsg': '非法请求'})
Example #10
0
 def get(self, request, order_id):
     # 判断订单是否正确
     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 = 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.api_alipay_trade_page_pay(
         out_trade_no=order_id,  # 订单编号
         total_amount=str(order.total_amount + order.freight),
         subject="测试订单,美多商城%s" % order_id,
         return_url="http://www.meiduo.site:8080/pay_success.html",
         # notify_url="https://example.com/notify",  # 可选, 不填则使用默认notify url
     )
     # 返回alipay_url
     alipay_url = settings.ALIPAY_URL + '?' + order_string
     return Response({'alipay_url': alipay_url})
Example #11
0
    def put(self, request):
        # 接收参数,效验参数
        # 构造支付宝支付链接地址
        alipay_req_data = request.query_params
        if not alipay_req_data:
            return Response({"message": "缺啥参数"},
                            status=status.HTTP_400_BAD_REQUEST)
        alipay_req_dict = alipay_req_data.dict()
        sign = alipay_req_dict.pop("sign")

        alipay = AliPay(
            appid=dev.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=dev.ALIPAY_DEBUG  # 默认False
        )

        result = alipay.verify(alipay_req_dict, sign)
        # 保存数据,保存支付结果数据
        if result:
            order_id = alipay_req_dict.get("out_trade_no")
            trade_id = alipay_req_dict.get("trade_no")
            # 修改订单状态
            Payment.objects.create(order_id=order_id, trade_id=trade_id)
            OrderInfo.objects.filter(order_id=order_id).update(
                status=OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"])
            return Response({"trade_id": trade_id})
        else:
            return Response({"message": "参数有误"},
                            status=status.HTTP_400_BAD_REQUEST)
Example #12
0
def pay(request):
    money = request.GET.get('money')
    # 构建支付的客户端 AlipayClient
    alipay_client = AliPay(
        appid=ALIPAY_APPID,
        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
    )
    # 使用Alipay进行支付请求的发起
    subject = '停车费13'
    # 客户端操作
    no = str(int(time.time()))
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no=no,
        total_amount=money,
        subject=subject,
        return_url="http://127.0.0.1:8000/index",
        notify_url=""  # 可选, 不填则使用默认notify url
    )
    return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
Example #13
0
def alipayfun():
    # 构造支付请求
    app_private_key_string = open(os.path.join(settings.BASE_DIR, 'alipay_key/应用私钥2048.txt')).read()
    alipay_public_key_string = open(os.path.join(settings.BASE_DIR, 'alipay_key/alipay_public_key.txt')).read()
    # 初始化对象
    alipay = AliPay(
        appid="2016092400582448",
        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
    )
    return alipay
Example #14
0
def get_alipay():
    app_private_key_string = open(BASE_DIR +
                                  "/utils/app_private_key.pem").read()
    alipay_public_key_string = open(BASE_DIR +
                                    "/utils/app_public_key.pem").read()
    alipay = AliPay(
        appid="2016091500515408",
        app_notify_url=
        'http://127.0.0.1:8000/orders/pay_success/?order=9',  # 默认回调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
    )
    return alipay
Example #15
0
 def get_alipay():
     #初始化主支付对象
     app_private_key_string = open(
         settings.ALIAPY_CONFIG["app_private_key_path"]).read()
     alipay_public_key_string = open(
         settings.ALIAPY_CONFIG["alipay_public_key_path"]).read()
     alipay = AliPay(
         appid=settings.ALIAPY_CONFIG["appid"],
         app_notify_url=settings.ALIAPY_CONFIG["app_notify_url"],  # 默认回调url
         app_private_key_string=app_private_key_string,
         # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
         alipay_public_key_string=alipay_public_key_string,
         sign_type=settings.ALIAPY_CONFIG["sign_type"],
         debug=settings.ALIAPY_CONFIG["debug"]  # 默认False
     )
     return alipay
Example #16
0
def init_alipay_obj():
    """
    初始化alipay对象
    :return: alipay object
    """
    alipay = AliPay(
        appid= settings.ALIPAY_APPID,
        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/alipay_public_key.pem"),
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    return alipay
Example #17
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.DoseNotExist:
         return JsonResponse({'res': 2, 'errmsg': '订单错误'})
     #业务处理:使用python sdk调用支付宝的支付接口
     #初始化
     pay = AliPay(
         appid="2016080900462020",  #应用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
     )
     #调用支付接口
     #电脑网站支付,需要跳转到https://openapi.alipay.com/gatewa.do?+order_string
     total_pay = order.total_price + order.transit_price
     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})
Example #18
0
def create_alipay():
    """
    创建支付宝对象
    :return: 支付宝对象
    """
    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        # 回调地址
        app_notify_url=None,
        # 公钥路径
        alipay_public_key_path=settings.ALIPAY_PUBLIC_KEY_PATH,
        # 私钥路径
        app_private_key_path=settings.APP_PRIVATE_KEY_PATH,
        # 加密方式
        sign_type='RSA2',
        debug=True,
    )
    return alipay
Example #19
0
def createAlipay():
    # 创建对接支付宝接口的SDK对象
    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()
    alipay = AliPay(  # 传入公共参数(对接任何接口都要传递的)
        appid=settings.ALIPAY_APPID,  # 应用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",  # 加密标准
        debug=settings.ALIPAY_DEBUG  # 指定是否是开发环境
    )
    return alipay
Example #20
0
    def post(self, request):
        """创建alipay对象,调用支付接口"""
        # 获取订单id
        order_id = request.POST.get('order_id')

        # 校验订单id
        if not order_id:
            return JsonResponse({'code':2, 'message':'没有订单id'})

        # 获取订单信息:状态是待支付,支付方式是支付宝
        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 = settings.APP_PRIVATE_KEY_PATH,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_path = settings.ALIPAY_PUBLIC_KEY_PATH,
            sign_type = "RSA2",  # RSA 或者 RSA2
            debug = True  # 默认False 配合沙箱模式使用
        )

        # 电脑网站支付,需要跳转到https://openapi.alipaydev.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:让用户进入支付宝页面的支付网址
        url = settings.ALIPAY_URL + '?' + order_string

        # 响应结果
        return JsonResponse({'code':0, 'message':'支付成功', 'url':url})
Example #21
0
def order_pay():
    # 实例化Alipay,并加上alipay需要的一些参数
    alipay = AliPay(
        appid="2016090800465324",
        app_notify_url='http://39.106.96.112',
        app_private_key_path=app.config["app_private_key_path"],
        alipay_public_key_path=app.config["alipay_public_key_path"],
        sign_type="RSA2",
        debug=True,
    )

    # 加上订单的参数
    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context
    n = random.randint(0, 1000000)
    # create an order
    print(n)
    result = alipay.api_alipay_trade_precreate(
        subject="水杯",
        out_trade_no=str(n),
        total_amount=100,
        timeout_express="10m"
    )
    import qrcode
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(result["qr_code"])
    qr.make(fit=True)
    img = qr.make_image()
    img.save(str(n)+'.png')
    print(img)
    # check order status
    paid = False
    for i in range(10):
        # check every 3s, and 10 times in all
        print("now sleep 3s")
        time.sleep(5)
        result = alipay.api_alipay_trade_query(out_trade_no=str(n))
        if result.get("trade_status", "") == "TRADE_SUCCESS":
            paid = True
            print("success")
            break
        print("not paid...")

    # order is not paid in 30s , cancel this order
    if paid is False:
        alipay.api_alipay_trade_cancel(out_trade_no=str(n))
class MyAlipay(View):
    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)

    def get_trade_url(self, order_id, amount):
        # 步骤: 编写一个父类,在够在函数中,初始化一个alipay对象
        # 调用alipay的方法完成功能
        # 根据参数生成订单的查询字符串
        base_url = 'https://openapi.alipaydev.com/gateway.do'
        order_string = self.alipay.api_alipay_trade_page_pay(
            # 1 订单编号
            out_trade_no=order_id,
            # 2. 订单总金额
            total_amount=amount,
            # 3. 订单标题
            subject=order_id,
            # 4.用户支付完成后,告诉支付宝跳转到商家的哪个页面
            return_url=settings.ALIPAY_RETURN_URL,
            # 5。 支付结果通知的url
            notify_url=settings.ALIPAY_NOTIFY_URL,
        )

        return base_url + '?' + order_string
Example #23
0
def alipay_ini():
    with open(os.path.join(current_app.root_path,
                           'trade/app_private_key.pem')) as f:
        app_private_key_string = f.read()
    with open(
            os.path.join(current_app.root_path,
                         'trade/alipay_public_key.pem')) as f:
        alipay_public_key_string = f.read()
    alipay = AliPay(
        appid="2021001146618124",
        app_notify_url="http://sorapage.com/alipay/callback",
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",
        debug=False,  # 默认False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选, 请求超时时间
    )
    return alipay
Example #24
0
    def post(self, request):

        if not request.user.is_authenticated():
            return JsonResponse({'code': 1, 'message': '用户未登录'})
        order_id = request.POST.get('order_id')
        try:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=request.user)
        except OrderInfo.DoesNotExist:
            return JsonResponse({'code': 2, 'message': '无效订单'})
        if not order_id:
            return JsonResponse({'code': 3, 'message': '订单id不能为空'})
        # 调用 第三方sdk, 实现支付功能
        # (1) 初始化sdk
        from alipay import AliPay
        app_private_key_string = open("apps/orders/app_private_key.pem").read()
        alipay_public_key_string = open("apps/orders/alipay_public_key.pem").read()

        alipay = AliPay(
            appid="2016091000481374",  # 沙箱应用
            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  # 不要使用rsa
            debug=True  # 默认False  True: 表示使用测试环境(沙箱环境)
        )

        while True:
            result_dict = alipay.api_alipay_trade_query(out_trade_no=order_id)
            code = result_dict.get('code')
            trade_status = result_dict.get('trade_status')
            trade_no = result_dict.get('trade_no')
            if code == '10000' and trade_status == 'TRADE_SUCCESS':
                order.status = 4  # 待评价
                order.trade_no = trade_no
                order.save()  # 修改订单信息表
                return JsonResponse({'code': 0, 'message': '支付成功'})
            elif (code == '10000' and trade_status == 'WAIT_BUYER_PAY') or code == '40004':
                sleep(2)
                continue
            else:
                return JsonResponse({'code': 4, 'message': '支付失败'})
    def _init_ali_pay(self):
        path = os.path.abspath(os.path.dirname(__file__))
        private_file = open(settings.ALI_PAY_PRIVATE_KEY_PATH, "r")
        private_key = private_file.read()
        private_file.close()

        public_file = open(settings.ALI_PAY_PUBLIC_KEY_PATH, "r")
        public_key = public_file.read()
        public_file.close()

        debug = settings.DJANGO_IN_DOCKER_DEBUG is None
        appid = settings.ALI_PAY_APP_ID
        app_notify_url = settings.ALI_PAY_APP_NOTIFY_URL

        alipay = AliPay(appid=appid,
                        app_notify_url=app_notify_url,
                        app_private_key_string=private_key,
                        alipay_public_key_string=public_key,
                        debug=debug)
        return AliPayment(alipay)
Example #26
0
def ali():
    # 商户 app_id
    app_id = "2016101700708422"  # 复制来自支付宝生成的 id
    # 服务器异步通知页面路径 需 http: // 格式的完整路径,不能加?id = 123这类自定义参数,必须外网可以正常访问
    # 对于 PC 网站支付的交易,在用户支付完成之后,支付宝会根据 API 中商户传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统
    # 发 post 请求
    notify_url = "http://127.0.0.1:8000/order/page1/"
    return_url = "http://127.0.0.1:8000/order/return_pay/"
    merchant_private_key_path = "keys/pri"  # 设置公钥和私钥的地址,文件上下两行 begin 和 end 是必须的,公钥就放在第二行。
    alipay_public_key_path = "keys/pub"
    alipay = AliPay(
        appid=app_id,
        app_notify_url=notify_url,
        app_private_key_path=merchant_private_key_path,
        alipay_public_key_path=
        alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
        sign_type="RSA2",
        debug=True,  # 默认 False,
    )
    return alipay
Example #27
0
class MyAliPay(View):
    def __init__(self, **kwargs):
        # 首先调用父类的构造函数
        super().__init__(**kwargs)
        # 创建alipay对象
        self.alipay = AliPay(
            # 应用id
            appid=settings.ALIPAY_APPID,
            # 接受结果的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(app_private_key_string)
        print(alipay_public_key_string)

    def get_trade_url(self, order_id, amount):
        base_url = 'https://openapi.alipaydev.com/gateway.do'
        # 根据参数生成订单的查询字符串
        order_string = self.alipay.api_alipay_trade_page_pay(
            # 1 订单编号
            out_trade_no=order_id,
            # 2 订单总金额
            total_amount=amount,
            # 3 订单标题
            subject=order_id,
            # 4 用户支付完成后,告知支付宝跳转到商家的哪个页面
            return_url=settings.ALIPAY_RETURN_URL,
            # 5 支付结果通知的url
            notify_url=settings.ALIPAY_NOTIFY_URL,
        )
        print(base_url + '?' + order_string)
        return base_url + '?' + order_string
Example #28
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
Example #29
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
Example #30
0
def y_alipay():

    with open(
            os.path.join(settings.BASE_DIR,
                         'extends/alipay/web_private_key.txt').replace(
                             "\\", "/")) as f:
        app_private_key_string = f.read()

    with open(
            os.path.join(settings.BASE_DIR,
                         'extends/alipay/alipay_public_key.txt').replace(
                             "\\", "/")) as f:
        alipay_public_key_string = f.read()

    alipay = AliPay(
        appid=configs.APPID,
        app_notify_url=configs.APP_NOTIFY_URL,
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",
        debug=False,
    )
    return alipay
Example #31
0
# -- coding UTF-8 --
from alipay import AliPay
import qrcode  # 导入模块   
alipay = AliPay(
    appid=2017051207221985,
    app_notify_url=https91vps.club20170526freenom,
    app_private_key_path=app_private_key_path.txt,
    alipay_public_key_path=alipay_public_key_path.txt  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
)
# create an order
result = alipay.api_alipay_trade_precreate(
    subject=test subject,
    out_trade_no=out_trade_no,
    total_amount=10
)
img = qrcode.make(result['qr_code']) # QRCode信息  
img.save(test.png) # 保存图片