淺析微信支付:(餘額提現)企業付款到微信使用者零錢或銀行卡賬戶
本文是【淺析微信支付】系列文章的第十二篇,主要講解在商戶存在的提現、商戶付款到微信使用者零錢或者銀行卡需求。
淺析微信支付系列已經更新十二篇了喲~,沒有看過的朋友們可以看一下哦。
ofollow,noindex" target="_blank">淺析微信支付:支付驗收示例和驗收指引
如果你是做電商或者某些有福利返利的系統,基本上會遇到諸如 餘額提現
這類需求,主要就是平臺向用戶返利現金,積累到某一個門檻,可以領取到自己的餘額賬號、銀行卡;或者是使用為使用者傳送現金紅包的方式。
接下來的兩篇文章,會為大家描述在微信支付中,像使用者付款的以上三種方式。
以下為三種付款方式的必要條件:
- 商戶號(或同主體其他非服務商商戶號)已入駐90日
- 商戶號(或同主體其他非服務商商戶號)有30天連續正常交易
- 登入微信支付商戶平臺-產品中心,開通企業付款。
企業付款到微信使用者零錢
企業付款提供由商戶直接付錢至使用者微信零錢的能力,支援平臺操作及介面呼叫兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對使用者付款需求,比如:保險理賠、彩票兌換等等。
如何開通?
- 入駐成為商戶:線上提交營業執照、身份證、銀行賬戶等基本資訊,快速提交申請;
- 超級管理員開通:前往商戶平臺-產品中心-企業付款到零錢-申請開通;
- 特殊要求:交易資金是即時入賬到商戶號基本戶的商戶,需要滿足以下要求:需入駐滿90天,連續交易30天。
所需資料:開通企業付款到零錢功能無需提供額外的材料。
費用:試用期間免費使用。
應用場景
企業付款為企業提供付款至使用者零錢的能力,支援通過API介面付款,或通過微信支付商戶平臺(pay.weixin.qq.com)網頁操作付款。
以下為官方的解釋:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
抓重點,首先需要知道的是,開通了 運營賬戶
的商戶,付款時會從運營賬戶餘額中扣除,這個一定要注意,以免金額不足時付款失敗(可以使用主賬戶為運營賬戶充值,參考[交易中心]-[充值/轉入])。
以下為特別需要注意的地方,為大家標記出來,設計系統時一定要參考一下,以免入坑。
介面連結
https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
是否需要證書
請求需要雙向證書。
呼叫介面
注意事項:
◆ 當返回錯誤碼為“SYSTEMERROR”時,請不要更換商戶訂單號,一定要使用原商戶訂單號重試,否則可能造成重複支付等資金風險。
◆ XML具有可擴充套件性,因此返回引數可能會有新增,而且順序可能不完全遵循此文件規範,如果在解析回包的時候發生錯誤,請商戶務必不要換單重試,請商戶聯絡客服確認付款情況。如果有新回包欄位,會更新到此API文件中。
◆ 因為錯誤程式碼欄位err_code的值後續可能會增加,所以商戶如果遇到回包返回新的錯誤碼,請商戶務必不要換單重試,請商戶聯絡客服確認付款情況。如果有新的錯誤碼,會更新到此API文件中。
◆ 錯誤程式碼描述欄位err_code_des只供人工定位問題時做參考,系統實現時請不要依賴這個欄位來做自動化處理。
PS:目前支援向指定微信使用者的openid付款。
官方文件如下:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
具體的傳入引數,這裡就不一一列舉了,請大家參考一下官方文件,下面貼上具體的實現原始碼:
/** * [微信支付提現介面] - 儲存呼叫的相關記錄 * @param payment 支付物件 * @param wxPayConfig 微信支付單例物件 * @return map * * @author yclimb * @date 2018/7/30 */ public Map<String, String> saveWxPayTransfers(Payment payment, WXPayConfig wxPayConfig) throws Exception { // 支付前驗證 // 微信支付物件 // WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance()); WXPay wxPay = new WXPay(wxPayConfig); // 微信退款介面 Map<String, String> resultMap = wxPay.transfers(...); logger.info("saveWxPayTransfers:resultMap:" + resultMap.toString()); // 下單失敗,進行處理 if (WXPayConstants.FAIL.equals(resultMap.get(WXPayConstants.RETURN_CODE)) || WXPayConstants.FAIL.equals(resultMap.get(WXPayConstants.RESULT_CODE))) { // 處理結果返回,無需繼續執行 // 餘額不足提醒 if (WXPayCodeEnum.ERR_CODE_NOTENOUGH.getCode().equals(resultMap.get(WXPayConstants.ERR_CODE))) { // 傳送餘額不足的訊息提醒 } } // 付款記錄修改 & 記錄付款日誌 return resultMap; }
以上為呼叫的應用方法,下面為大家貼出微信介面呼叫程式碼 imall.weixin.sdk.WXPay
:
/** * 作用:企業向微信使用者個人付款<br> * 場景:企業付款為企業提供付款至使用者零錢的能力,支援通過API介面付款,或通過微信支付商戶平臺(pay.weixin.qq.com)網頁操作付款。 * 介面文件地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2 * * @param partner_trade_no 商戶訂單號 * @param openid使用者openid * @param amount企業付款金額 * @param desc企業付款描述資訊 * @param spbill_create_ip 該IP可傳使用者端或者服務端的IP * @return API返回資料 * @throws Exception e */ public Map<String, String> transfers(String partner_trade_no, String openid, String amount, String desc, String spbill_create_ip) throws Exception { /** 構造請求引數資料 **/ Map<String, String> data = new HashMap<>(); // 商戶訂單號partner_trade_no是10000098201411111234567890String商戶訂單號,需保持唯一性(只能是字母或者數字,不能包含有符號) data.put("partner_trade_no", partner_trade_no); // 使用者openid openid是oxTWIuGaIt6gTKsQRLau2M0yL16EString商戶appid下,某使用者的openid data.put("openid", openid); // 校驗使用者姓名選項 check_name是FORCE_CHECK StringNO_CHECK:不校驗真實姓名,FORCE_CHECK:強校驗真實姓名 data.put("check_name", "NO_CHECK"); // 金額amount是10099int 企業付款金額,單位為分 data.put("amount", String.valueOf(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue())); // 企業付款描述資訊 desc是理賠String企業付款操作說明資訊。必填。 data.put("desc", desc); // Ip地址 spbill_create_ip是192.168.0.1 String(32)該IP同在商戶平臺設定的IP白名單中的IP沒有關聯,該IP可傳使用者端或者服務端的IP。 data.put("spbill_create_ip", spbill_create_ip); /** 以下引數為非必填引數 **/ /*// 裝置號device_info 否013467007045764 String(32)微信支付分配的終端裝置號 data.put("device_info", "xxx"); // 收款使用者姓名re_user_name可選王小王 String收款使用者真實姓名。(如果check_name設定為FORCE_CHECK,則必填使用者真實姓名) data.put("re_user_name", "xxx");*/ // 微信呼叫介面 Map<String, String> resultMap = this.transfers(data); WXPayUtil.getLogger().info("wxPay.transfers:" + resultMap); return resultMap; }
PS:推薦資料庫中對於金額儲存為數值單位,以分為單位來儲存,1.1元可以儲存為101,這樣和微信對應,會方便很多。
對於企業付款查詢的介面,這裡就不詳細描述了,以下為具體的官方文件連結:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3
需要的朋友,根據文件進行介面查詢即可,非高頻介面。
企業付款到銀行卡
企業付款到銀行卡提供由商戶直接付錢至指定銀行卡賬戶的能力,支援平臺操作及介面呼叫兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對使用者付款需求,比如:保險理賠、彩票兌換等等。
開通流程:
- 入駐成為商戶:線上提交營業執照、身份證、銀行賬戶等基本資訊,快速提交申請;
- 超級管理員開通:前往商戶平臺-產品中心-企業付款到銀行卡-申請開通;
- 特殊要求:交易資金是即時入賬到商戶號基本戶的商戶,需要滿足以下要求:需入駐滿90天,連續交易30天。
所需資料:開通企業付款到銀行卡功能無需提供額外的材料。
費用:此功能需收取手續費,按照單筆金額收取,每筆收取0.1%,最低1元,最高25元。
應用場景
微信支付已上線企業付款至銀行卡功能。商戶可以將商戶號餘額付款至指定的收款銀行賬戶。通過指定收款銀行賬戶戶名、卡號,以及收款銀行資訊即可實現付款。
官方文件地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_1&index=1
功能說明:
- 企業付款至銀行卡只支援新資金流型別賬戶
- 目前企業付款到銀行卡支援17家銀行,更多銀行逐步開放中
- 付款到賬實效為1-3日,最快次日到賬
- 每筆按付款金額收取手續費,按金額0.1%收取,最低1元,最高25元,如果商戶開通了運營賬戶,手續費和付款的金額都從運營賬戶出。如果沒有開通,則都從基本戶出。
- 每個商戶號每天可以出款100萬,單商戶給同一銀行卡付款每天限額5萬
- 發票:在賬戶中心-發票資訊頁面申請開票的商戶會按月收到發票(已申請的無需重複申請)。
企業付款到銀行卡發票與交易手續費發票為拆分單獨開具。
需要注意的是,微信支援的銀行有限,具體的支援銀行見如下連結:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4&index=5
所以肯定會出現不支援的銀行,小夥伴們在開發的時候,可以在前後端控制使用者選擇提現銀行來解決。
平臺上手動付款流程:
- 在產品中心,開通企業付款到個人銀行卡功能
- 進入交易中心-企業付款到銀行卡頁面進行付款
- 指定收款銀行賬號、戶名、收款方開戶行,及付款金額資訊,即可實現付款
介面連結
https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank
是否需要證書
請求需要雙向證書。
呼叫介面
介面介紹:
用於企業向微信使用者銀行卡付款
目前支援介面API的方式向指定微信使用者的銀行卡付款。
介面呼叫規則:
◆ 單商戶日限額——單日100w
◆ 單次限額——單次5w
◆ 單商戶給同一銀行卡單日限額——單日5w
注意:重點來了,首先,收款方銀行卡號 enc_bank_no
、收款方使用者名稱 enc_true_name
這兩個入參是需要 採用標準RSA演算法,公鑰由微信側提供
得到的,所以還需要先拿到這個金鑰,下面是官方文件地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4
以上文件詳細介紹瞭如何得到具體的金鑰方式,如果有看不明白的小夥伴,可以直接百度 獲取RSA加密公鑰API
,可以得到很多示例,這裡我就不講了。
除入參和 企業付款到微信使用者零錢
有所不一致之外,其他方面都差不多,小夥伴們可以參考上面付款到零錢的介面來實現付款到銀行卡介面。
結語
以上為 微信餘額提現
相關的解釋和原始碼,小夥伴們一定要注意看看官方文件哦,具體的原始碼可以看作者的github,裡面對每個方法有詳細的註釋。
如果小夥伴有遇到解決不了的問題,可以關注作者微信公眾號,加入討論群中發出疑問,和小夥伴們一起解決哦~
預告:下一篇文章會講發放獎勵的另一種方式 商戶平臺-現金紅包
,敬請期待!!!
如果想要提前一覽原始碼的小夥伴,可以先看看我的 github,地址如下:
https://github.com/YClimb/wxpay-sdk/blob/master/README.md
關注作者微信公眾號,點選下方 討論群
,掃碼即可加入 微信支付討論群
與小夥伴一起探討哦~
到此本文就結束了,關注公眾號檢視更多推送!!!