刘韬 3 years ago
parent
commit
faff2e3716

+ 510 - 517
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WeixinPayController.java

@@ -16,119 +16,30 @@ import com.jfinal.weixin.sdk.kit.PaymentKit;
 import com.jfinal.weixin.sdk.utils.HttpUtils;
 import com.jfinal.weixin.sdk.utils.JsonUtils;
 
-
 public class WeixinPayController extends Controller {
 
-	//商户相关资料
-    private static String appid = "wx1f3dc2c37dce641b";
-    private static String partner = "1503643261";
-    private static String paternerKey = "9759a66938e8411ad5889e2b5b394d94";
-    private static String notify_url = "https://wechat.pacsonline.cn/wx_patient/pay/pay_notify";
-    private static String partner_jx = "1615037878";
-    private static String paternerKey_jx = "9759a66938e8411ad5889e2b5b394d94";
-
-
+	// 商户相关资料
+	private static String appid = "wx1f3dc2c37dce641b";
+	private static String partner = "1503643261";
+	private static String paternerKey = "9759a66938e8411ad5889e2b5b394d94";
+	private static String notify_url = "https://wechat.pacsonline.cn/wx_patient/pay/pay_notify";
+	private static String partner_jx = "1615037878";
+	private static String paternerKey_jx = "9759a66938e8411ad5889e2b5b394d94";
 
-    /**
-     * 公众号支付js-sdk
-     */
-    public void index() {
-		String institution_id = this.getPara("institution_id");
-		if (institution_id == null || !institution_id.equals("03060002")) {String out_trade_no = this.getPara("out_trade_no");
-		if (out_trade_no == null) {
-			renderText("need out_trade_no");
-		}
-//		String appId = this.getPara("appId");
-//		if (appId == null) {
-//			renderText("need appId");
-//		}
-		String openid = this.getPara("openid");
-		if (openid == null) {
-			renderText("need openid");
-		}
-		String body = this.getPara("body");
-		if (body == null) {
-			renderText("need body");
-		}
-		String total_fee = this.getPara("total_fee");
-		if (total_fee == null) {
-			renderText("need total_fee");
-		}
-		String notify_url = this.getPara("notify_url");
-		if (notify_url == null) {
-			renderText("need notify_url");
-		}
-        
-		ApiConfigKit.setThreadLocalAppId(appid);
-
-        // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-
-        Map<String, String> params = new HashMap<String, String>();
-        params.put("appid", appid);
-        params.put("mch_id", partner);
-        params.put("body", body);
-        params.put("out_trade_no", out_trade_no);
-        params.put("total_fee", total_fee);
-
-        String ip = IpKit.getRealIp(getRequest());
-        if (StrKit.isBlank(ip)) {
-            ip = "127.0.0.1";
-        }
-        if (ip.contains(",")) {
-            ip = ip.split(",")[0];
-        }
-
-        params.put("spbill_create_ip", ip);
-        params.put("trade_type", TradeType.JSAPI.name());
-        params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-        params.put("notify_url", notify_url);
-        params.put("openid", openid);
-
-        String sign = PaymentKit.createSign(params, paternerKey);
-        params.put("sign", sign);
-        String xmlResult = PaymentApi.pushOrder(params);
-
-        System.out.println(xmlResult);
-
-        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
-
-        String return_code = result.get("return_code");
-        String return_msg = result.get("return_msg");
-        if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-            renderText(xmlResult);
-            return;
-        }
-        String result_code = result.get("result_code");
-        if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-            renderText(xmlResult);
-            return;
-        }
-        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-        String prepay_id = result.get("prepay_id");
-
-        Map<String, String> packageParams = new HashMap<String, String>();
-        packageParams.put("appId", appid);
-        packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
-        packageParams.put("nonceStr", System.currentTimeMillis() + "");
-        packageParams.put("package", "prepay_id=" + prepay_id);
-        packageParams.put("signType", "MD5");
-        String packageSign = PaymentKit.createSign(packageParams, paternerKey);
-        packageParams.put("paySign", packageSign);
-
-        String jsonStr = JsonUtils.toJson(packageParams);
-        setAttr("json", jsonStr);
-        System.out.println(jsonStr);
-//        renderJson("{\"code\":0}");
-        renderText(jsonStr);
-		}else if (institution_id.equals("03060002")) {
+	/**
+	 * 公众号支付js-sdk
+	 */
+	public void index() {
+//		String institution_id = this.getPara("institution_id");
+//		if (institution_id == null || !institution_id.equals("03060002")) {
 			String out_trade_no = this.getPara("out_trade_no");
 			if (out_trade_no == null) {
 				renderText("need out_trade_no");
 			}
-//			String appId = this.getPara("appId");
-//			if (appId == null) {
-//				renderText("need appId");
-//			}
+//		String appId = this.getPara("appId");
+//		if (appId == null) {
+//			renderText("need appId");
+//		}
 			String openid = this.getPara("openid");
 			if (openid == null) {
 				renderText("need openid");
@@ -145,453 +56,535 @@ public class WeixinPayController extends Controller {
 			if (notify_url == null) {
 				renderText("need notify_url");
 			}
-	        
+
 			ApiConfigKit.setThreadLocalAppId(appid);
 
-	        // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-
-	        Map<String, String> params = new HashMap<String, String>();
-	        params.put("appid", appid);
-	        params.put("mch_id", partner_jx);
-	        params.put("body", body);
-	        params.put("out_trade_no", out_trade_no);
-	        params.put("total_fee", total_fee);
-
-	        String ip = IpKit.getRealIp(getRequest());
-	        if (StrKit.isBlank(ip)) {
-	            ip = "127.0.0.1";
-	        }
-	        if (ip.contains(",")) {
-	            ip = ip.split(",")[0];
-	        }
-
-	        params.put("spbill_create_ip", ip);
-	        params.put("trade_type", TradeType.JSAPI.name());
-	        params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-	        params.put("notify_url", notify_url);
-	        params.put("openid", openid);
-
-	        String sign = PaymentKit.createSign(params, paternerKey_jx);
-	        params.put("sign", sign);
-	        String xmlResult = PaymentApi.pushOrder(params);
-
-	        System.out.println(xmlResult);
-
-	        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
-
-	        String return_code = result.get("return_code");
-	        String return_msg = result.get("return_msg");
-	        if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-	            renderText(xmlResult);
-	            return;
-	        }
-	        String result_code = result.get("result_code");
-	        if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-	            renderText(xmlResult);
-	            return;
-	        }
-	        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-	        String prepay_id = result.get("prepay_id");
-
-	        Map<String, String> packageParams = new HashMap<String, String>();
-	        packageParams.put("appId", appid);
-	        packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
-	        packageParams.put("nonceStr", System.currentTimeMillis() + "");
-	        packageParams.put("package", "prepay_id=" + prepay_id);
-	        packageParams.put("signType", "MD5");
-	        String packageSign = PaymentKit.createSign(packageParams, paternerKey_jx);
-	        packageParams.put("paySign", packageSign);
-
-	        String jsonStr = JsonUtils.toJson(packageParams);
-	        setAttr("json", jsonStr);
-	        System.out.println(jsonStr);
-//	        renderJson("{\"code\":0}");
-	        renderText(jsonStr);
+			// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
+
+			Map<String, String> params = new HashMap<String, String>();
+			params.put("appid", appid);
+			params.put("mch_id", partner);
+			params.put("body", body);
+			params.put("out_trade_no", out_trade_no);
+			params.put("total_fee", total_fee);
+
+			String ip = IpKit.getRealIp(getRequest());
+			if (StrKit.isBlank(ip)) {
+				ip = "127.0.0.1";
+			}
+			if (ip.contains(",")) {
+				ip = ip.split(",")[0];
+			}
+
+			params.put("spbill_create_ip", ip);
+			params.put("trade_type", TradeType.JSAPI.name());
+			params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+			params.put("notify_url", notify_url);
+			params.put("openid", openid);
+
+			String sign = PaymentKit.createSign(params, paternerKey);
+			params.put("sign", sign);
+			String xmlResult = PaymentApi.pushOrder(params);
+
+			System.out.println(xmlResult);
+
+			Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
+
+			String return_code = result.get("return_code");
+			String return_msg = result.get("return_msg");
+			if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+				renderText(xmlResult);
+				return;
+			}
+			String result_code = result.get("result_code");
+			if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
+				renderText(xmlResult);
+				return;
+			}
+			// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+			String prepay_id = result.get("prepay_id");
+
+			Map<String, String> packageParams = new HashMap<String, String>();
+			packageParams.put("appId", appid);
+			packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
+			packageParams.put("nonceStr", System.currentTimeMillis() + "");
+			packageParams.put("package", "prepay_id=" + prepay_id);
+			packageParams.put("signType", "MD5");
+			String packageSign = PaymentKit.createSign(packageParams, paternerKey);
+			packageParams.put("paySign", packageSign);
+
+			String jsonStr = JsonUtils.toJson(packageParams);
+			setAttr("json", jsonStr);
+			System.out.println(jsonStr);
+//        renderJson("{\"code\":0}");
+			renderText(jsonStr);
+//		} else if (institution_id.equals("03060002")) {
+//			String out_trade_no = this.getPara("out_trade_no");
+//			if (out_trade_no == null) {
+//				renderText("need out_trade_no");
+//			}
+////			String appId = this.getPara("appId");
+////			if (appId == null) {
+////				renderText("need appId");
+////			}
+//			String openid = this.getPara("openid");
+//			if (openid == null) {
+//				renderText("need openid");
+//			}
+//			String body = this.getPara("body");
+//			if (body == null) {
+//				renderText("need body");
+//			}
+//			String total_fee = this.getPara("total_fee");
+//			if (total_fee == null) {
+//				renderText("need total_fee");
+//			}
+//			String notify_url = this.getPara("notify_url");
+//			if (notify_url == null) {
+//				renderText("need notify_url");
+//			}
+//
+//			ApiConfigKit.setThreadLocalAppId(appid);
+//
+//			// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
+//
+//			Map<String, String> params = new HashMap<String, String>();
+//			params.put("appid", appid);
+//			params.put("mch_id", partner_jx);
+//			params.put("body", body);
+//			params.put("out_trade_no", out_trade_no);
+//			params.put("total_fee", total_fee);
+//
+//			String ip = IpKit.getRealIp(getRequest());
+//			if (StrKit.isBlank(ip)) {
+//				ip = "127.0.0.1";
+//			}
+//			if (ip.contains(",")) {
+//				ip = ip.split(",")[0];
+//			}
+//
+//			params.put("spbill_create_ip", ip);
+//			params.put("trade_type", TradeType.JSAPI.name());
+//			params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+//			params.put("notify_url", notify_url);
+//			params.put("openid", openid);
+//
+//			String sign = PaymentKit.createSign(params, paternerKey_jx);
+//			params.put("sign", sign);
+//			String xmlResult = PaymentApi.pushOrder(params);
+//
+//			System.out.println(xmlResult);
+//
+//			Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
+//
+//			String return_code = result.get("return_code");
+//			String return_msg = result.get("return_msg");
+//			if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+//				renderText(xmlResult);
+//				return;
+//			}
+//			String result_code = result.get("result_code");
+//			if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
+//				renderText(xmlResult);
+//				return;
+//			}
+//			// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+//			String prepay_id = result.get("prepay_id");
+//
+//			Map<String, String> packageParams = new HashMap<String, String>();
+//			packageParams.put("appId", appid);
+//			packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
+//			packageParams.put("nonceStr", System.currentTimeMillis() + "");
+//			packageParams.put("package", "prepay_id=" + prepay_id);
+//			packageParams.put("signType", "MD5");
+//			String packageSign = PaymentKit.createSign(packageParams, paternerKey_jx);
+//			packageParams.put("paySign", packageSign);
+//
+//			String jsonStr = JsonUtils.toJson(packageParams);
+//			setAttr("json", jsonStr);
+//			System.out.println(jsonStr);
+////	        renderJson("{\"code\":0}");
+//			renderText(jsonStr);
+//		}
+
+	}
+
+	/**
+	 * 支付成功通知
+	 */
+	public void pay_notify() {
+		// 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
+		String xmlMsg = HttpKit.readData(getRequest());
+		System.out.println("支付通知=" + xmlMsg);
+		Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
+
+		String result_code = params.get("result_code");
+		// 总金额
+		String totalFee = params.get("total_fee");
+		// 商户订单号
+		String orderId = params.get("out_trade_no");
+		// 微信支付订单号
+		String transId = params.get("transaction_id");
+		// 支付完成时间,格式为yyyyMMddHHmmss
+		String timeEnd = params.get("time_end");
+
+		// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
+		// 避免已经成功、关闭、退款的订单被再次更新
+
+		if (PaymentKit.verifyNotify(params, paternerKey)) {
+			if (("SUCCESS").equals(result_code)) {
+				// 更新订单信息
+				System.out.println("更新订单信息");
+
+				Map<String, String> xml = new HashMap<String, String>();
+				xml.put("return_code", "SUCCESS");
+				xml.put("return_msg", "OK");
+				renderText(PaymentKit.toXml(xml));
+				return;
+			}
 		}
-		
-    }
-
-    /**
-     * 支付成功通知
-     */
-    public void pay_notify() {
-        // 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
-        String xmlMsg = HttpKit.readData(getRequest());
-        System.out.println("支付通知="+xmlMsg);
-        Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
-
-        String result_code  = params.get("result_code");
-        // 总金额
-        String totalFee     = params.get("total_fee");
-        // 商户订单号
-        String orderId      = params.get("out_trade_no");
-        // 微信支付订单号
-        String transId      = params.get("transaction_id");
-        // 支付完成时间,格式为yyyyMMddHHmmss
-        String timeEnd      = params.get("time_end");
-
-        // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
-        // 避免已经成功、关闭、退款的订单被再次更新
-
-        if(PaymentKit.verifyNotify(params, paternerKey)){
-            if (("SUCCESS").equals(result_code)) {
-                //更新订单信息
-                System.out.println("更新订单信息");
-
-                Map<String, String> xml = new HashMap<String, String>();
-                xml.put("return_code", "SUCCESS");
-                xml.put("return_msg", "OK");
-                renderText(PaymentKit.toXml(xml));
-                return;
-            }
-        }
-        renderText("");
-    }
-    /**
-     *
-     * @author Javen
-     * 2016年5月14日
-     * PC扫码支付获取二维码(模式一)
-     */
-    @NotAction
-    public String getCodeUrl(String productId){
-        String url="weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
-
-        String timeStamp=Long.toString(System.currentTimeMillis() / 1000);
-        String nonceStr=Long.toString(System.currentTimeMillis());
-        Map<String, String> packageParams = new HashMap<String, String>();
-        packageParams.put("appid", appid);
-        packageParams.put("mch_id", partner);
-        packageParams.put("product_id", productId);
-        packageParams.put("time_stamp", timeStamp);
-        packageParams.put("nonce_str", nonceStr);
-        String packageSign = PaymentKit.createSign(packageParams, paternerKey);
-
-        return String.format(url, packageSign, appid, partner, productId, timeStamp, nonceStr);
-    }
-
-    public void test(){
-        String product_id = "001";
-        renderText(getCodeUrl(product_id));
-    }
-
-    /**
-     * @author Javen
-     * 2016年5月14日
-     * PC扫码支付回调(模式一)
-     */
-    public void wxpay(){
-        String result = HttpKit.readData(getRequest());
-        System.out.println("回调结果="+result);
-        /**
-         * 获取返回的信息内容中各个参数的值
-         */
-        Map<String, String> map = PaymentKit.xmlToMap(result);
-        for (String key : map.keySet()) {
-            System.out.println("key= "+ key + " and value= " + map.get(key));
-        }
-
-        String appid=map.get("appid");
-        String openid = map.get("openid");
-        String mch_id = map.get("mch_id");
-        String is_subscribe = map.get("is_subscribe");
-        String nonce_str = map.get("nonce_str");
-        String product_id = map.get("product_id");
-        String sign = map.get("sign");
-        Map<String, String> packageParams = new HashMap<String, String>();
-        packageParams.put("appid", appid);
-        packageParams.put("openid", openid);
-        packageParams.put("mch_id",mch_id);
-        packageParams.put("is_subscribe",is_subscribe);
-        packageParams.put("nonce_str",nonce_str);
-        packageParams.put("product_id", product_id);
-
-        String packageSign = PaymentKit.createSign(packageParams, paternerKey);
-        if (sign.equals(packageSign)) {
-            // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-
-            Map<String, String> params = new HashMap<String, String>();
-            params.put("appid", appid);
-            params.put("mch_id", mch_id);
-            params.put("body", "测试扫码支付");
-            String out_trade_no=Long.toString(System.currentTimeMillis());
-            params.put("out_trade_no", out_trade_no);
-            int price=((int)(Float.valueOf(10)*100));
-            params.put("total_fee", price+"");
-            params.put("attach", out_trade_no);
-
-            String ip = IpKit.getRealIp(getRequest());
-            if (StrKit.isBlank(ip)) {
-                ip = "127.0.0.1";
-            }
-
-            params.put("spbill_create_ip", ip);
-            params.put("trade_type", TradeType.NATIVE.name());
-            params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-            params.put("notify_url", notify_url);
-            params.put("openid", openid);
-
-            String paysign = PaymentKit.createSign(params, paternerKey);
-            params.put("sign", paysign);
-
-            String xmlResult = PaymentApi.pushOrder(params);
-
-            System.out.println("prepay_xml>>>"+xmlResult);
-            Map<String, String> payResult = PaymentKit.xmlToMap(xmlResult);
-
-            String return_code = payResult.get("return_code");
-            String return_msg = payResult.get("return_msg");
-
-            if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-                System.out.println("return_code>>>"+return_msg);
-                return;
-            }
-            if (StrKit.isBlank(return_msg) || !"OK".equals(return_msg)) {
-                System.out.println("return_msg>>>>"+return_msg);
-                return;
-            }
-            // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-            String prepay_id = payResult.get("prepay_id");
-
-            Map<String, String> prepayParams = new HashMap<String, String>();
-            prepayParams.put("return_code", "SUCCESS");
-            prepayParams.put("appId", appid);
-            prepayParams.put("mch_id", mch_id);
-            prepayParams.put("nonceStr", System.currentTimeMillis() + "");
-            prepayParams.put("prepay_id", prepay_id);
-            prepayParams.put("result_code", "SUCCESS");
-            String prepaySign = PaymentKit.createSign(prepayParams, paternerKey);
-            prepayParams.put("sign", prepaySign);
-            String xml = PaymentKit.toXml(prepayParams);
-
-            System.out.println(xml);
-
-            renderText(xml);
-        }
-    }
-    
-    
-    /**
-	 * 刷卡支付
-	 * 文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1
+		renderText("");
+	}
+
+	/**
+	 *
+	 * @author Javen 2016年5月14日 PC扫码支付获取二维码(模式一)
+	 */
+	@NotAction
+	public String getCodeUrl(String productId) {
+		String url = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
+
+		String timeStamp = Long.toString(System.currentTimeMillis() / 1000);
+		String nonceStr = Long.toString(System.currentTimeMillis());
+		Map<String, String> packageParams = new HashMap<String, String>();
+		packageParams.put("appid", appid);
+		packageParams.put("mch_id", partner);
+		packageParams.put("product_id", productId);
+		packageParams.put("time_stamp", timeStamp);
+		packageParams.put("nonce_str", nonceStr);
+		String packageSign = PaymentKit.createSign(packageParams, paternerKey);
+
+		return String.format(url, packageSign, appid, partner, productId, timeStamp, nonceStr);
+	}
+
+	public void test() {
+		String product_id = "001";
+		renderText(getCodeUrl(product_id));
+	}
+
+	/**
+	 * @author Javen 2016年5月14日 PC扫码支付回调(模式一)
 	 */
