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 @@ - +