PayPal 配置
如何将 PayPal 作为 Stripe 之外的替代支付方式,服务偏好钱包支付的客户。
为什么
一部分客户 — 尤其德国、意大利和年长群体 — 拒绝在新站点输入卡号,只用 PayPal 支付。消费 SaaS 的 A/B 测试一致显示,PayPal 与卡并列时结账完成率提升 5-15%。PayPal 还内部处理买家保护纠纷,降低你卡侧的拒付量。代价是更高费率(美国 3.49% + $0.49 vs Stripe 2.9% + $0.30)和要维护第二套集成,所以这是地理和人群决策,非通用 。B2B SaaS 提升接近零;消费产品常是达标与否的分水岭。
何时使用
当你的受众偏消费类,或在 DACH/EU 等 PayPal 高渗透市场销售。纯 B2B 美国 SaaS 不值得。
如何做
1. 创建 PayPal Business 账号(非 Personal — Personal 不能收卡资金 PayPal 支付)
2. 在 PayPal Developer Dashboard 创建 REST app,获取 sandbox 和 live 的 client_id 与 client_secret
3. 安装 @paypal/checkout-server-sdk,或直接用 fetch 调新版 Orders v2 API
4. 在定价页用 @paypal/react-paypal-js 包装器,在 Stripe 按钮旁渲染 PayPal 按钮
5. 点击后服务端创建订单:POST /v2/checkout/orders,intent=CAPTURE,含 purchase_units amount
6. PayPal onApprove 后服务端捕获订单:POST /v2/checkout/orders/{id}/capture
7. 存 paypal_order_id 和捕获状态;订阅用 PayPal Subscriptions API 配 billing plan + product
8. 设 webhook 监听 PAYMENT.CAPTURE.COMPLETED 和 BILLING.SUBSCRIPTION.CANCELLED 同步权益
9. 在 sandbox 用测试账号测试,然后在 feature flag 后切到 live 凭证示例
// 客户端:渲染 PayPal 按钮
import { PayPalScriptProvider, PayPalButtons } from "@paypal/react-paypal-js";
<PayPalScriptProvider options={{ clientId: import.meta.env.VITE_PAYPAL_CLIENT_ID }}>
<PayPalButtons
createOrder={async () => {
const res = await fetch("/api/paypal/create-order", { method: "POST" });
const { id } = await res.json();
return id;
}}
onApprove={async (data) => {
await fetch("/api/paypal/capture-order", {
method: "POST",
body: JSON.stringify({ orderID: data.orderID }),
});
}}
/>
</PayPalScriptProvider>
// 服务端:捕获
const res = await fetch(`https://api-m.paypal.com/v2/checkout/orders/${orderID}/capture`, {
method: "POST",
headers: { Authorization: `Basic ${Buffer.from(clientId + ":" + secret).toString("base64")}` },
});
const capture = await res.json();
if (capture.status === "COMPLETED") await grantEntitlement(userId);常见问题
- ⚠用 Personal PayPal 账号 — 不能收卡资金 PayPal 支付,一半买家收到"此收款方无法接受此支付类型"错误。升级到 Business。
- ⚠客户端而非服务端捕获订单 — 客户端可被篡改改金额。始终在服务端创建和捕获;客户端只传 order id。
- ⚠不处理货币转换 — PayPal 用自有汇率比中间价差 2-4%,99 美元用欧元收可能显示 103 美元。显式用买家货币设金额。
最佳实践
- ✓仅在高渗透地区(DACH、意大利、西班牙)展示 PayPal — 给美国 B2B 买家看只增杂乱无转化提升。
- ✓每次 API 调用记录 PayPal correlation_id — 这是 PayPal 客服查交易唯一需要的键,记在日志里把支持解决时间从天降到分钟。
- ✓Stripe 为主、PayPal 为辅按钮 — PayPal 订阅管理较弱,新订阅默认走 Stripe,PayPal 留给一次性或消费支付。