主要说的是 生成订单的一系列操作
生成订单号---确认支付---生成支付链接--支付流程
支付流程
---1.获取支付链接
1.1 三方接口,发送数据 ----1.2 返回数据解析(包含支付订单id)将链接也返回前端
----2.进行支付
2.1 扫码支付 2.2 支付成功后携带支付信息code 跳转到前段页面,将支付信息发给后端
----3.根据支付返回的信息进行查询
3.1 根据支付code码 通用的第三方接口,或者相关的支付信息(是否支付成功,支付时间,支付方式,支付金额)
3.2 主动查询 (如果没有跳转 可以根据订单的id来查询支付状态)
3.3 根据获取的支付详情,判断是否合法,然后再进行业务逻辑处理
支付宝的沙箱环境--支付宝开放平台
-
RSA2密钥生成文档:
-
公钥(给别人,方便其他人验证某个信息是否为自己发送) 和私钥(需要自己保存,对信息加密,不能泄露)
-
根据文档,生成一对密钥: 公钥和私钥,将 公钥 添加到 支付宝的 沙箱应用中
-
根据自己的APP公钥,生成的 支付宝公钥,需要 保存本地
-
支付宝接口: 不再自己写接口,而是 使用
python-alipay-sdk
工具去请求支付宝接口 -
pip install pyhton-alipay-sdk
需要将 生成的 私钥 和 根据自己的公钥生成的 支付宝公钥,保存到文件,放到项目中
- 支付宝公钥(
alipay_public_key.pem
)-----BEGIN PUBLIC KEY----- xxxx -----END PUBLIC KEY-----
2.自己的APP私钥 (app_private_key.pem
)
-----BEGIN RSA PRIVATE KEY-----
xxxx
-----END RSA PRIVATE KEY-----
支付接口
import os
from alipay import AliPay# 配置地址, 为了确定 公钥和私钥的 位置Django 是这写的 flask直接可以拉到下面
private_path = os.path.join(BASE_DIR, "key/app_private_key.pem")
public_path = os.path.join(BASE_DIR, "key/alipay_public_key.pem")# 获取公私钥字符串
app_private_key_string = open(private_path).read()
alipay_public_key_string = open(public_path).read()flask
app_private_key_string = open("lab_flask/pay/app_private_key.pem").read()
alipay_public_key_string = open("lab_flask/pay/alipay_public_key.pem").read()def get_alipay():"""生成支付宝的客户端"""alipay = AliPay(appid="2016092400585976", # 收款的商家支付宝的 appidapp_notify_url=None, # 默认回调urlapp_private_key_string=app_private_key_string,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥alipay_public_key_string=alipay_public_key_string,sign_type="RSA2", # 加密方式debug=True, # 上线则改为False , 沙箱True)return alipaydef get_alipay_url(order_id, order_amount, subject, return_url):"""根据订单信息,生成支付地址"""# 进行alipay初始化alipay = get_alipay()# 调用支付接口# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_stringorder_string = alipay.api_alipay_trade_page_pay(out_trade_no=order_id, # 订单id,需要支付的订单id eg:"%s" % order# 订单号 注意,标准的json格式没有 '' 单引号,只有 "" 双引号,python默认为 '' 单引号total_amount=str(order_amount), # 订单总金额subject=subject, # 付款标题信息return_url=return_url, # 付款成功回调地址(可以为空, 当前项目,应该回调到Vue页面)notify_url=None # 付款成功后异步通知地址(可以为空))# self._gateway = "https://openapi.alipaydev.com/gateway.do"pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_stringreturn pay_url # 将这个url复制到浏览器,就会打开支付宝支付页面