1. 程式人生 > >支付寶微信合單支付

支付寶微信合單支付

什麼場景下會用到合單支付呢?下面舉個例子:最常見的就是商城系統了,比如使用者在一筆訂單裡面選擇了多個不同商戶的商品, 為了使用者體驗,在支付的時候肯定是隻需要支付一次即可的;如果我們使用傳統的方式即實際後就是一筆訂單,直接支付下單即可,這裡確實簡單了,但是我們在給商戶做結算的時候就麻煩了,需要後臺去統計相關的財務資訊然後再打款給商戶;但是如果不想去做這樣複製的結算步驟,或者是可能剛開始我們的平臺名氣小,商戶想自己管理資金才放心,想自己看到相關的支付賬單資訊; 或者是不想再去做一套結算功能和打款流程。 此時我們就可以採用 微信的電商收付通 和 支付寶網際網路平臺直付通產品;它們都提供了多筆訂單一起支付,最後金額自動分配的商家的賬戶上、賬單資金凍結、結算、平臺抽成的功能。 下面來談談在與它們對接的相關注意事項吧。 ## 相關介面文件 * [支付寶-網際網路平臺直付通](https://opendocs.alipay.com/open/00faww) * [微信-電商收付通](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/guide.shtml) ## 關於二級商戶進件 開啟介面文件微信和支付的進件需要的資料都是一大坨,一看就是感覺很麻煩!在對接的時候不要管那麼多,先用需要資料最少最簡單的引數進件成功一個再說(快速理清認證流程和需要的相關資料),同時也方便其他對接支付的同學可以除錯後面的支付和結算相關介面(不然後面就會卡住,很多問題不能提前發現);同時雖然資料很多但是微信和支付那邊的稽核是很快(幾乎秒出結果),所以如果進件後稽核狀態一直不變,那麼很大的概率是你的程式碼問題。 ### 微信的電商收付通二級商戶進件說明 進件的相關引數直接看官方文件即可,需要說明的是在進件的通過後,會返回一個認證的連結的二維碼,需要商戶去掃碼確認,同時銀行卡認證微信需要打款確認。 ### 支付寶的網際網路平臺直付通二級商戶進件說明 * 預設結算規則必須傳入(雖然不傳入也是可以成功的),否則後面進行支付下單的時候會失敗; * 雖然文件中寫了結算賬號可以是銀行卡,但是實際是不支援,只支援支付寶賬號; * 進件介面請求成功後,在支付寶中登陸設定的結算賬號的支付寶賬號,然後搜尋 '簽約助手' 進入裡面簽約;[具體的流程圖](https://opendocs.alipay.com/open/00gfyb) * 在進件商戶簽約成功後(也就是上面一步的操作完成後),支付寶會回撥通知我們(通知地址需要在支付寶開發者中配置); * 注意選擇使用的支付寶SDK `alipay-sdk-java` 的包最好用最新的;因為舊的版本建立進件的介面中自帶的`AntMerchantExpandIndirectZftCreateModel` 轉換json轉換不出`sites` ,導致進件請求失敗。 ## 關於支付介面 ### 微信的合單支付說明 * 生成的合單訂單號在後面查詢訂單的時候是需要的,不能通過子單號進行查詢;但是在退款、分賬操作的時候使用的是子單的訂單號。 * 支付成功回撥通知說明:支付成功後會將支付資訊返回,其結構類似如下: ```json { "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的,不要用特殊字元。 #### 支付寶的合單支付介面說明 * 生成的合單訂單號就只在預下單的時候有用,後面都不會用了; * 支付成功回撥通知說明:雖然是合單支付的,但是支付寶的通知還是一筆筆的分開通知,即有多少個子單就有多少個通知(和普通的沒有區別);其結構類似如下: ```json { "out_trade_no": "子單訂單號", "trade_no": "子單交易訂單號", ... } ``` * 如果只有一筆訂單,那麼不能使用合單支付的介面,要使用普通的單個支付的介面介面,如手機網站支付就使用`alipay.trade.wap.pay`介面即可;和普通下單的區別就是新增SettleInfo資訊(支付寶提供的skd是支援設定這個的引數的:`AlipayTradeWapPayModel.setSettleInfo()`);下面是一個示例: ```json { "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`。可以直接參考 [支付寶的下單示例](https://opendocs.alipay.com/open/direct-payment/qadp9d) ;注意看文件中的注意說明。 * 如果不清楚的話或者介面一直報錯找不到問題,直接找支付寶的人工技術支援吧,多個人幫忙定位問題會快點。 ## 關於訂單結算介面 微信和支付寶的分賬介面還是存在細微差別的。注意如果你不需要分賬的話,那麼就不需要呼叫分賬介面。如果分賬失敗的話在重試的時候建議還是使用原來的分賬單號,避免多分(支付寶和微信那邊是做了冪等的); > 退款是先退該訂單凍結的金額,如果不夠的話會直接從商戶的賬號上扣除金額;如果都不夠那麼就會退款失敗 #### 微信的訂單結算說明 微信分賬介面是非同步處理的,因此你需要在請求分賬介面後,手動去查詢一下分賬是否成功。如果不需要分賬的話,那麼直接呼叫完結分賬即可;注意完結分賬也是非同步的。呼叫分賬或者是完結分賬介面後,資金會自動解凍(也就是二級商戶可以直接提現到銀行卡了); 注意:微信是提供了查詢二級商戶資金資訊的操作介面的,如:賬戶餘額資訊、提現到銀行卡等。 #### 支付寶的訂單結算說明 支付寶在呼叫分賬介面前需要先呼叫確認結算介面,注意呼叫確認結算介面後,該筆訂單的資金就會解凍到商戶繫結的支付寶賬號上去了;同時支付寶的分賬介面是同步的(即請求後立即就知道分賬結果了)。 > https://blog.vchar.top/java/1613828179.html 關注微信訂閱號‘起岸星辰’獲取最新資訊 ![](https://img2020.cnblogs.com/blog/1929453/202101/1929453-20210129213155475-411555