微信企業付款到零錢(Java版)


訂閱專欄
1.開通條件。

商戶注冊超過90天且,連續30天有交易,可以每天支付1元來刷,目前測試可行。隨后在微信商戶平台 - 產品管理自動開啟,然后需要申請。

疑問:

話說是要有公眾號appid才行,但是聽說移動應用的appid也可以。

補充:以下均已測試。

小程序appid與對應的openid也可以,如果非同主體,可以嘗試mch_id與appid綁定;

移動應用appid與對應的openid也可以,如果非同主體,可以嘗試mch_id與appid綁定;

Attention:如果主體里面有括號,注意英文括號和中文括號區別;

2.此類接口使用場景。

無論是微信還是支付寶,現金紅包,單筆轉賬,企業轉賬等資金支出類接口都可以用作,活動營銷、招新、邀請好友發送獎勵、企業內部報銷、合伙人團長提現等場景。

注意點:

a.微信商戶賬號需要有余額;

b.根據實際業務,比如發紅包,需要做並發和同步鎖處理,同時建議在商戶平台開啟防盜刷處理;

c.調用三方接口,看好官方文檔,參數獲取的對,傳遞的對,工具類找的好,基本就ok了;

d.不支持給非實名用戶付款,如果報錯,請處理,並且展示給前端可理解字段;

 

 

 

 

3.必須材料准備。如果已經獲取,請跳過。

像這種資金支出類的API接口,都是要請求證書的,而且要apikey,apiv3key。獲取的使用最好使用IE兼容模式。

API密鑰、APIV3密鑰獲取:微信商戶平台 - 賬戶中心 - API安全,(這里我已經設置了,就不重新設置了,建議用UUID生成)

 

 

 

 

同時在API安全中,可以設置企業付款API 調用的IP和每日每用戶轉賬次數

 

 

 

 

API證書獲取:同樣也在API安全里,申請證書。

簡述:微信商戶 - 賬戶中心 - API安全 - API證書 - 點擊申請 - 下載證書工具 - 下一步一下一步靜默安裝 - 填寫商戶信息 - 復制黏貼到微信商戶 - OK

本機安裝位置:C:\Data\WXCertUtil\WXCertUtil

詳解:

第一步,微信商戶 - API證書點擊申請

 

 

 

 

 

 

 

第二步,彈出提示需要先下載 證書工具,直接下載,然后雙擊安裝,下一步,下一步即可。此處省略安裝步驟。記得自己安裝的位置即可。

 

 

 

 

第三步,打開安裝好的工具,選擇證書生成后的位置,默認即可,一般是同目錄下的cret文件夾。然后點擊申請證書。

 

 

 

 

第四步,填寫商戶信息,微信商戶平台上可以獲取(就是第一步中彈出那個提示框里面有,復制到這里即可,嚴格一點哦一個空格都沒不能錯),然后點擊下一步。

 

 

 

 

第五步,將生成的證書串,復制黏貼到商戶平台,如下圖的證書串。然后再將微信商戶平台的證書串復制到工具里面,完成即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

最后,在微信商戶平台 - API證書里面查看證書可以獲取證書序列號和證書有效期,同時后續的更換證書也是在這里。

 

 

 

 

 

 

 

 

4.企業付款。(需要證書)

請求地址 https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
請求方式 POST
需要證書 https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3
請求參數:

字段名 變量名 必填 示例值 類型 描述
商戶賬號appid mch_appid 是 wx8888888888888888 String(128) 申請商戶號的appid或商戶號綁定的appid
商戶號 mchid 是 1900000109 String(32) 微信支付分配的商戶號
設備號 device_info 否 013467007045764 String(32) 微信支付分配的終端設備號
隨機字符串 nonce_str 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 隨機字符串,不長於32位
簽名 sign 是 C380BEC2BFD727A4B6845133519F3AD6 String(32) 簽名,詳見簽名算法
商戶訂單號 partner_trade_no 是 10000098201411111234567890 String(32) 商戶訂單號,需保持唯一性
(只能是字母或者數字,不能包含有其他字符)
用戶openid openid 是 oxTWIuGaIt6gTKsQRLau2M0yL16E String(64) 商戶appid下,某用戶的openid
校驗用戶姓名選項 check_name 是 FORCE_CHECK String(16) NO_CHECK:不校驗真實姓名
FORCE_CHECK:強校驗真實姓名
收款用戶姓名 re_user_name 否 王小王 String(64) 收款用戶真實姓名。
如果check_name設置為FORCE_CHECK,則必填用戶真實姓名
金額 amount 是 10099 int 企業付款金額,單位為分
企業付款備注 desc 是 理賠 String(100) 企業付款備注,必填。注意:備注中的敏感詞會被轉成字符*
Ip地址 spbill_create_ip 是 192.168.0.1 String(32) 該IP同在商戶平台設置的IP白名單中的IP沒有關聯,該IP可傳用戶端或者服務端的IP。
返回示例:

