要在 Java 多商戶系統(tǒng) 中接入 PayPal,核心要解決兩個點:
- 支付接入(訂單收款)
- 多商戶資金結(jié)算(PayPal 支持的分賬或多商戶賬戶體系)
下面我給你梳理一個完整方案:
一、PayPal 的多商戶支持方式
- 普通收款(單商戶) 使用一個統(tǒng)一的商戶 PayPal 賬號收款。 平臺收到錢后再通過內(nèi)部結(jié)算(提現(xiàn)、線下轉(zhuǎn)賬等)分給各個商戶。 缺點:平臺承擔(dān)清算風(fēng)險 & 稅務(wù)壓力。
- PayPal for Marketplaces(多商戶/平臺模式) PayPal 提供 Commerce Platform API(前稱 Adaptive Payments,現(xiàn)已逐步升級)。 支持 分賬(Split Payment)、子商戶入駐、商戶獨立收款。 每個商戶都需完成 KYC(實名認證/企業(yè)認證),PayPal API 會生成子商戶賬號。 交易時:買家付款 → PayPal 按照規(guī)則分賬 → 平臺與商戶同時收錢。
二、Java 接入流程
假設(shè)你要做的是 平臺 + 多商戶入駐 模式:
1. 依賴與 SDK
PayPal 提供官方 Java SDK(支持 REST API)
com.paypal.sdk
rest-api-sdk
1.14.0
?? 注意:PayPal 舊的 Java SDK 已停止維護,推薦直接走 REST API + 自己封裝 或用社區(qū) SDK。
2. 商戶入駐(Onboarding)
- 平臺通過 PayPal 提供的 Partner Referrals API 引導(dǎo)商戶授權(quán)。
- 步驟: 平臺調(diào)用 POST /v2/customer/partner-referrals 創(chuàng)建邀請鏈接。 商戶點擊 → 跳轉(zhuǎn) PayPal → 登錄并授權(quán)給平臺。 回調(diào)返回 merchant_id,保存到數(shù)據(jù)庫。
示例請求(偽代碼):
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. 創(chuàng)建訂單 & 支付
- 買家下單時,平臺調(diào)用: 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. 用戶支付 & 回調(diào)
- 返回 approve 鏈接給前端,買家跳轉(zhuǎn) PayPal 支付。
- 支付完成后,PayPal 回調(diào) return_url。
- 平臺調(diào)用 POST /v2/checkout/orders/{id}/capture 確認收款。
5. 資金結(jié)算
- 如果使用 普通模式:平臺收款 → 內(nèi)部清算。
- 如果使用 多商戶模式:PayPal 自動將錢打到商戶賬戶,同時分配平臺傭金。
三、數(shù)據(jù)庫設(shè)計要點
- merchant 表:保存每個入駐商戶的 paypal_merchant_id、授權(quán)狀態(tài)。
- order 表:保存 PayPal 訂單號、支付狀態(tài)、資金分賬信息。
- settlement 表:記錄商戶收款/提現(xiàn)流水。
四、測試環(huán)境
- 注冊 PayPal Sandbox
- 創(chuàng)建: 平臺賬號 子商戶賬號(sandbox buyer/seller)
- 在測試環(huán)境跑通后,再切換到 live API。
Java 多商戶接入 PayPal 的示例代碼骨架(含 Spring Boot + PayPal REST API 封裝)