淺析微信支付:(餘額提現)企業付款到微信用戶零錢或銀行卡賬戶

本文是【淺析微信支付】系列文章的第十二篇,主要講解在商戶存在的提現、商戶付款到微信用戶零錢或者銀行卡需求。

淺析微信支付系列已經更新十二篇了喲~,沒有看過的朋友們可以看一下哦。

淺析微信支付:支付驗收示例和驗收指引

淺析微信支付:如何使用沙箱環境測試

淺析微信支付:下載對賬單和資金賬單

淺析微信支付:申請退款、退款回調接口、查詢退款

如果你是做電商或者某些有福利返利的系統,基本上會遇到諸如 餘額提現 這類需求,主要就是平臺向用戶返利現金,積累到某一個門檻,可以領取到自己的餘額賬號、銀行卡;或者是使用爲用戶發送現金紅包的方式。

接下來的兩篇文章,會爲大家描述在微信支付中,像用戶付款的以上三種方式。

以下爲三種付款方式的必要條件:

  1. 商戶號(或同主體其他非服務商商戶號)已入駐90日
  2. 商戶號(或同主體其他非服務商商戶號)有30天連續正常交易
  3. 登錄微信支付商戶平臺-產品中心,開通企業付款。

企業付款到微信用戶零錢

企業付款提供由商戶直接付錢至用戶微信零錢的能力,支持平臺操作及接口調用兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對用戶付款需求,比如:保險理賠、彩票兌換等等。

如何開通?

  1. 入駐成爲商戶:在線提交營業執照、身份證、銀行賬戶等基本信息,快速提交申請;
  2. 超級管理員開通:前往商戶平臺-產品中心-企業付款到零錢-申請開通;
  3. 特殊要求:交易資金是即時入賬到商戶號基本戶的商戶,需要滿足以下要求:需入駐滿90天,連續交易30天。

所需資料:開通企業付款到零錢功能無需提供額外的材料。
費用:試用期間免費使用。

應用場景

企業付款爲企業提供付款至用戶零錢的能力,支持通過API接口付款,或通過微信支付商戶平臺(pay.weixin.qq.com)網頁操作付款。

以下爲官方的解釋:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

抓重點,首先需要知道的是,開通了運營賬戶的商戶,付款時會從運營賬戶餘額中扣除,這個一定要注意,以免金額不足時付款失敗(可以使用主賬戶爲運營賬戶充值,參考[交易中心]-[充值/轉入])。

以下爲特別需要注意的地方,爲大家標記出來,設計系統時一定要參考一下,以免入坑。

企業付款到餘額-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    是    10000098201411111234567890    String    商戶訂單號,需保持唯一性(只能是字母或者數字,不能包含有符號)
    data.put("partner_trade_no", partner_trade_no);
    // 用戶openid    openid    是    oxTWIuGaIt6gTKsQRLau2M0yL16E    String    商戶appid下,某用戶的openid
    data.put("openid", openid);
    // 校驗用戶姓名選項    check_name    是    FORCE_CHECK    String    NO_CHECK:不校驗真實姓名,FORCE_CHECK:強校驗真實姓名
    data.put("check_name", "NO_CHECK");
    // 金額    amount    是    10099    int    企業付款金額,單位爲分
    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

需要的朋友,根據文檔進行接口查詢即可,非高頻接口。

企業付款到銀行卡

企業付款到銀行卡提供由商戶直接付錢至指定銀行卡賬戶的能力,支持平臺操作及接口調用兩種方式,資金到賬速度快,使用及查詢方便。主要用來解決合理的商戶對用戶付款需求,比如:保險理賠、彩票兌換等等。

開通流程:

  1. 入駐成爲商戶:在線提交營業執照、身份證、銀行賬戶等基本信息,快速提交申請;
  2. 超級管理員開通:前往商戶平臺-產品中心-企業付款到銀行卡-申請開通;
  3. 特殊要求:交易資金是即時入賬到商戶號基本戶的商戶,需要滿足以下要求:需入駐滿90天,連續交易30天。

所需資料:開通企業付款到銀行卡功能無需提供額外的材料。
費用:此功能需收取手續費,按照單筆金額收取,每筆收取0.1%,最低1元,最高25元。

應用場景

微信支付已上線企業付款至銀行卡功能。商戶可以將商戶號餘額付款至指定的收款銀行賬戶。通過指定收款銀行賬戶戶名、卡號,以及收款銀行信息即可實現付款。

官方文檔地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_1&index=1

功能說明:

  1. 企業付款至銀行卡只支持新資金流類型賬戶
  2. 目前企業付款到銀行卡支持17家銀行,更多銀行逐步開放中
  3. 付款到賬實效爲1-3日,最快次日到賬
  4. 每筆按付款金額收取手續費,按金額0.1%收取,最低1元,最高25元,如果商戶開通了運營賬戶,手續費和付款的金額都從運營賬戶出。如果沒有開通,則都從基本戶出。
  5. 每個商戶號每天可以出款100萬,單商戶給同一銀行卡付款每天限額5萬
  6. 發票:在賬戶中心-發票信息頁面申請開票的商戶會按月收到發票(已申請的無需重複申請)。

企業付款到銀行卡發票與交易手續費發票爲拆分單獨開具。

需要注意的是,微信支持的銀行有限,具體的支持銀行見如下鏈接:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4&index=5

所以肯定會出現不支持的銀行,小夥伴們在開發的時候,可以在前後端控制用戶選擇提現銀行來解決。

平臺上手動付款流程:

  1. 在產品中心,開通企業付款到個人銀行卡功能
  2. 進入交易中心-企業付款到銀行卡頁面進行付款
  3. 指定收款銀行賬號、戶名、收款方開戶行,及付款金額信息,即可實現付款

接口鏈接

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/wxp...
`

關注作者微信公衆號,點擊下方討論羣,掃碼即可加入微信支付討論羣與小夥伴一起探討哦~

到此本文就結束了,關注公衆號查看更多推送!!!


關注我的公衆號


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章