跳到主要内容

支付宝支付

简介

支付宝支付是蚂蚁集团旗下的第三方支付平台,为商户和用户提供安全、便捷的支付解决方案。支持电脑网站支付、手机网站支付、APP支付、当面付等多种支付方式。本文档主要介绍电脑网站支付的接入流程和代码实现。

电脑网站支付是在电脑上打开的网站中集成支付宝支付功能,买家使用电脑上网时,通过浏览器跳转到支付宝收银台完成付款。支付完成后会跳转回商户指定的页面。

参考资料

支付流程

关键代码实现

前端调用(JavaScript)

// 1. 引入支付宝JSSDK(可选,用于手机网站支付)
// 方式一:通过CDN引入
// <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script>

// 方式二:通过npm安装
// npm install @alipay/alipayjsapi
// import alipayjsapi from '@alipay/alipayjsapi'

// 2. 发起支付请求(电脑网站支付)
async function createAlipayOrder(orderData) {
const response = await fetch('/api/alipay/create-order', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(orderData)
});

const result = await response.json();

// 直接跳转到支付宝收银台
window.location.href = result.payUrl;
}

// 3. 手机网站支付示例(使用JSSDK)
function createMobileAlipayOrder(orderData) {
// 检测是否在支付宝客户端内
if (alipayjsapi.isAlipayClient()) {
// 在支付宝客户端内,可以使用JSAPI
alipayjsapi.ready(function(res) {
alipayjsapi.tradePay({
tradeNO: orderData.tradeNo, // 支付宝交易号
bizType: 'trade'
}, function(result) {
if (result.resultCode === '9000') {
console.log('支付成功');
}
});
});
} else {
// 不在支付宝客户端内,跳转到支付页面
window.location.href = result.payUrl;
}
}

后端实现

// 使用支付宝官方SDK
const AlipaySdk = require('alipay-sdk').default;
const AlipayFormData = require('alipay-sdk/lib/form').default;

class AlipayService {
constructor(config) {
this.alipaySdk = new AlipaySdk({
appId: config.appId,
privateKey: config.privateKey,
alipayPublicKey: config.alipayPublicKey,
gateway: config.gateway || 'https://openapi.alipay.com/gateway.do'
});
}

// 创建支付订单
async createPagePay(orderData) {
const formData = new AlipayFormData();
formData.setMethod('get');

formData.addField('bizContent', {
out_trade_no: orderData.outTradeNo,
product_code: 'FAST_INSTANT_TRADE_PAY',
total_amount: orderData.totalAmount,
subject: orderData.subject,
body: orderData.body
});

formData.addField('returnUrl', orderData.returnUrl);
formData.addField('notifyUrl', orderData.notifyUrl);

const result = await this.alipaySdk.exec('alipay.trade.page.pay', {}, {
formData: formData
});

return result;
}

// 验证回调签名
checkNotifySign(postData) {
return this.alipaySdk.checkNotifySign(postData);
}

// 查询订单状态
async queryOrder(outTradeNo) {
const result = await this.alipaySdk.exec('alipay.trade.query', {
bizContent: {
out_trade_no: outTradeNo
}
});

return result;
}
}

// 支付回调处理
app.post('/api/alipay/notify', (req, res) => {
const alipayService = new AlipayService(config);

if (alipayService.checkNotifySign(req.body)) {
const { out_trade_no, trade_status } = req.body;

if (trade_status === 'TRADE_SUCCESS') {
// 更新订单状态为已支付
updateOrderStatus(out_trade_no, 'paid');
}

res.send('success');
} else {
res.send('fail');
}
});

配置文件

{
"alipay": {
"appId": "your_app_id",
"privateKey": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----",
"alipayPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----",
"gateway": "https://openapi.alipay.com/gateway.do",
"returnUrl": "https://your-domain.com/pay/success",
"notifyUrl": "https://your-domain.com/api/alipay/notify"
}
}