什么場景下會用到合單支付呢?下面舉個例子:最常見的就是商城系統了,比如用戶在一筆訂單里面選擇了多個不同商戶的商品, 為了用戶體驗,在支付的時候肯定是只需要支付一次即可的;如果我們使用傳統的方式即實際后就是一筆訂單,直接支付下單即可,這里確實簡單了,但是我們在給商戶做結算的時候就麻煩了,需要后台去統計相關的財務信息然后再打款給商戶;但是如果不想去做這樣復制的結算步驟,或者是可能剛開始我們的平台名氣小,商戶想自己管理資金才放心,想自己看到相關的支付賬單信息; 或者是不想再去做一套結算功能和打款流程。
此時我們就可以采用 微信的電商收付通 和 支付寶互聯網平台直付通產品;它們都提供了多筆訂單一起支付,最后金額自動分配的商家的賬戶上、賬單資金凍結、結算、平台抽成的功能。
下面來談談在與它們對接的相關注意事項吧。
相關接口文檔
關於二級商戶進件
打開接口文檔微信和支付的進件需要的資料都是一大坨,一看就是感覺很麻煩!在對接的時候不要管那么多,先用需要資料最少最簡單的參數進件成功一個再說(快速理清認證流程和需要的相關資料),同時也方便其他對接支付的同學可以調試后面的支付和結算相關接口(不然后面就會卡住,很多問題不能提前發現);同時雖然資料很多但是微信和支付那邊的審核是很快(幾乎秒出結果),所以如果進件后審核狀態一直不變,那么很大的概率是你的代碼問題。
微信的電商收付通二級商戶進件說明
進件的相關參數直接看官方文檔即可,需要說明的是在進件的通過后,會返回一個認證的鏈接的二維碼,需要商戶去掃碼確認,同時銀行卡認證微信需要打款確認。
支付寶的互聯網平台直付通二級商戶進件說明
- 默認結算規則必須傳入(雖然不傳入也是可以成功的),否則后面進行支付下單的時候會失敗;
- 雖然文檔中寫了結算賬號可以是銀行卡,但是實際是不支持,只支持支付寶賬號;
- 進件接口請求成功后,在支付寶中登陸設置的結算賬號的支付寶賬號,然后搜索 '簽約助手' 進入里面簽約;具體的流程圖
- 在進件商戶簽約成功后(也就是上面一步的操作完成后),支付寶會回調通知我們(通知地址需要在支付寶開發者中配置);
- 注意選擇使用的支付寶SDK
alipay-sdk-java
的包最好用最新的;因為舊的版本創建進件的接口中自帶的AntMerchantExpandIndirectZftCreateModel
轉換json轉換不出sites
,導致進件請求失敗。
關於支付接口
微信的合單支付說明
- 生成的合單訂單號在后面查詢訂單的時候是需要的,不能通過子單號進行查詢;但是在退款、分賬操作的時候使用的是子單的訂單號。
- 支付成功回調通知說明:支付成功后會將支付信息返回,其結構類似如下:
{
"combine_out_trade_no": "合單訂單號",
"sub_orders": [
{
"out_trade_no": "子單訂單號",
"transaction_id": "子單交易訂單號",
...
},
{
"out_trade_no": "子單訂單號",
"transaction_id": "子單交易訂單號",
...
}
...
],
...
}
- 其他的流程和操作和普通的支付是一樣的;退款的時候合單支付有專門的接口進行,同時合單支付使用的是新版本接口;
- 注意H5和微信公眾號的jsapi支付需要在微信后台配置的安全域名,直接配置域名根目錄即可(如:https://www.baidu.com/),否則將無法成功喚起支付(提示當前URL未注冊);同時需要注意微信是會區分http和https的,不要用特殊字符。
支付寶的合單支付接口說明
- 生成的合單訂單號就只在預下單的時候有用,后面都不會用了;
- 支付成功回調通知說明:雖然是合單支付的,但是支付寶的通知還是一筆筆的分開通知,即有多少個子單就有多少個通知(和普通的沒有區別);其結構類似如下:
{
"out_trade_no": "子單訂單號",
"trade_no": "子單交易訂單號",
...
}
- 如果只有一筆訂單,那么不能使用合單支付的接口,要使用普通的單個支付的接口接口,如手機網站支付就使用
alipay.trade.wap.pay
接口即可;和普通下單的區別就是添加SettleInfo信息(支付寶提供的skd是支持設置這個的參數的:AlipayTradeWapPayModel.setSettleInfo()
);下面是一個示例:
{
"outTradeNo": "202002220016444498",
"productCode": "QUICK_WAP_WAY",
"settleInfo": {
"settleDetailInfos": [
{
"amount": "0.01",
"transInType": "defaultSettle"
}
],
"settlePeriodTime": "365d"
},
"subMerchant": {
"merchantId": "11112464984"
},
"subject": "網球排一個",
"timeoutExpress": "15m",
"totalAmount": "0.01"
}
- 關於統一收單合並支付預創建接口中的產品碼productCode說明:注意文檔上的是錯誤的,我們按實際使用修改即可。app 支付上送:
QUICK_MSECURITY_PAY
,wap 支付上送:QUICK_WAP_WAY
。可以直接參考 支付寶的下單示例 ;注意看文檔中的注意說明。 - 如果不清楚的話或者接口一直報錯找不到問題,直接找支付寶的人工技術支持吧,多個人幫忙定位問題會快點。
關於訂單結算接口
微信和支付寶的分賬接口還是存在細微差別的。注意如果你不需要分賬的話,那么就不需要調用分賬接口。如果分賬失敗的話在重試的時候建議還是使用原來的分賬單號,避免多分(支付寶和微信那邊是做了冪等的);
退款是先退該訂單凍結的金額,如果不夠的話會直接從商戶的賬號上扣除金額;如果都不夠那么就會退款失敗
微信的訂單結算說明
微信分賬接口是異步處理的,因此你需要在請求分賬接口后,手動去查詢一下分賬是否成功。如果不需要分賬的話,那么直接調用完結分賬即可;注意完結分賬也是異步的。調用分賬或者是完結分賬接口后,資金會自動解凍(也就是二級商戶可以直接提現到銀行卡了);
注意:微信是提供了查詢二級商戶資金信息的操作接口的,如:賬戶余額信息、提現到銀行卡等。
支付寶的訂單結算說明
支付寶在調用分賬接口前需要先調用確認結算接口,注意調用確認結算接口后,該筆訂單的資金就會解凍到商戶綁定的支付寶賬號上去了;同時支付寶的分賬接口是同步的(即請求后立即就知道分賬結果了)。
關注微信訂閱號‘起岸星辰’獲取最新資訊