一、前提工作
登录进入控制台,找到下面的的开发工具推荐,进入沙箱
支付宝开放平台密钥工具下载地址
下载支付宝开放平台密钥工具(Windows、Macos版本)
根据下载的根据生成RSA2密钥
回到控制台的沙箱应用–>网页/移动应用–>开发信息。选择自定义密钥,设置公钥模式。
至此,准备工作已全部完成。
二、编写后端代码
1、模块安装
在支付宝开放平台中,推荐使用alipay-sdk-python
,但是这个模块很难用
我推荐使用alipay-sdk-python
模块,相对来说,使用体验更好,后面的代码全部使用alipay-sdk-python
模块。
pip install alipay-sdk-python
2、后端代码
这里的后端代码使用Tornado框架来实现。就一个post请求,很简单。
创建公钥和私钥文件
注意格式,以及不要换行
#/public_key
-----BEGIN PUBLIC KEY-----
这里的公钥是支付宝公钥
-----END PUBLIC KEY-----
#/private_key
-----BEGIN PUBLIC KEY-----
这里的私钥是密钥工具生成的密钥
-----END PUBLIC KEY-----
编写AliPay
对象,用于生成支付链接,注意这里的appid是沙箱控制台的Appid
def alipay_obj(self):
alipay = AliPay(
appid="9021000137696045",
app_notify_url=None,
app_private_key_string=open("private.txt").read(),
alipay_public_key_string=open("public.txt").read(),
sign_type='RSA2',
debug=False,
verbose=False
)
return alipay
编写POST请求,这里接受前端传递的参数,生成支付链接返回。
'https://openapi-sandbox.dl.alipaydev.com/gateway.do’这个就是沙箱控制台的支付宝网关地址。
async def post(self):
price = self.get_argument('price')
title = self.get_argument('title')
alipay = self.alipay_obj()
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=str(uuid.uuid4()),
total_amount=price,
subject=title,
return_url=None,
notify_url=None
)
url = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do' + '?' + order_string
print(id, price, title)
self.write({"status": 1, "url": url})
三、编写前段代码
这里的前端代码就是一个简单的页面HTML。点击购买后发起POST请求,获取服务端的响应。请求成功后跳转到支付页面。
<script>
function buyProduct(id, name, price) {
const formData = new FormData();
formData.append('id', id);
formData.append('title', name);
formData.append('price', price);
fetch('http://127.0.0.1:8888/create', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.status === 1) {
alert('购买成功');
window.location.href = data.url;
} else {
alert('购买失败');
}
})
.catch(error => {
console.error('Error:', error);
alert('购买过程中发生错误');
});
}
</script>
四、效果演示
进入沙箱控制台–>沙箱账号,查看买家账号和密码,也可以查看商家账号和密码以及余额变化。
五、总结
支付宝的支付接口接入通过配置应用 ID 和密钥,使用 SDK 生成支付请求,并通过支付宝网关处理支付,完成支付后接收并验证支付结果以更新订单状态。
这里只做支付接口的调用,其余接口的调用可以对照官方的接口文档自行学习。