要在 Java 多商户系统 中接入 PayPal,核心要解决两个点:
- 支付接入(订单收款)
- 多商户资金结算(PayPal 支持的分账或多商户账户体系)
下面我给你梳理一个完整方案:
一、PayPal 的多商户支持方式
- 普通收款(单商户) 使用一个统一的商户 PayPal 账号收款。 平台收到钱后再通过内部结算(提现、线下转账等)分给各个商户。 缺点:平台承担清算风险 & 税务压力。
- PayPal for Marketplaces(多商户/平台模式) PayPal 提供 Commerce Platform API(前称 Adaptive Payments,现已逐步升级)。 支持 分账(Split Payment)、子商户入驻、商户独立收款。 每个商户都需完成 KYC(实名认证/企业认证),PayPal API 会生成子商户账号。 交易时:买家付款 → PayPal 按照规则分账 → 平台与商户同时收钱。
二、Java 接入流程
假设你要做的是 平台 + 多商户入驻 模式:
1. 依赖与 SDK
PayPal 提供官方 Java SDK(支持 REST API)
com.paypal.sdk
rest-api-sdk
1.14.0
⚠️ 注意:PayPal 旧的 Java SDK 已停止维护,推荐直接走 REST API + 自己封装 或用社区 SDK。
2. 商户入驻(Onboarding)
- 平台通过 PayPal 提供的 Partner Referrals API 引导商户授权。
- 步骤: 平台调用 POST /v2/customer/partner-referrals 创建邀请链接。 商户点击 → 跳转 PayPal → 登录并授权给平台。 回调返回 merchant_id,保存到数据库。
示例请求(伪代码):
HttpPost post = new HttpPost("https://api-m.sandbox.paypal.com/v2/customer/partner-referrals");
post.setHeader("Authorization", "Bearer " + accessToken);
post.setEntity(new StringEntity(jsonBody, ContentType.APPLICATION_JSON));
HttpResponse response = client.execute(post);
3. 创建订单 & 支付
- 买家下单时,平台调用: POST /v2/checkout/orders 指定支付金额 指定收款方 payee.merchant_id 支持 payment_instruction 配置分账
示例 JSON:
{
"intent": "CAPTURE",
"purchase_units": [
{
"amount": {
"currency_code": "USD",
"value": "100.00"
},
"payee": {
"merchant_id": "MERCHANT_ID_OF_SELLER"
},
"payment_instruction": {
"platform_fees": [
{
"amount": {
"currency_code": "USD",
"value": "5.00"
}
}
]
}
}
],
"application_context": {
"return_url": "https://your-site.com/return",
"cancel_url": "https://your-site.com/cancel"
}
}
4. 用户支付 & 回调
- 返回 approve 链接给前端,买家跳转 PayPal 支付。
- 支付完成后,PayPal 回调 return_url。
- 平台调用 POST /v2/checkout/orders/{id}/capture 确认收款。
5. 资金结算
- 如果使用 普通模式:平台收款 → 内部清算。
- 如果使用 多商户模式:PayPal 自动将钱打到商户账户,同时分配平台佣金。
三、数据库设计要点
- merchant 表:保存每个入驻商户的 paypal_merchant_id、授权状态。
- order 表:保存 PayPal 订单号、支付状态、资金分账信息。
- settlement 表:记录商户收款/提现流水。
四、测试环境
- 注册 PayPal Sandbox
- 创建: 平台账号 子商户账号(sandbox buyer/seller)
- 在测试环境跑通后,再切换到 live API。
Java 多商户接入 PayPal 的示例代码骨架(含 Spring Boot + PayPal REST API 封装)