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