web项目和app中的支付宝接口使用

1.APP中支付宝接口的使用(Flask)

1.1准备工作

安装alipay的sdk,集成到flask项目中

pip install python-alipay-sdk --upgrade

切换到应用(如:users)目录下,新建keys文件保存应用的公私钥,以及支付宝的公钥

cd application/apps/users/
mkdir keys
cd keys
openssl
OpenSSL> genrsa -out app_private_key.pem   2048  # 私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
OpenSSL> exit

目录结构如下:
在这里插入图片描述
在支付宝开发者平台获取支付宝的公钥,并将应用的私钥保存到支付宝

在这里插入图片描述
把支付宝的配置参数在应用中进行相应的保存

# 支付宝配置信息
    ALIPAY_APP_ID = "2016091600523592"
    ALIPAY_SIGN_TYPE = "RSA2"
    ALIPAY_NOTIFY_URL = "https://example.com/notify"
    ALIPAY_SANDBOX = True   #测试时的沙箱环境,上线后要改为False

1.2业务流程

在这里插入图片描述
文字描述:
1.app端点击进行充值,选择充值金额,携带充值金额,向后端发起请求;
2.后端生成一个对应的订单号,并且生成一个状态为未支付的订单记录到数据表当中;创建支付宝的sdk对象,生成支付宝的order_string;将订单号Order_number和order_strin返回给前端;
3.app成功得到后台的响应拿到Order_string,通过支付宝模块对支付宝进行唤醒,进行支付;
4.支付宝将支付结果响应给app;
5.支付宝响应成功支付后,前端携带订单号去后端做同步通知,后端进行修改订单状态为已支付;同时支付宝访问后端的接口进行异步通知,校验支付状态;

创建支付宝sdk对象代码

# 创建支付宝sdk对象
app_private_key_string = open(
    os.path.join(current_app.BASE_DIR, "application/apps/users/keys/app_private_key.pem")).read()
alipay_public_key_string = open(
    os.path.join(current_app.BASE_DIR, "application/apps/users/keys/alipay_public_key.pem")).read()

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
order_string=alipay.api_alipay_trade_app_pay(
    out_trade_no=recharge.out_trade_number,  #订单号
    total_amount=float(recharge.money),  #订单金额
    subject=recharge.name,  # 订单标题
    notify_url=current_app.config.get("ALIPAY_NOTIFY_URL") # 服务端的地址,自定义一个视图函数给alipay
)

#异步通知的校验
data = request.form.to_dict()
# sign 不能参与签名验证
signature = data.pop("sign")
success = alipay.verify(data,signature)
if success 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()
    if recharge is None:
        return "fail"
    recharge.status=True
    user=User.query.get(recharge.user_id)
    if user is None:
        return "fail"
    user.money+=recharge.money
    db.session.commit()
    return "success" # 必须只能是success 

2.web项目中支付宝接口(Django)

2.1准备工作

安装alipay的sdk,集成到flask项目中

pip install python-alipay-sdk --upgrade

切换到应用(如:users)目录下,新建keys文件保存应用的公私钥,以及支付宝的公钥

cd application/apps/users/
mkdir keys
cd keys
openssl
OpenSSL> genrsa -out app_private_key.pem   2048  # 私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
OpenSSL> exit

目录结构如下:
在这里插入图片描述
在支付宝开发者平台获取支付宝的公钥,并将应用的私钥保存到支付宝

在这里插入图片描述
把支付宝的配置参数在应用中进行相应的保存

# 支付宝配置信息
ALIAPY_CONFIG = {
    # "gateway_url": "https://openapi.alipay.com/gateway.do?", # 真实支付宝网关地址
    "gateway_url": "https://openapi.alipaydev.com/gateway.do?",  # 沙箱支付宝网关地址
    "appid": "2016110100783773",  # 沙箱中那个应用id
    "app_notify_url": None,
    "app_private_key_path": os.path.join(BASE_DIR, "apps/payments/keys/app_private_key.pem"),

    "alipay_public_key_path": os.path.join(BASE_DIR, "apps/payments/keys/alipay_public_key.pem"),
    "sign_type": "RSA2",
    "debug": False,
    "return_url": "http://www.lfcity.com:8080/payment/result",  # 同步回调地址
    "notify_url": "http://www.lfapi.com:8001/payment/result",  # 异步结果通知
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值