作为全栈开发者,当你产品的第一个国际客户询问"能否用信用卡支付?"时,你知道是时候为你的SaaS项目集成跨境收款了。别担心,这并不需要数月之久。利用星析API 和你熟悉的Node.js ,我们可以在3小时内搭建一个健壮的生产级支付集成。
本教程将带你从零开始,完成从创建支付订单到安全接收支付通知的完整流程。
第一步:准备工作(15分钟)
-
注册星析账号:访问星析官网,注册商户账号并完成企业认证。
-
获取API密钥:在开发者后台,你将获得两个关键信息:
API_KEY:用于身份验证的密钥。WEBHOOK_SECRET:用于验证Webhook请求签名的密钥。
-
初始化Node.js项目:
bash
bashmkdir payment-integration && cd payment-integration npm init -y npm install express axios crypto
第二步:创建支付订单(核心代码,45分钟)
我们在服务端创建一个API端点,用于向星析发起支付请求。
代码片段:server.js
javascript
javascript
const express = require('express');
const axios = require('axios');
const crypto = require('crypto');
const app = express();
app.use(express.json());
const API_BASE_URL = 'https://api.starsee.io/v1'; // 星析API地址
const API_KEY = 'your_api_key_here'; // 替换为你的API_KEY
// 创建支付订单接口
app.post('/api/create-payment', async (req, res) => {
try {
const paymentPayload = {
amount: 1999, // 金额(单位:分,例如$19.99)
currency: 'USD', // 货币代码
order_id: `ORDER_${Date.now()}`, // 你的系统内唯一订单号
product_name: 'Pro Plan Subscription',
customer: {
email: 'customer@example.com',
name: 'John Doe'
},
success_url: 'https://yourapp.com/success', // 支付成功跳转地址
cancel_url: 'https://yourapp.com/cancel' // 支付取消跳转地址
};
// 调用星析API创建支付会话
const response = await axios.post(`${API_BASE_URL}/payment_links`, paymentPayload, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
}
});
// 返回支付链接给前端,引导用户跳转
res.json({
success: true,
payment_url: response.data.payment_url // 用户在此完成支付
});
} catch (error) {
// 错误处理最佳实践
console.error('Error creating payment:', error.response?.data || error.message);
// 根据星析API返回的错误码进行精细化处理
const statusCode = error.response?.status;
let userMessage = 'Payment system is temporarily unavailable.';
if (statusCode >= 400 && statusCode < 500) {
// 客户端错误:如参数错误、身份验证失败
userMessage = 'Invalid payment request. Please check your information.';
}
// 5xx错误我们已记录,返回通用错误信息
res.status(500).json({
success: false,
message: userMessage
});
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
前端调用示例(简单版):
前端只需调用你自己的 /api/create-payment 接口,然后跳转至返回的 payment_url 即可。
javascript
javascript
// 前端代码 (例如React组件)
async function handlePayment() {
try {
const response = await fetch('/api/create-payment', { method: 'POST' });
const data = await response.json();
if (data.success) {
// 跳转到星析支付页面
window.location.href = data.payment_url;
} else {
alert(data.message);
}
} catch (error) {
alert('Failed to initiate payment.');
}
}
第三步:处理Webhook(支付通知,60分钟)
用户支付成功后,星析会通过Webhook异步通知你的服务器。这是确保订单状态最终一致性的关键,比依赖前端回调更可靠。
代码片段:在server.js中添加
javascript
typescript
// 处理星析Webhook
app.post('/api/webhook/starsee', express.raw({type: 'application/json'}), (req, res) => {
const WEBHOOK_SECRET = 'your_webhook_secret_here'; // 替换为你的WEBHOOK_SECRET
const signature = req.headers['x-starsee-signature'];
const payload = req.body;
// **安全关键:验证Webhook请求来源**
const expectedSignature = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(payload)
.digest('hex');
if (signature !== expectedSignature) {
console.error('Invalid webhook signature.');
return res.status(401).send('Invalid signature');
}
// 签名验证通过,解析 payload
const event = JSON.parse(payload.toString());
// 处理不同的事件类型
switch (event.type) {
case 'payment.succeeded':
// 核心业务逻辑:支付成功
const { order_id, payment_id, amount } = event.data;
console.log(`Order ${order_id} (Payment: ${payment_id}) paid ${amount} successfully.`);
// TODO: 更新你数据库中的订单状态
// TODO: 发送确认邮件、开通服务权限等
break;
case 'payment.failed':
// 处理支付失败逻辑
console.log(`Payment for order ${event.data.order_id} failed.`);
break;
default:
console.log(`Unhandled event type: ${event.type}`);
}
// 成功处理,返回200状态码
res.status(200).json({ received: true });
});
Webhook配置指南:
- 在星析开发者后台,配置你的Webhook URL(例如
https://yourdomain.com/api/webhook/starsee)。 - 务必使用
express.raw中间件,因为我们需要原始的请求体来计算签名。 - 签名验证是必须的,否则可能会处理恶意伪造的请求。
- 处理逻辑中一定要做好幂等性处理,因为Webhook可能会重试发送。
第四步:测试与上线(60分钟)
- 使用测试模式:星析提供测试环境和模拟银行卡号,让你在不产生真实交易的情况下完成全流程测试。
- 测试各种场景:成功支付、支付失败、异常数据、Webhook重试等。
- 部署上线:将你的代码部署到服务器,并确保你的Webhook端点能被公网访问。
总结
至此,你已经成功地为你的SaaS项目接入了专业的跨境收款能力。我们回顾一下集成的核心:
- 一个服务端接口:用于创建支付。
- 一个Webhook处理器:用于异步接收支付结果。
- 完善的错误处理与安全验证:保障系统稳定与资金安全。
这套架构足以应对真实的业务场景。现在,你节省下了原本需要数月自研支付系统的时间,可以完全专注于你的核心产品逻辑了。
立即查看 星析官方Node.js SDK及文档,获取更多高级功能(如订阅支付、退款处理)的详细指南,加速你的业务全球化!