zoukankan      html  css  js  c++  java
  • alipay接入步骤

    沙箱环境

    https://openhome.alipay.com/platform/appDaily.htm?tab=info
    

      

    使用

    1,配置支付宝公钥到应用
    2,配置应用公钥到支付宝
    pip install python-alipay-sdk --upgrade # 安装SDK
    OpenSSL> genrsa -out app_private_key.pem 2048 # 私钥
    OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 公钥
    

    生成订单

    order_number = datetime.now().strftime("%y%m%d%H%M%S") + "%08d" % user.id + "%04d" % random.randint(0, 9999)
    

      


    根据参数信息实例化支付对象

    alipay = AliPay(
    appid= current_app.config.get("ALIPAY_APP_ID"),
    app_notify_url=None, # 默认回调url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    sign_type=current_app.config.get("ALIPAY_SIGN_TYPE"),
    debug = False, # 默认False
    config = AliPayConfig(timeout=15) # 可选, 请求超时时间
    )
    

      


    生成支付订单

    order_string = alipay.api_alipay_trade_app_pay(
    out_trade_no=recharge_obj.out_trade_number, # 订单号
    total_amount=float(recharge_obj.money), # 订单金额
    subject=recharge_obj.name, # 订单标题
    # 服务端的地址,自定义一个视图函数给alipay "https://example.com/notify"
    notify_url=current_app.config.get("ALIPAY_NOTIFY_URL") 
    )
    # 返回 order_string给前端去发起支付请求
    

      

    处理支付结果

    # 同步处理支付结果(前端)
    """
    支付宝会给前端支付结果,然后前端告知后端结果!,同时后端也可以去支付宝查询订单之类的操作
    """
    

      

    # 异步处理支付结果(支付宝-POST请求)
    data = request.form.to_dict() # 接收支付结果的异步通知数据
    # sign 不能参与签名验证
    signature = data.pop("sign")
    # 根据参数信息实例化支付对象
    alipay = AliPay(
    appid= current_app.config.get("ALIPAY_APP_ID"),
    app_notify_url=None, # 默认回调url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    sign_type=current_app.config.get("ALIPAY_SIGN_TYPE"),
    debug = False, # 默认False
    config = AliPayConfig(timeout=15) # 可选, 请求超时时间
    )
    # 检测通知数据
    res = alipay.verify(data, signature)
    if res and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED" ):
    """充值成功"""
    # 保存数据
    out_trade_number = data["out_trade_no"]
    recharge = Recharge.query.filter(Recharge.out_trade_number==out_trade_number).first()
    recharge.is_pay = True
    user = User.query.get(recharge.user_id)
    user.money += recharge.money
    db.session.commit()
    return "success" # 必须只能是success
    else:
    return "fail" # 交易失败
    

      



  • 相关阅读:
    php -- 魔术方法 之 对象输出 : __toString()
    php -- each()、list()
    php -- 魔术方法、魔术常量 简单介绍
    webbench
    md5sum/opensll md5
    shopt
    MD5
    print显示特定的数据格式
    gdb调试4--回退
    字符串化#、拼接字符##和可变参数宏(...和_ _VA_ARGS_ _)
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/14209880.html
Copyright © 2011-2022 走看看