{
"mchid": "154547511",
"mch_appid": "wxdfc5c46e8cee3a",
"err_code": "AMOUNT_LIMIT",
"return_msg": "支付失敗",
"result_code": "FAIL",
"err_code_des": "付款金額超出限制。低於最小金額1.00元或累計超過500.00元。",
"return_code": "SUCCESS"
}
成功示例:

{
"nonce_str": "742ebe1739b0403cb81270aac28c1fef",
"mchid": "5047515471",
"partner_trade_no": "1545047571201912161339371639",
"payment_time": "2019-12-16 13:39:46",
"mch_appid": "wxdfc5c46e8cee32ca",
"payment_no": "10101066994831912160041922151260",
"return_msg": "",
"result_code": "SUCCESS",
"return_code": "SUCCESS"
}
成功截圖:

 

 

 

示例代碼:

public static void transfers() {
Map<String, String> resutlMap = null;
try {
//TODO 1.轉賬前驗證

//TODO 2.轉賬
WXPayConfig wxPayConfig = WXPayConfigImpl.getInstance();
WXPay wxpay = new WXPay(wxPayConfig);
Map<String, String> reqData = new HashMap<String, String>();//只傳遞了必傳字段,其他字段看文檔
//mch_appid mchid nonce_str sign會自動裝配

reqData.put("partner_trade_no", WXPayUtil.getPayNo());//商戶訂單號,是
reqData.put("openid", "oio1b1JeHrOaD785ZkK21x7dolvw");//用戶oio1b1JeHrOaD785ZkK21x7dolvw
reqData.put("check_name", "NO_CHECK");//不校驗真實姓名NO_CHECK,FORCE_CHECK:強校驗真實姓名
//reqData.put("re_user_name", "PGZ");//強制校驗,此項必填
reqData.put("amount", "30");//企業付款金額,單位分
reqData.put("desc", "活動獎勵");//企業付款備注
reqData.put("spbill_create_ip","127.0.0.1");//AddressUtils.getIpAddr(request)
resutlMap = wxpay.transfers(reqData);
LogUtil.log("企業付款返回結果:" + JSON.toJSONString(resutlMap));

//TODO 3.操作成功,保存記錄,失敗,提示
String returnCode = resutlMap.get("return_code");
String resultCode = resutlMap.get("result_code");
if (WXPayConstants.SUCCESS.equals(returnCode) && WXPayConstants.SUCCESS.equals(resultCode)) {

}else {

}
} catch (Exception e) {
LogUtil.exception(e);
}
5.查詢企業付款到零錢(需要證書)

注意:接口文檔中參數名稱,大小寫,比如mch_id,mchapp_id,appid,app_id,timestamp。

還有注意,請求的參數,里面到底有沒有sign_type,否則可能簽名sign參數錯誤。

請求成功返回示例:

{
"reason": "",
"openid": "oNicp49yn6IS4g7_OymNyWKuJ9O0",
"payment_time": "2019-12-18 13:40:21",
"payment_amount": "100",
"mch_id": "1545047571",
"detail_id": "10101066994831912180040711223260",
"transfer_name": "",
"transfer_time": "2019-12-18 13:40:20",
"partner_trade_no": "201912182735191955079946240",
"appid": "wxdfc5c46e8cee32ca",
"result_code": "SUCCESS",
"return_code": "SUCCESS",
"status": "SUCCESS",
"desc": "活動獎勵"
}
額外:

1.微信企業付款到零錢官方接口文檔:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

2.微信公眾號網頁授權獲取openID:

https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

3.簽名算法以及簽名校驗(最好用Chrome):https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3

4.移動應用快速獲取openID,支持支付分、跳轉小程序,示例apk源碼下載(只需更改里面的appid與appsecret):

https://gitee.com/JaneYork/WeChatOpenSdkSample

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM