java微信支付 [統一下單接口] 與 [訂單查詢接口] 調用成功完整代碼與結果

公司最近要搞微信支付, 之前也沒有做過, 但是搞過阿里雲, 想來也不是很難. 在網上找了很多貼子, 在eclipse裏做了5個測試工程, 沒有測試成功, 後來下了微信SDK, 也做了個測試樣例, 期間參考了: https://blog.csdn.net/t_james/article/details/84653827#comments

第一步, 下SDK,  https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

第二步, 準備 公衆號appid, 商業號(MchID),  key,  參考: https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=3_1 獲得,

這個是需要公司去註冊與申請的, 

第三步, 開通支付模式, 這裏要是掃碼支付(Native支付), 支付模式介紹見: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=2_1

第四步, 把工程導入eclipse, 完整如下圖:

 

以下是完整代碼, 搞多了大家不理解, 就一個類:

package com.github.wxpay.test;

import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayUtil;
import com.github.wxpay.sdk.WxPayConfigImpl;

/**
 * 簽名驗證工具地址:
 * https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1
 * 
 * 統一下單API說明: 
 * https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
 * @author 123
 *
 */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//unifiedOrder();
		orderQuery();
	}
	
	 /**
     * 統一下單接口<br>
     * 場景:公共號支付、掃碼支付、APP支付
     */
	public static  void unifiedOrder (){
		try {
			//sdk類引用
			WxPayConfigImpl config = WxPayConfigImpl.getInstance();
			
			WXPay pyPay = new WXPay(config);
			
			//訂單號 (調整爲自己的生產邏輯)
			String out_trade_no = config.getMchID()+"-" + System.currentTimeMillis(); 
			//公衆號appid
	        String appid = config.getAppID(); 
	        //商業號 
	        String mch_id = config.getMchID();  
	        //key
	        String key = config.getKey();  
	        //隨機數
	        String nonce_str = WXPayUtil.generateNonceStr(); 
	        //獲取發起電腦 ip,可以用百度之類的代替來測試
	        String spbill_create_ip = "123.123.123.123";
	        //回調接口(反正本機測試時不用,隨意搞一個能訪問的)
	        String notify_url = "http://www.weixin.qq.com/wxpay/pay.php";
	        //模式
	        String trade_type = "NATIVE";//"JSAPI";
			
			SortedMap<String,String> packageParams = new TreeMap<String,String>();  
	        packageParams.put("appid", appid);
	        packageParams.put("mch_id", mch_id);
	        packageParams.put("nonce_str", nonce_str);
	        packageParams.put("body", "test-coke");  //(調整爲自己的名稱)格式: 騰訊充值中心-QQ會員充值
	        packageParams.put("out_trade_no", out_trade_no);
	        packageParams.put("total_fee", "10"); //價格的單位爲分
	        packageParams.put("spbill_create_ip", spbill_create_ip);
	        packageParams.put("notify_url", notify_url);
	        packageParams.put("trade_type", trade_type);
	        
			Map runMap = pyPay.unifiedOrder(packageParams);
	        
	        System.out.println("=============returnXml==============");
			System.out.println(runMap.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//發送:
//		<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//		<xml>
//		<appid>公衆號APPID</appid>
//		<body>test-coke</body>
//		<mch_id>自己的商戶號</mch_id>
//		<nonce_str>rE8iTtCENf4VSOtOCZ0PIbkuuNklyFpw</nonce_str>
//		<notify_url>http://www.weixin.qq.com/wxpay/pay.php</notify_url>
//		<out_trade_no>自己的商戶號-1561942616146</out_trade_no>
//		<sign>907192B0875A02F199B45B7F30356644751DF6D4A2AFA77C0F3C226E4A60D276</sign>
//		<sign_type>HMAC-SHA256</sign_type>
//		<spbill_create_ip>123.123.123.123</spbill_create_ip>
//		<total_fee>10</total_fee>
//		<trade_type>NATIVE</trade_type>
//		</xml>
		
		//結果:
//		<xml><return_code><![CDATA[SUCCESS]]></return_code>
//		<return_msg><![CDATA[OK]]></return_msg>
//		<appid><![CDATA[公衆號APPID]]></appid>
//		<mch_id><![CDATA[自己的商戶號]]></mch_id>
//		<nonce_str><![CDATA[ayhkOwhZysjBQNR6]]></nonce_str>
//		<sign><![CDATA[021F45467BA5119C389D5F08D768CC5A635687057BBD6445E6B7A1BBB34F4AA9]]></sign>
//		<result_code><![CDATA[SUCCESS]]></result_code>
//		<prepay_id><![CDATA[wx010855154971807287de77f31587946700]]></prepay_id>
//		<trade_type><![CDATA[NATIVE]]></trade_type>
//		<code_url><![CDATA[weixin://wxpay/bizpayurl?pr=kMwACCs]]></code_url>
//		</xml>
		
		//解釋後內容
		//{nonce_str=ayhkOwhZysjBQNR6, code_url=weixin://wxpay/bizpayurl?pr=kMwACCs, appid=公衆號APPID, sign=021F45467BA5119C389D5F08D768CC5A635687057BBD6445E6B7A1BBB34F4AA9, trade_type=NATIVE, return_msg=OK, result_code=SUCCESS, mch_id=自己的商戶號, return_code=SUCCESS, prepay_id=wx010855154971807287de77f31587946700}
		
	}
	
	/**
     * 查詢訂單接口<br>
     * 場景:刷卡支付、公共號支付、掃碼支付、APP支付
     */
	public static void orderQuery(){
		try {
			//sdk類引用
			WxPayConfigImpl config = WxPayConfigImpl.getInstance();
			
			WXPay pyPay = new WXPay(config);
			
			//訂單號 
			String out_trade_no = "自己的商戶號-1561942616146"; 
			//appid  
	        String appid = config.getAppID();
	        //商業號 
	        String mch_id = config.getMchID();
	        //隨機數
	        String nonce_str = WXPayUtil.generateNonceStr(); 
	        //模式
	        String trade_type = "NATIVE";//"JSAPI";
			
			SortedMap<String,String> packageParams = new TreeMap<String,String>();  
	        packageParams.put("appid", appid);
	        packageParams.put("mch_id", mch_id);
	        packageParams.put("nonce_str", nonce_str);
	        packageParams.put("out_trade_no", out_trade_no);
	        
			Map runMap = pyPay.orderQuery(packageParams);
	        
	        System.out.println("=============returnXml==============");
			System.out.println(runMap.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//發送
//		<?xml version="1.0" encoding="UTF-8" standalone="no"?>
//		<xml>
//		<appid>公衆號APPID</appid>
//		<mch_id>自己的商戶號</mch_id>
//		<nonce_str>epQ1ZECqQryQJv0ZOybGc8XIjWTJupNX</nonce_str>
//		<out_trade_no>自己的商戶號-1561942616146</out_trade_no>
//		<sign>366964520A9209243A714EAB55D46E542B56152E705814D4DB20FF1567511DA9</sign>
//		<sign_type>HMAC-SHA256</sign_type>
//		</xml>
		
		//結果:
//		<xml><return_code><![CDATA[SUCCESS]]></return_code>
//		<return_msg><![CDATA[OK]]></return_msg>
//		<appid><![CDATA[公衆號APPID]]></appid>
//		<mch_id><![CDATA[自己的商戶號]]></mch_id>
//		<device_info><![CDATA[]]></device_info>
//		<nonce_str><![CDATA[dewGq9USU04gFwUE]]></nonce_str>
//		<sign><![CDATA[94D3B1BFB852E19CB3F421DBC23D5A3AE5A7CBDC9448C8B146959036141EFE2F]]></sign>
//		<result_code><![CDATA[SUCCESS]]></result_code>
//		<total_fee>10</total_fee>
//		<out_trade_no><![CDATA[自己的商戶號-1561942616146]]></out_trade_no>
//		<trade_state><![CDATA[NOTPAY]]></trade_state>
//		<trade_state_desc><![CDATA[訂單未支付]]></trade_state_desc>
//		</xml>
	}

}

注: WxPayConfigImpl, WXPayDomainSimpleImpl 實現 參考這位兄弟的微博

https://blog.csdn.net/t_james/article/details/84653827#comments

代碼裏的 [公衆號APPID], [商戶號], [key], [發起電腦 ip] 這幾個換成自己公司的或自己客戶的相關內容

統一下單接口說明: 調用代碼成功收到微信的回覆, 這個測試是微信返回一個二維碼連接 code_url, 拿到 code_url內容之後, 自己可以用google二維碼工具顯示到jsp頁面上, 然後用手機掃描支付.  只要後臺代碼能與微信交互, 有沒有頁面都不重要. 

訂單查詢接口: 這樣列子中下單之後, 自己的代碼要每隔2-3秒查詢一次微信, 看看訂單是不是支付成功了,  成功了說明客戶支付了.

整個流程如下:  調用[統一下單接口] -->把某個訂單, 某個商品下單----> 調用成功收到微信的 code_url ------> 自己用二維碼工具生成二維碼 ------> 客戶掃描二維碼 ------> 每隔幾秒調用[訂單查詢接口]  -------> 支付成功則完成交易.

 

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