接入支付宝沙箱支付

924 阅读2分钟

一、前提工作

进入支付宝开发平台

https://open.alipay.com/

登录进入控制台,找到下面的的开发工具推荐,进入沙箱

进入地址opendocs.alipay.com/common/02ki…

下载支付宝开放平台密钥工具(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请求,这里接受前端传递的参数,生成支付链接返回。

'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 生成支付请求,并通过支付宝网关处理支付,完成支付后接收并验证支付结果以更新订单状态

这里只做支付接口的调用,其余接口的调用可以对照官方的接口文档自行学习。