-	public void micropay(){
-		String url="https://api.mch.weixin.qq.com/pay/micropay";
-		
-		String total_fee="1";
-		String auth_code = getPara("auth_code");//测试时直接手动输入刷卡页面上的18位数字
-		
+	public void wxpay() {
+		String result = HttpKit.readData(getRequest());
+		System.out.println("回调结果=" + result);
+		/**
+		 * 获取返回的信息内容中各个参数的值
+		 */
+		Map<String, String> map = PaymentKit.xmlToMap(result);
+		for (String key : map.keySet()) {
+			System.out.println("key= " + key + " and value= " + map.get(key));
+		}
+
+		String appid = map.get("appid");
+		String openid = map.get("openid");
+		String mch_id = map.get("mch_id");
+		String is_subscribe = map.get("is_subscribe");
+		String nonce_str = map.get("nonce_str");
+		String product_id = map.get("product_id");
+		String sign = map.get("sign");
+		Map<String, String> packageParams = new HashMap<String, String>();
+		packageParams.put("appid", appid);
+		packageParams.put("openid", openid);
+		packageParams.put("mch_id", mch_id);
+		packageParams.put("is_subscribe", is_subscribe);
+		packageParams.put("nonce_str", nonce_str);
+		packageParams.put("product_id", product_id);
+
+		String packageSign = PaymentKit.createSign(packageParams, paternerKey);
+		if (sign.equals(packageSign)) {
+			// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
+
+			Map<String, String> params = new HashMap<String, String>();
+			params.put("appid", appid);
+			params.put("mch_id", mch_id);
+			params.put("body", "测试扫码支付");
+			String out_trade_no = Long.toString(System.currentTimeMillis());
+			params.put("out_trade_no", out_trade_no);
+			int price = ((int) (Float.valueOf(10) * 100));
+			params.put("total_fee", price + "");
+			params.put("attach", out_trade_no);
+
+			String ip = IpKit.getRealIp(getRequest());
+			if (StrKit.isBlank(ip)) {
+				ip = "127.0.0.1";
+			}
+
+			params.put("spbill_create_ip", ip);
+			params.put("trade_type", TradeType.NATIVE.name());
+			params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+			params.put("notify_url", notify_url);
+			params.put("openid", openid);
+
+			String paysign = PaymentKit.createSign(params, paternerKey);
+			params.put("sign", paysign);
+
+			String xmlResult = PaymentApi.pushOrder(params);
+
+			System.out.println("prepay_xml>>>" + xmlResult);
+			Map<String, String> payResult = PaymentKit.xmlToMap(xmlResult);
+
+			String return_code = payResult.get("return_code");
+			String return_msg = payResult.get("return_msg");
+
+			if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+				System.out.println("return_code>>>" + return_msg);
+				return;
+			}
+			if (StrKit.isBlank(return_msg) || !"OK".equals(return_msg)) {
+				System.out.println("return_msg>>>>" + return_msg);
+				return;
+			}
+			// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+			String prepay_id = payResult.get("prepay_id");
+
+			Map<String, String> prepayParams = new HashMap<String, String>();
+			prepayParams.put("return_code", "SUCCESS");
+			prepayParams.put("appId", appid);
+			prepayParams.put("mch_id", mch_id);
+			prepayParams.put("nonceStr", System.currentTimeMillis() + "");
+			prepayParams.put("prepay_id", prepay_id);
+			prepayParams.put("result_code", "SUCCESS");
+			String prepaySign = PaymentKit.createSign(prepayParams, paternerKey);
+			prepayParams.put("sign", prepaySign);
+			String xml = PaymentKit.toXml(prepayParams);
+
+			System.out.println(xml);
+
+			renderText(xml);
+		}
+	}
+
+	/**
+	 * 刷卡支付 文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1
+	 */
+	public void micropay() {
+		String url = "https://api.mch.weixin.qq.com/pay/micropay";
+
+		String total_fee = "1";
+		String auth_code = getPara("auth_code");// 测试时直接手动输入刷卡页面上的18位数字
+
 		Map<String, String> params = new HashMap<String, String>();
 		params.put("appid", appid);
 		params.put("mch_id", partner);
-		params.put("device_info", "javen205");//终端设备号
+		params.put("device_info", "javen205");// 终端设备号
 		params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
 		params.put("body", "刷卡支付测试");
 //		params.put("detail", "json字符串");//非必须
-		params.put("attach", "javen205");//附加参数非必须
-		String out_trade_no=System.currentTimeMillis()+"";
+		params.put("attach", "javen205");// 附加参数非必须
+		String out_trade_no = System.currentTimeMillis() + "";
 		params.put("out_trade_no", out_trade_no);
 		params.put("total_fee", total_fee);
-		
+
 		String ip = IpKit.getRealIp(getRequest());
 		if (StrKit.isBlank(ip)) {
 			ip = "127.0.0.1";
 		}
-		
+
 		params.put("spbill_create_ip", ip);
 		params.put("auth_code", auth_code);
-		
+
 		String sign = PaymentKit.createSign(params, paternerKey);
 		params.put("sign", sign);
-		
+
 		String xmlResult = HttpUtils.post(url, PaymentKit.toXml(params));
-		//同步返回结果
-		System.out.println("xmlResult:"+xmlResult);
-		
+		// 同步返回结果
+		System.out.println("xmlResult:" + xmlResult);
+
 		Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
 		String return_code = result.get("return_code");
 		if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-			//通讯失败 
+			// 通讯失败
 			String err_code = result.get("err_code");
-			//用户支付中,需要输入密码
+			// 用户支付中,需要输入密码
 			if (err_code.equals("USERPAYING")) {
-				//等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2
-				
+				// 等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2
+
 			}
-			renderText("通讯失败>>"+xmlResult);
+			renderText("通讯失败>>" + xmlResult);
 			return;
 		}
