zoukankan      html  css  js  c++  java
  • Django项目订单接入支付宝

    1.首先下载所需要的包

    pip install python-alipay-sdk

    2.在视图函数里面引入所需要的类

    from alipay import AliPay

    3.利用这个类创建一个实例对象

    ali_pay = AliPay(
    appid=settings.ALIPAY_APPID,
    app_notify_url=None,//使用默认回调的地址
    //公钥的路径
    app_private_key_path=os.path.join(settings.BASE_DIR,'keys/pri'),
    //私钥的路径
    alipay_public_key_path=os.path.join(settings.BASE_DIR,'keys/pub'),
    //使用的加密方式
    sign_type='RSA2',
    //默认是False  测试环境配合沙箱环境使用   如果是生产环境 将其改为True
     debug=False)

    keys是本人建立在本项目目录下的文件夹
    那pri和pub的获取需要自己去获取
    首先要去蚂蚁金服开放平台,可以用支付宝进登录
    这里写图片描述
    点上面箭头所指进入下一级界面
    这里写图片描述
    这里写图片描述
    点击上图中的生成方法
    这里写图片描述
    下载对应版本的压缩包解压后运行
    在对应的文件下会生成两个对应的文件,在这key文件夹下建立两个文件,不设置后缀,一个用来存放公钥,一个用来存放私钥,把生成的公钥和私钥分别粘贴在这两个文件夹下
    粘贴的时候在文件的开头和结尾加入下列代码

    //私钥
    -----BEGIN RSA PRIVATE KEY-----
    -----END RSA PRIVATE KEY-----
    //公钥
    -----BEGIN PUBLIC KEY-----
    -----END PUBLIC KEY-----

    4.网站端的支付需要跳转到支付界面,进行支付

    order_string = ali_pay.api_alipay_trade_page_pay(
    //订单编号
    out_trade_no=order.o_id,
    //订单总额
    total_amount=total_price,
    //订单描述信息
    subject='天天生鲜购物订单-{}'.format(order.o_id),
    //回调地址,订单支付成功后回调的地址
    return_url='https://www.baidu.com',
            )

    5.拼接支付地址

    url = settings.ALIPAY_URL + '?' +order_string

    6.最后就是返回url地址

    7.监听订单状态是否支付
    是根据订单号检查订单是否被支付的,这个订单号的获取就需要自己想办法传到后台的
    当后台获取到订单号时

    alipay = AliPay(
    appid=settings.ALIPAY_APPID,
    app_notify_url=None,
    app_private_key_path=os.path.join(settings.BASE_DIR,'keys/pri'),            alipay_public_key_path=os.path.join(settings.BASE_DIR,'keys/pub'),
    sign_type='RSA2',
    //沙箱环境下没有查询订单服务的
    debug=True)
    while True:     
            response = alipay.api_alipay_trade_query(o_id)
            # code 40004 支付订单未创建
            # code 10000 trade_status  WAIT_BUYER_PAY  等待支付
            # oode 10000 trade_status  TRADE_SUCCESS  支付成功
            # response 是字典
            code = response.get('code')
            trade_status =response.get('trade_status')
            if code == '10000' and trade_status == 'TRADE_SUCCESS':
                    # 支付成功
                    order = OrderInfo.objects.get(id=o_id)
                    order.o_pay = True
                    order.save()
                    # 返回支付结果
                    return JsonResponse({
                        'status':1,
                        'msg':'支付成功'
                    })
            elif (code == '10000' and trade_status =='WAIT_BUYER_PAY') or code == '40004':
                    # 表示支付暂时没有完成
                    continue
            else:
                    return JsonResponse({
                        'status':0,
                        'msg':'支付失败'
                    })
  • 相关阅读:
    uni_app 跳转到外部html5 的页面 (web-view) 的一些使用
    vue初学备份(动态切换class类)
    MySQL数据库基本操作
    蛋疼的JavaScript(二)this
    Java中的String,StringBuffer和StringBuilder
    LintCode_1 单例模式
    [转载]C语言EOF是什么?
    Python中的枚举
    对BOM的总结
    python类相关总结(持续更新)
  • 原文地址:https://www.cnblogs.com/presleyren/p/10320632.html
Copyright © 2011-2022 走看看