From 310c580dbb2db9d7b8182e20ecb0b8866d50401d Mon Sep 17 00:00:00 2001
From: wangsq <944414428@qq.com>
Date: Wed, 20 Aug 2025 09:37:30 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=B0=83=E6=95=B4=EF=BC=9A=E6=AD=A6?=
=?UTF-8?q?=E5=AE=9A=E4=B8=AD=E5=8C=BB=E9=99=A2=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E9=9C=80=E8=A6=81=E4=BD=BF=E7=94=A8=E5=85=AC=E4=BC=97=E5=8F=B7?=
=?UTF-8?q?=E7=9A=84=E7=BD=91=E9=A1=B5=E9=93=BE=E6=8E=A5=EF=BC=8C=E5=BF=85?=
=?UTF-8?q?=E9=A1=BB=E4=B8=BAhttps=E4=B8=BA=E4=BA=86=E6=96=B9=E4=BE=BF?=
=?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=88=E6=9D=83=E5=8F=AF=E6=90=BA=E5=B8=A6?=
=?UTF-8?q?=E5=8D=8F=E8=AE=AE=E7=B1=BB=E5=9E=8B=EF=BC=8C=E7=94=A8=E4=BA=8E?=
=?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=97=B6=E6=8E=A7=E5=88=B6=E9=87=8D=E5=AE=9A?=
=?UTF-8?q?=E5=90=91=E7=9A=84=E8=AE=A4=E8=AF=81=E5=8D=8F=E8=AE=AE=E7=B1=BB?=
=?UTF-8?q?=E5=9E=8B=EF=BC=8C=E5=B9=B6=E8=AE=BE=E7=BD=AE=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD=E7=9A=84=E5=8D=8F=E8=AE=AE=E4=B8=BA?=
=?UTF-8?q?=E6=9C=80=E9=AB=98=E4=BC=98=E5=85=88=E7=BA=A7=EF=BC=8C=E5=8F=AF?=
=?UTF-8?q?=E5=BC=BA=E5=88=B6=E4=B8=BAhttps=E3=80=82=202=E3=80=81=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ynxbd/common/action/HealthCodeAction.java | 76 +++----------------
.../ynxbd/common/action/pay/WxAuthAction.java | 4 +-
.../ynxbd/common/action/pay/WxPayAction.java | 4 +-
.../ynxbd/common/service/HCodeService.java | 47 ++++++++++--
.../com/ynxbd/wx/config/WeChatConfig.java | 28 +++++--
.../com/ynxbd/wx/wxfactory/WxAuthHelper.java | 32 ++++++--
src/main/resources/ehcache.xml | 4 +-
src/main/resources/logback.xml | 2 +-
8 files changed, 109 insertions(+), 88 deletions(-)
diff --git a/src/main/java/com/ynxbd/common/action/HealthCodeAction.java b/src/main/java/com/ynxbd/common/action/HealthCodeAction.java
index d6c51b6..14601c3 100644
--- a/src/main/java/com/ynxbd/common/action/HealthCodeAction.java
+++ b/src/main/java/com/ynxbd/common/action/HealthCodeAction.java
@@ -302,16 +302,16 @@ public class HealthCodeAction extends BaseAction {
/**
* [升级绑定]-->已在HIS绑定-->注册健康卡
*
- * @param weChatCode
- * @param idCardNo
- * @param cardType
- * @param openid
- * @param tel
- * @param name
- * @param nation
- * @param patientId
- * @param address
- * @return
+ * @param weChatCode weChatCode
+ * @param idCardNo idCardNo
+ * @param cardType cardType
+ * @param openid openid
+ * @param tel tel
+ * @param name name
+ * @param nation nation
+ * @param patientId patientId
+ * @param address address
+ * @return Result
*/
@Action("upBind")
public Result upBind(String weChatCode, String idCardNo, String cardType, String openid, String tel, String name, String nation, String patientId, String address) {
@@ -419,7 +419,7 @@ public class HealthCodeAction extends BaseAction {
try {
jsonArray = new HCodeService().batchUpdate(lstPatient);
} catch (Exception e) {
- e.printStackTrace();
+ log.error(e.getMessage());
}
if (jsonArray == null) return;
@@ -434,58 +434,4 @@ public class HealthCodeAction extends BaseAction {
}, 2 * 1000, 30 * 1000);
}
-
- public static void main(String[] args) {
- HCodeService hCodeService = new HCodeService();
- String qrCodeText = hCodeService.getQRCodeText("F43F5B90877116A61D3B960EDAECBCDDDDE7F452605C23DD425CC79BF4644F61", "530127199711211059");
-
- hCodeService.reportHISData(qrCodeText, "口腔科", "0101011", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, "口腔科", "0101012", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, null, "0101013", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, null, "0101014", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
- // 门诊缴费
- hCodeService.reportHISData(qrCodeText, "口腔科", "0101051", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- "0100");
-
- // 门诊缴费记录
- hCodeService.reportHISData(qrCodeText, null, "0101052", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, null, "0101081", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, null, "0101082", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
- hCodeService.reportHISData(qrCodeText, null, "0101083", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
- null);
-
-
- }
-
-
-
-//
-// public static void main(String[] args){
-// String resultCode = "-10044";
-// HealthCardRespCodeEnum healthCardRespCodeEnum = HCodeService.resultCodeHandle(resultCode);
-// logger.info("resultCode=[" + resultCode + "],健康卡绑定失败原因,statusMsg=" + healthCardRespCodeEnum.getMessage() );
-// System.out.println(healthCardRespCodeEnum);
-// if (!healthCardRespCodeEnum.isContinue()) { // 不继续执行
-// System.out.println("停止");
-// Integer age = IDNumberHelper.getAge("532331202010054010");
-// if (age != null && age > 10) {
-// System.out.println(age);
-// }
-// }else{
-// System.out.println("继续");
-// }
-// }
}
diff --git a/src/main/java/com/ynxbd/common/action/pay/WxAuthAction.java b/src/main/java/com/ynxbd/common/action/pay/WxAuthAction.java
index 145c532..afdaa72 100644
--- a/src/main/java/com/ynxbd/common/action/pay/WxAuthAction.java
+++ b/src/main/java/com/ynxbd/common/action/pay/WxAuthAction.java
@@ -21,12 +21,12 @@ public class WxAuthAction extends BaseAction {
@Action("u_auth")
public Result u_auth() {
String auth = WxAuthHelper.auth(request, response, true);
- return Result.redirect(WeChatConfig.getBaseDomain() + auth);
+ return Result.redirect(auth);
}
@Action("b_auth")
public Result b_auth() {
String auth = WxAuthHelper.auth(request, response, true);
- return Result.redirect(WeChatConfig.getBaseDomain() + auth);
+ return Result.redirect(auth);
}
}
diff --git a/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java b/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java
index c70659c..269776c 100644
--- a/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java
+++ b/src/main/java/com/ynxbd/common/action/pay/WxPayAction.java
@@ -4,7 +4,8 @@ import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException;
-import com.ynxbd.common.service.*;
+import com.ynxbd.common.service.OutCollectService;
+import com.ynxbd.common.service.PayService;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.bean.WxPayNotify;
import com.ynxbd.wx.wxfactory.utils.WxRespHelper;
@@ -13,7 +14,6 @@ import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.math.BigDecimal;
-import java.util.Date;
@Slf4j
diff --git a/src/main/java/com/ynxbd/common/service/HCodeService.java b/src/main/java/com/ynxbd/common/service/HCodeService.java
index a690e5c..0157f7a 100644
--- a/src/main/java/com/ynxbd/common/service/HCodeService.java
+++ b/src/main/java/com/ynxbd/common/service/HCodeService.java
@@ -139,7 +139,7 @@ public class HCodeService {
}
- public Patient appBindHealthCard(String healthCode) {
+ public Patient appBindHealthCard(String healthCode) {
if (healthCode == null) {
return null;
}
@@ -180,9 +180,9 @@ public class HCodeService {
* @param idCardNo 证件号码
* @param phone1 联系方式1
*/
- public JSONObject registerHealthCard(String patientId, String weChatCode,
- String birthday, HCardTypeEnum cardTypeEnum, String address,
- String sex, String nation, String name, String idCardNo, String phone1) {
+ public JSONObject registerHealthCard(String patientId, String weChatCode,
+ String birthday, HCardTypeEnum cardTypeEnum, String address,
+ String sex, String nation, String name, String idCardNo, String phone1) {
try {
String appToken = getAppToken();
if (appToken == null) {
@@ -229,7 +229,7 @@ public class HCodeService {
*
* @param healthCode 健康卡授权码
*/
- public Patient getInfoByHealthCode(String healthCode) {
+ public Patient getInfoByHealthCode(String healthCode) {
try {
String appToken = getAppToken();
if (appToken == null) {
@@ -817,4 +817,41 @@ public class HCodeService {
return healthCardRespCodeEnum;
}
+
+ public static void main(String[] args) {
+ new HCodeService().dataUpload();
+ }
+
+ public void dataUpload() {
+ String qrCodeText = getQRCodeText("F43F5B90877116A61D3B960EDAECBCDDDDE7F452605C23DD425CC79BF4644F61", "530127199711211059");
+
+ reportHISData(qrCodeText, "口腔科", "0101011", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, "口腔科", "0101012", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, null, "0101013", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, null, "0101014", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+ // 门诊缴费
+ reportHISData(qrCodeText, "口腔科", "0101051", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ "0100");
+
+ // 门诊缴费记录
+ reportHISData(qrCodeText, null, "0101052", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, null, "0101081", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, null, "0101082", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+
+ reportHISData(qrCodeText, null, "0101083", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS,
+ null);
+ }
+
}
diff --git a/src/main/java/com/ynxbd/wx/config/WeChatConfig.java b/src/main/java/com/ynxbd/wx/config/WeChatConfig.java
index 5c5ae49..5bd8a67 100644
--- a/src/main/java/com/ynxbd/wx/config/WeChatConfig.java
+++ b/src/main/java/com/ynxbd/wx/config/WeChatConfig.java
@@ -26,6 +26,8 @@ public class WeChatConfig {
private static String CACHE_WEB_URL = null;
// 开启预结算(第2开关)
public static boolean IS_RECIPE_PREPAY;
+ // 判断链接是否有https
+ public static boolean HAS_HTTPS_BY_BASE_URL;
static {
ProperHelper config = new ProperHelper().read("wx.properties");
@@ -50,6 +52,8 @@ public class WeChatConfig {
if (BASE_URL == null) {
log.error("【微信】读取配置文件wx.properties失败");
+ } else {
+ HAS_HTTPS_BY_BASE_URL = BASE_URL.contains("https:");
}
}
@@ -59,7 +63,7 @@ public class WeChatConfig {
BASE_URL = "";
}
- if (BASE_URL.length() == 0) return BASE_URL;
+ if (BASE_URL.isEmpty()) return BASE_URL;
String path = BASE_URL;
String suffix = path.substring(path.length() - 1);
@@ -69,6 +73,13 @@ public class WeChatConfig {
return path;
}
+ public static String getBaseUrlByState(boolean isHttps) {
+ if (isHttps) {
+ return getHttpsBaseUrl();
+ }
+ return getBaseUrl();
+ }
+
public static String getHttpsBaseUrl() {
String url = getBaseUrl();
if (url != null && url.contains("http") && !url.contains("https")) {
@@ -80,11 +91,18 @@ public class WeChatConfig {
/**
* 获取配置中原本的域名
*/
- public static String getBaseDomain() {
+ public static String getBaseDomain(boolean isHttps) {
if (BASE_URL.length() < 4) {
return BASE_URL;
}
- return BASE_URL.substring(0, BASE_URL.length() - 4);
+ String url = BASE_URL.substring(0, BASE_URL.length() - 4);
+ if (isHttps) {
+ int index = url.indexOf("http://");
+ if (index == 0) {
+ url = "https://" + url.substring(7);
+ }
+ }
+ return url;
}
// 域名
@@ -97,14 +115,14 @@ public class WeChatConfig {
if (isHttps) {
int index = url.indexOf("http://");
if (index == 0) {
- url = "https://" + url.substring(index + 7);
+ url = "https://" + url.substring(7);
}
}
return url.substring(0, url.length() - 4);
}
public static String getWebPath(boolean isPrefix, boolean isSuffix) {
- if (WEB_PATH == null || WEB_PATH.length() == 0) return "/";
+ if (WEB_PATH == null || WEB_PATH.isEmpty()) return "/";
String path = WEB_PATH;
String prefix = path.substring(0, 1);
diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
index e108d09..c97c3dc 100644
--- a/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
+++ b/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
@@ -11,6 +11,7 @@ import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.bean.SnsOath2AccessToken;
import com.ynxbd.wx.wxfactory.bean.SnsUserInfo;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
import org.ehcache.Cache;
import javax.servlet.http.HttpServletRequest;
@@ -95,17 +96,26 @@ public class WxAuthHelper {
if (hash == null) hash = "";
if (state == null) state = "";
+ String protocol = ""; //
+ int index = state.indexOf("@protocol=");
+ if (index == -1) index = state.indexOf("%40protocol="); // 防止数据转义失败
+ if (index != -1) {
+ protocol = state.substring(index);
+ state = state.substring(0, index);
+ }
+
+ String domain = WeChatConfig.getBaseDomain(WeChatConfig.HAS_HTTPS_BY_BASE_URL || "@protocol=1".equals(protocol)); // 配置中baseURL有"https"时优先级最高 ["@protocol=1"为https;"@protocol=0"为默认的http;]
if (state.contains(".html")) {
- return state + hash;
+ return domain + state + hash;
} else {
String baseUrl = WeChatConfig.getBaseUrl();
if (baseUrl != null && state.contains(baseUrl)) {
- return state + hash;
+ return domain + state + hash;
}
}
} catch (Exception e) {
- e.printStackTrace();
+ log.error("[微信][获取重定向链接异常]{}", e.getMessage());
}
return null;
}
@@ -154,6 +164,10 @@ public class WxAuthHelper {
String state = request.getParameter("state");
String hash = request.getParameter("hash");
String isUserInfo = request.getParameter("isUserInfo");
+ String protocolState = request.getParameter("protocolState"); // 1:https;0:http
+ if (ObjectUtils.isEmpty(protocolState)) {
+ protocolState = "0";
+ }
if (hash == null) {
hash = "";
@@ -168,13 +182,19 @@ public class WxAuthHelper {
String api = ("true".equals(isUserInfo) ? "u_auth" : "b_auth");
String scope = ("true".equals(isUserInfo) ? "snsapi_userinfo" : "snsapi_base");
- state = OAUTH_URL + WeChatConfig.getBaseUrl() + "wx_auth/" + api +
- "?hash=" + hash + "&response_type=code" +
+ // 配置中baseURL有"https"时优先级最高
+ state = OAUTH_URL + WeChatConfig.getBaseUrlByState((WeChatConfig.HAS_HTTPS_BY_BASE_URL || "1".equals(protocolState))) +
+ "wx_auth/" + api +
+ "?hash=" + hash +
+ "&response_type=code" +
"&scope=" + scope + "&forcePopup=true" +
- "&state=" + decode + "#wechat_redirect";
+ "&state=" + decode +
+ "%40protocol=" + protocolState +
+ "#wechat_redirect";
state = Base64Helper.encode(state);
}
return state;
}
+
}
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
index 71fbd9c..8cd7697 100644
--- a/src/main/resources/ehcache.xml
+++ b/src/main/resources/ehcache.xml
@@ -3,8 +3,8 @@
xmlns='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">
-
-
+
+
java.lang.String
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index 8479cad..15f94d3 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
-
+