-		
+
 		String result_code = result.get("result_code");
 		if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-			//支付失败
-			renderText("支付失败>>"+xmlResult);
+			// 支付失败
+			renderText("支付失败>>" + xmlResult);
 			return;
 		}
-		
-		//支付成功 返回参会入库 业务逻辑处理
-		
+
+		// 支付成功 返回参会入库 业务逻辑处理
+
 		renderText(xmlResult);
 	}
 
-    /**
-     * PC支付模式二,PC支付不需要openid
-     */
-    public void pcModeTwo() {
-        // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-        Map<String, String> params = new HashMap<String, String>();
-        params.put("appid", appid);
-        params.put("mch_id", partner);
-        params.put("body", "JFinal2.2极速开发");
-
-        // 商品ID trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
-        params.put("product_id", "1");
-        // 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
-        params.put("out_trade_no", "97777368222");
-        params.put("total_fee", "1");
-
-        String ip = IpKit.getRealIp(getRequest());
-        if (StrKit.isBlank(ip)) {
-            ip = "127.0.0.1";
-        }
-
-        params.put("spbill_create_ip", ip);
-        params.put("trade_type", TradeType.NATIVE.name());
-        params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-        params.put("notify_url", notify_url);
-
-        String sign = PaymentKit.createSign(params, paternerKey);
-        params.put("sign", sign);
-        String xmlResult = PaymentApi.pushOrder(params);
-
-        System.out.println(xmlResult);
-        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
-
-        String return_code = result.get("return_code");
-        String return_msg = result.get("return_msg");
-        if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-            renderText(return_msg);
-            return;
-        }
-        String result_code = result.get("result_code");
-        if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-            renderText(return_msg);
-            return;
-        }
-        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-        String prepay_id = result.get("prepay_id");
-        // trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
-        String code_url = result.get("code_url");
-
-        setAttr("code_url", code_url);
-        render("/jsp/pc_pay.jsp");
-    }
-
-    /**
-     * wap支付第一版本
-     */
-    public void wap1() {
-        Map<String, String> params = new HashMap<String, String>();
-        params.put("appid", appid);
-        params.put("mch_id", partner);
-        params.put("body", "JFinal2.0极速开发");
-        params.put("out_trade_no", "977773682111");
-        params.put("total_fee", "1");
-
-        String ip = IpKit.getRealIp(getRequest());
-        if (StrKit.isBlank(ip)) {
-            ip = "127.0.0.1";
-        }
-
-        params.put("spbill_create_ip", ip);
-        params.put("trade_type", TradeType.WAP.name());
-        params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-        params.put("notify_url", notify_url);
-
-        String sign = PaymentKit.createSign(params, paternerKey);
-        params.put("sign", sign);
-        String xmlResult = PaymentApi.pushOrder(params);
-
-        System.out.println(xmlResult);
-        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
-
-        String return_code = result.get("return_code");
-        String return_msg = result.get("return_msg");
-        if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-            renderText(return_msg);
-            return;
-        }
-        String result_code = result.get("result_code");
-        if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-            renderText(return_msg);
-            return;
-        }
-        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-        String prepayId = result.get("prepay_id");
-        String url = PaymentApi.getDeepLink(appid, prepayId, paternerKey);
-
-        // 微信那边的开发建议用a标签打开该链接
-        setAttr("url", url);
-    }
-
-    /**
-     * wap支付第二版
-     */
-    public void wap2() {
-        Map<String, String> params = new HashMap<String, String>();
-        params.put("appid", appid);
-        params.put("mch_id", partner);
-        params.put("body", "JFinal2.0极速开发");
-        params.put("out_trade_no", "977773682111");
-        params.put("total_fee", "1");
-
-        String ip = IpKit.getRealIp(getRequest());
-        if (StrKit.isBlank(ip)) {
-            ip = "127.0.0.1";
-        }
-
-        params.put("spbill_create_ip", ip);
-        params.put("trade_type", TradeType.MWEB.name());
-        params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
-        params.put("notify_url", notify_url);
-
-        String sign = PaymentKit.createSign(params, paternerKey);
-        params.put("sign", sign);
-        String xmlResult = PaymentApi.pushOrder(params);
-
-        System.out.println(xmlResult);
-        Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
-
-        String return_code = result.get("return_code");
-        String return_msg = result.get("return_msg");
-        if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
-            renderText(return_msg);
-            return;
-        }
-        String result_code = result.get("result_code");
-        if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
-            renderText(return_msg);
-            return;
-        }
-        // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
-        String url = result.get("mweb_url");
-
-        // 微信那边的开发建议用a标签打开该链接
-        setAttr("url", url);
-    }
-    
-    public String getParamByUrl(String url, String name) {
-	    url += "&";
-	    String pattern = "(\\?|&){1}#{0,1}" + name + "=[a-zA-Z0-9]*(&{1})";
-
-	    Pattern r = Pattern.compile(pattern);
-
-	    Matcher m = r.matcher(url);
-	    if (m.find( )) {
+	/**
+	 * PC支付模式二,PC支付不需要openid
+	 */
+	public void pcModeTwo() {
+		// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
+		Map<String, String> params = new HashMap<String, String>();
+		params.put("appid", appid);
+		params.put("mch_id", partner);
+		params.put("body", "JFinal2.2极速开发");
+
+		// 商品ID trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
+		params.put("product_id", "1");
+		// 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
+		params.put("out_trade_no", "97777368222");
+		params.put("total_fee", "1");
+
+		String ip = IpKit.getRealIp(getRequest());
+		if (StrKit.isBlank(ip)) {
+			ip = "127.0.0.1";
+		}
+
+		params.put("spbill_create_ip", ip);
+		params.put("trade_type", TradeType.NATIVE.name());
+		params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+		params.put("notify_url", notify_url);
+
+		String sign = PaymentKit.createSign(params, paternerKey);
+		params.put("sign", sign);
+		String xmlResult = PaymentApi.pushOrder(params);
+
+		System.out.println(xmlResult);
+		Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
+
+		String return_code = result.get("return_code");
+		String return_msg = result.get("return_msg");
+		if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+			renderText(return_msg);
+			return;
+		}
+		String result_code = result.get("result_code");
+		if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
+			renderText(return_msg);
+			return;
+		}
+		// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+		String prepay_id = result.get("prepay_id");
+		// trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
+		String code_url = result.get("code_url");
+
+		setAttr("code_url", code_url);
+		render("/jsp/pc_pay.jsp");
+	}
+
+	/**
+	 * wap支付第一版本
+	 */
+	public void wap1() {
+		Map<String, String> params = new HashMap<String, String>();
+		params.put("appid", appid);
+		params.put("mch_id", partner);
+		params.put("body", "JFinal2.0极速开发");
+		params.put("out_trade_no", "977773682111");
+		params.put("total_fee", "1");
+
+		String ip = IpKit.getRealIp(getRequest());
+		if (StrKit.isBlank(ip)) {
+			ip = "127.0.0.1";
+		}
+
+		params.put("spbill_create_ip", ip);
+		params.put("trade_type", TradeType.WAP.name());
+		params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+		params.put("notify_url", notify_url);
+
+		String sign = PaymentKit.createSign(params, paternerKey);
+		params.put("sign", sign);
+		String xmlResult = PaymentApi.pushOrder(params);
+
+		System.out.println(xmlResult);
+		Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
+
+		String return_code = result.get("return_code");
+		String return_msg = result.get("return_msg");
+		if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+			renderText(return_msg);
+			return;
+		}
+		String result_code = result.get("result_code");
+		if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
+			renderText(return_msg);
+			return;
+		}
+		// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+		String prepayId = result.get("prepay_id");
+		String url = PaymentApi.getDeepLink(appid, prepayId, paternerKey);
+
+		// 微信那边的开发建议用a标签打开该链接
+		setAttr("url", url);
+	}
+
+	/**
+	 * wap支付第二版
+	 */
+	public void wap2() {
+		Map<String, String> params = new HashMap<String, String>();
+		params.put("appid", appid);
+		params.put("mch_id", partner);
+		params.put("body", "JFinal2.0极速开发");
+		params.put("out_trade_no", "977773682111");
+		params.put("total_fee", "1");
+
+		String ip = IpKit.getRealIp(getRequest());
+		if (StrKit.isBlank(ip)) {
+			ip = "127.0.0.1";
+		}
+
+		params.put("spbill_create_ip", ip);
+		params.put("trade_type", TradeType.MWEB.name());
+		params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
+		params.put("notify_url", notify_url);
+
+		String sign = PaymentKit.createSign(params, paternerKey);
+		params.put("sign", sign);
+		String xmlResult = PaymentApi.pushOrder(params);
+
+		System.out.println(xmlResult);
+		Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
+
+		String return_code = result.get("return_code");
+		String return_msg = result.get("return_msg");
+		if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
+			renderText(return_msg);
+			return;
+		}
+		String result_code = result.get("result_code");
+		if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
+			renderText(return_msg);
+			return;
+		}
+		// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
+		String url = result.get("mweb_url");
+
+		// 微信那边的开发建议用a标签打开该链接
+		setAttr("url", url);
+	}
+
+	public String getParamByUrl(String url, String name) {
+		url += "&";
+		String pattern = "(\\?|&){1}#{0,1}" + name + "=[a-zA-Z0-9]*(&{1})";
+
+		Pattern r = Pattern.compile(pattern);
+
+		Matcher m = r.matcher(url);
+		if (m.find()) {
 //	        System.out.println(m.group(0));
-	        return m.group(0).split("=")[1].replace("&", "");
-	    } else {
-	        return null;
-	    }
+			return m.group(0).split("=")[1].replace("&", "");
+		} else {
+			return null;
+		}
 	}
 }