Quellcode durchsuchen

修复微信支付bug

刘韬 vor 5 Jahren
Ursprung
Commit
477f933394

+ 39 - 2
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WeixinPayController.java

@@ -1,18 +1,25 @@
 package com.zskk.controller;
 
+import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import com.jfinal.core.Controller;
 import com.jfinal.core.NotAction;
 import com.jfinal.kit.HttpKit;
 import com.jfinal.kit.StrKit;
+import com.jfinal.weixin.sdk.api.ApiConfigKit;
 import com.jfinal.weixin.sdk.api.PaymentApi;
+import com.jfinal.weixin.sdk.api.SnsAccessToken;
 import com.jfinal.weixin.sdk.api.PaymentApi.TradeType;
 import com.jfinal.weixin.sdk.kit.IpKit;
 import com.jfinal.weixin.sdk.kit.PaymentKit;
 import com.jfinal.weixin.sdk.utils.HttpUtils;
 import com.jfinal.weixin.sdk.utils.JsonUtils;
+import com.zskk.service.ServiceFactory;
+import com.zskk.service.WeixinService;
 
 public class WeixinPayController extends Controller {
 
@@ -29,8 +36,23 @@ public class WeixinPayController extends Controller {
     	String origin = this.getRequest().getHeader("Origin");
 		this.getResponse().setHeader("Access-Control-Allow-Origin", origin);
 		this.getResponse().setHeader("Access-Control-Allow-Credentials", Boolean.TRUE.toString());
+		String asString = this.getPara("out_trade_no");
+		String bbString = this.getPara("appId");
+
+		WeixinService wService = ServiceFactory.getService(WeixinService.class);
+		String codeString = "";
+		ApiConfigKit.setThreadLocalAppId(bbString);
+		try {
+			String url = wService.getCodeUrl(ApiConfigKit.getApiConfig().getAppId(), getRequest().getRequestURL().toString() + "?appId=" + ApiConfigKit.getApiConfig().getAppId());
+		    codeString = getParamByUrl(url, "code");
+		} catch (UnsupportedEncodingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		SnsAccessToken snsAccessToken = wService.getWebAccessToken(ApiConfigKit.getApiConfig().getAppId(), ApiConfigKit.getApiConfig().getAppSecret(), codeString);
+
         // openId,采用 网页授权获取 access_token API:SnsAccessTokenApi获取
-        String openId = "oEhm60uDHXDbTcQZOuQt612ds-Pc";
+        String openId = snsAccessToken.getOpenid();
 
         // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
 
@@ -38,7 +60,7 @@ public class WeixinPayController extends Controller {
         params.put("appid", appid);
         params.put("mch_id", partner);
         params.put("body", "远程诊断收费测试");
-        params.put("out_trade_no", "977773682111");
+        params.put("out_trade_no", asString);
         params.put("total_fee", "1");
 
         String ip = IpKit.getRealIp(getRequest());
@@ -458,4 +480,19 @@ public class WeixinPayController extends Controller {
         // 微信那边的开发建议用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;
+	    }
+	}
 }

+ 32 - 1
PacsOnline_Wechat_Patient/src/main/java/com/zskk/service/WeixinService.java

@@ -1,8 +1,13 @@
 package com.zskk.service;
 
 import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URLEncoder;
 import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import com.jfinal.kit.HashKit;
 import com.jfinal.weixin.sdk.api.ApiConfigKit;
 import com.jfinal.weixin.sdk.api.ApiResult;
@@ -140,7 +145,21 @@ public class WeixinService {
 //			System.out.println(result.getJson());
 //		}
 	}
-	
+	public static 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;
+	    }
+	}
+
 	public static void main(String[] args) {
 //			DruidPlugin druidPlugin = new DruidPlugin("jdbc:mysql://www.pacsonline.cn:3306/pacsonline?useSSL=false", "pacs",
 //					"ZSKK@2017~!@#".trim());
@@ -170,5 +189,17 @@ public class WeixinService {
 //		}
 //		PUSH_TYPE dType = PUSH_TYPE.REMOTE_DIAGNOSIS_PATIENT_PAY;
 ////			System.out.println(dType.getPushType());
+		try {
+			URI fUri =new URI("http://www.163.com?a=aw&b-cd");
+			
+			fUri.getQuery();
+			String aString = getParamByUrl("http://www.163.com?a=aw&b-cd", "a");
+			System.out.println(aString);
+
+		} catch (URISyntaxException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
 	}
 }