微信企業付款至零錢包實現詳細流程Demo

微信企業付款實現詳細流程Demo

大家好,我是 夢辛工作室的靈,下面來講一下微信企業付款實現的流程
1.準備數據
微信企業付款需要 準備 微信支付API祕鑰、支付證書;下面是獲取流程:
先登錄微信支付:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F
需要先開通企業付款至零錢包和運營賬戶,因爲付款的時候是從運營賬戶中 扣除金額的
主要注意的時,請保證您的商戶號的結算方式 是T+1類型的,T+7類型的是沒有這個功能的

點擊產品中心
在這裏插入圖片描述
開通企業付款至零錢包和運營賬戶
在這裏插入圖片描述
然後從基本戶移一些資金到運營賬戶作爲測試用的金額,流程如下:

點擊交易中心:
在這裏插入圖片描述
點擊資金管理的充值/轉入
在這裏插入圖片描述
在這裏插入圖片描述

轉入成功後,運營賬戶裏面就有錢了,接下來 獲取證書和設置API祕鑰

點擊賬戶中心點擊API安全
在這裏插入圖片描述
點擊申請證書,然後下載拿到證書
在這裏插入圖片描述
設置API祕鑰
在這裏插入圖片描述

2.開始開發
和微信支付一樣,需要提供以下參數:
在這裏插入圖片描述
第三個參數爲 true 表示必要參數,false 表示不必要參數
然後按照字母順序排序拼接爲以下格式:

amount=200&check_name=NO_CHECK&desc=付款備註&mch_appid=被付款人使用的小程序appid或公衆號appid&mchid=您的商戶號&nonce_str=kywaJ6iTYIA5AC7MzwzW&openid=小程序或公衆號對應的openid&partner_trade_no=1577245853344583aCpC9&spbill_create_ip=本機ip&key=API祕鑰

然後 進行md5加密,這個就是 sign
然後在拼接成xml格式,如下:

<xml>
<amount><![CDATA[200]]></amount>
<check_name><![CDATA[NO_CHECK]]></check_name>
<desc><![CDATA[付款備註]]></desc>
<mch_appid><![CDATA[被付款人使用的小程序appid或公衆號appid]]></mch_appid>
<mchid><![CDATA[您的商戶號]]></mchid>
<nonce_str><![CDATA[s4aMch7ijEK4GF0hpWTE]]></nonce_str>
<openid><![CDATA[小程序或公衆號對應的openid]]></openid>
<partner_trade_no><![CDATA[15772459622789X9BMf1c]]></partner_trade_no>
<spbill_create_ip><![CDATA[本機ip]]></spbill_create_ip>
<sign><![CDATA[7779de52642e5564f1ae0d04adbcde99]]></sign>
</xml>

然後post到 微信指定的接口:(https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers),
這裏的post請求 需要帶證書請求,以下是實現示例:

public static String doPostDataWithCert(String url, String data, String mch_id, String filPath) throws Exception {
		KeyStore keyStore = KeyStore.getInstance("PKCS12");
		FileInputStream instream = new FileInputStream(new File(filPath));// P12文件目錄

		try {
			keyStore.load(instream, mch_id.toCharArray());
		} finally {
			instream.close();
		}

		SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mch_id.toCharArray())// 這裏也是寫密碼的
				.build();

		SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,
				SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

		CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();

		try {
			HttpPost httpost = new HttpPost(url); // 設置響應頭信息
			httpost.addHeader("Connection", "keep-alive");
			httpost.addHeader("Accept", "*/*");
			httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
			httpost.addHeader("Host", "api.mch.weixin.qq.com");
			httpost.addHeader("X-Requested-With", "XMLHttpRequest");
			httpost.addHeader("Cache-Control", "max-age=0");
			httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
			httpost.setEntity(new StringEntity(data, "UTF-8"));
			CloseableHttpResponse response = httpclient.execute(httpost);
			try {
				HttpEntity entity = response.getEntity();

				String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
				EntityUtils.consume(entity);
				return jsonStr;
			} finally {
				response.close();
			}
		} finally {
			httpclient.close();
		}
	}

若成功會返回 對應結果 的 xml 數據,裏面會包含支付時間,支付訂單號等,記錄下來就可以了,然後樓主對這個過程進行了封裝,可以更加簡單的使用該功能 ,使用如下:
在這裏插入圖片描述
對,就這樣久可以完成了,不需要在其他的內容了,很簡單吧,下面是github連接
github入口

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