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 ------> 自己用二维码工具生成二维码 ------> 客户扫描二维码 ------> 每隔几秒调用[订单查询接口]  -------> 支付成功则完成交易.

 

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