From 9e045ac7d6da5a977017c76a621b36827c114c46 Mon Sep 17 00:00:00 2001 From: wangsq <944414428@qq.com> Date: Thu, 25 Sep 2025 17:49:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E9=80=80=E8=B4=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=B7=B7=E5=90=88=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=80=80=E8=B4=B9=E5=A4=B1=E8=B4=A5=E8=B0=83=E6=95=B4=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B0=83=E7=94=A8HIS=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=80=E7=BB=9F=E7=AD=B9=E5=92=8C=E4=B8=AA=E8=B4=A6=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=80=82=20=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=8A=A5=E5=91=8A=E9=9C=80=E5=A1=AB=E5=86=99?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ynxbd/ali/config/AliMIConfig.java | 40 ------ .../com/ynxbd/ali/config/AliMedConfig.java | 41 ++++++ .../java/com/ynxbd/ali/helper/AliHelper.java | 2 +- .../{AliMIHelper.java => AliMedHelper.java} | 48 +++---- .../ynxbd/common/action/pay/AliPayAction.java | 18 +-- .../common/action/pay/MedicalAction.java | 19 +-- .../common/action/pay/MedicalTestAction.java | 128 +++++++++++++++++- .../ynxbd/common/action/test/TestAction.java | 90 +----------- .../ynxbd/common/bean/enums/MerchantEnum.java | 8 +- .../com/ynxbd/common/dao/his/HisMIDao.java | 4 +- .../ynxbd/common/service/MedicalService.java | 25 ++-- .../ynxbd/wx/wxfactory/WxMedicalHelper.java | 32 ++--- .../ynxbd/wx/wxfactory/WxMessageHelper.java | 4 +- .../ynxbd/wx/wxfactory/medical/Client.java | 21 +-- .../{WechatMIConfig.java => WxMedConfig.java} | 4 +- src/main/resources/medical-ali.properties | 17 +-- 16 files changed, 270 insertions(+), 231 deletions(-) delete mode 100644 src/main/java/com/ynxbd/ali/config/AliMIConfig.java create mode 100644 src/main/java/com/ynxbd/ali/config/AliMedConfig.java rename src/main/java/com/ynxbd/ali/helper/{AliMIHelper.java => AliMedHelper.java} (88%) rename src/main/java/com/ynxbd/wx/wxfactory/medical/{WechatMIConfig.java => WxMedConfig.java} (98%) diff --git a/src/main/java/com/ynxbd/ali/config/AliMIConfig.java b/src/main/java/com/ynxbd/ali/config/AliMIConfig.java deleted file mode 100644 index c496686..0000000 --- a/src/main/java/com/ynxbd/ali/config/AliMIConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ynxbd.ali.config; - -import com.ynxbd.common.helper.ProperHelper; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; - -// 支付宝医保配置 -public class AliMIConfig { - private AliMIConfig() { - } - - //配置文件读取项 - public static final boolean IS_ENABLE; - - public static final String CITY_CODE; // 城市编码 - public static final String ORG_CHNL_CRTF_CODG; - public static final String ORG_NO; - public static final String ORG_APP_ID; - public static final String ORG_HOSPITAL_NAME; - - public static boolean IS_DEV; - public static boolean IS_AUTO_REFUND; - public static String DEV_OPENID; - static { - ProperHelper config = new ProperHelper().read("medical-ali.properties"); - - IS_ENABLE = config.getBoolean("mi_ali.is_enable", false); - config.setIsEnable(IS_ENABLE); - - IS_DEV = config.getBoolean("mi_ali.is_dev", true); - IS_AUTO_REFUND = config.getBoolean("mi_ali.is_auto_refund", false); - DEV_OPENID = config.getString("mi_ali.dev_openid", null); - - ORG_NO = config.getString("mi_ali.org_no"); - ORG_APP_ID = config.getString("mi_ali.org_app_id"); - ORG_CHNL_CRTF_CODG = config.getString("mi_ali.org_chnl_crtf_codg"); - ORG_HOSPITAL_NAME = config.getString("mi_ali.org_hospital_name"); - // 相同数据赋值 - CITY_CODE = WechatMIConfig.CITY_CODE; - } -} diff --git a/src/main/java/com/ynxbd/ali/config/AliMedConfig.java b/src/main/java/com/ynxbd/ali/config/AliMedConfig.java new file mode 100644 index 0000000..c042b12 --- /dev/null +++ b/src/main/java/com/ynxbd/ali/config/AliMedConfig.java @@ -0,0 +1,41 @@ +package com.ynxbd.ali.config; + +import com.ynxbd.common.helper.ProperHelper; + +// 支付宝医保配置 +public class AliMedConfig { + private AliMedConfig() { + } + + //配置文件读取项 + public static final boolean IS_ENABLE; + + public static final String CITY_CODE; // 城市编码 + public static final String ORG_CHNL_CRTF_CODG; + public static final String ORG_NO; + public static final String ORG_APP_ID; + public static final String ORG_HOSPITAL_NAME; + + public static boolean IS_DEV; + public static boolean IS_AUTO_REFUND; + public static String DEV_OPENID; + + static { + ProperHelper config = new ProperHelper().read("medical-ali.properties"); + + IS_ENABLE = config.getBoolean("med_ali.is_enable", false); + config.setIsEnable(IS_ENABLE); + + IS_DEV = config.getBoolean("med_ali.is_dev", true); + IS_AUTO_REFUND = config.getBoolean("med_ali.is_auto_refund", false); + DEV_OPENID = config.getString("med_ali.dev_openid", null); + + ORG_NO = config.getString("med_ali.org_no"); + ORG_APP_ID = config.getString("med_ali.org_app_id"); + ORG_CHNL_CRTF_CODG = config.getString("med_ali.org_chnl_crtf_codg"); + ORG_HOSPITAL_NAME = config.getString("med_ali.org_hospital_name"); + CITY_CODE = config.getString("med_ali.city_code"); + } + + // 跳转链接:https://render.alipay.com/p/s/i/?scheme=encodeURIComponent('alipays://platformapi/startapp?appId=xxx&page=pages/home/home') +} diff --git a/src/main/java/com/ynxbd/ali/helper/AliHelper.java b/src/main/java/com/ynxbd/ali/helper/AliHelper.java index f90c82c..a3631a5 100644 --- a/src/main/java/com/ynxbd/ali/helper/AliHelper.java +++ b/src/main/java/com/ynxbd/ali/helper/AliHelper.java @@ -455,7 +455,7 @@ public class AliHelper { return order; } if (isMIPay) { - return AliMIHelper.queryTrade(outTradeNo, null); + return AliMedHelper.queryTrade(outTradeNo, null); } return queryTransaction(outTradeNo); } diff --git a/src/main/java/com/ynxbd/ali/helper/AliMIHelper.java b/src/main/java/com/ynxbd/ali/helper/AliMedHelper.java similarity index 88% rename from src/main/java/com/ynxbd/ali/helper/AliMIHelper.java rename to src/main/java/com/ynxbd/ali/helper/AliMedHelper.java index 930353b..179cbd1 100644 --- a/src/main/java/com/ynxbd/ali/helper/AliMIHelper.java +++ b/src/main/java/com/ynxbd/ali/helper/AliMedHelper.java @@ -17,7 +17,7 @@ import com.alipay.api.response.AlipayTradeAppPayResponse; import com.alipay.api.response.AlipayTradeQueryResponse; import com.alipay.api.response.AlipayTradeRefundApplyResponse; import com.ynxbd.ali.config.AliConfig; -import com.ynxbd.ali.config.AliMIConfig; +import com.ynxbd.ali.config.AliMedConfig; import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.ErrorHelper; @@ -32,7 +32,7 @@ import java.net.URLDecoder; import java.util.*; @Slf4j -public class AliMIHelper { +public class AliMedHelper { /** * 国家医保局线上业务身份核验信息授权查询接口[alipay_commerce_medical_authinfo_auth_query_response] @@ -70,11 +70,11 @@ public class AliMIHelper { model.setCallUrl(callUrl); // 设置olBizTypeCode=04107(医保移动支付业务)时必传 - model.setOrgAppId(AliMIConfig.ORG_APP_ID); + model.setOrgAppId(AliMedConfig.ORG_APP_ID); // 设置机构渠道认证编码 - model.setOrgChnlCrtfCode(AliMIConfig.ORG_CHNL_CRTF_CODG); + model.setOrgChnlCrtfCode(AliMedConfig.ORG_CHNL_CRTF_CODG); // 设置定点医药机构代码 - model.setOrgCode(AliMIConfig.ORG_NO); + model.setOrgCode(AliMedConfig.ORG_NO); // 设置扩展信息-亲情账户支付场景增加 AuthExtendParams extendParams = new AuthExtendParams(); @@ -98,10 +98,11 @@ public class AliMIHelper { // 设置auth_token,同access_token(用户访问令牌) request.putOtherTextParam("auth_token", accessToken); - log.info("[支付宝]国家医保局线上业务身份核验信息授权查询接口-入参{}", JsonHelper.toJsonString(request)); + int callNum = ObjectUtils.isEmpty(reqBizNo) ? 1 : 2; // 2为第二次授权 + // [支付宝医保]测试报告2 + log.info("[支付宝医保]身份核验信息授权查询接口[{}]-入参{}", callNum, JsonHelper.toJsonString(request)); AlipayCommerceMedicalAuthinfoAuthQueryResponse response = alipayClient.execute(request); - log.info("[支付宝]国家医保局线上业务身份核验信息授权查询接口-调用{} {}", response.isSuccess() ? "[成功]" : "[失败]", response.getBody()); - + log.info("[支付宝医保]身份核验信息授权查询接口[{}]-调用{} {}", callNum, response.isSuccess() ? "[成功]" : "[失败]", response.getBody()); if (response.isSuccess()) { return response.getData(); } @@ -170,9 +171,9 @@ public class AliMIHelper { medicalRequestExt.put("bill_no", payOrdId); // 移动支付中心订单号payOrdId medicalRequestExt.put("pay_auth_no", payAuthNo); // 移动支付中心返回授权编号 获取线上医保业务授权接口返回payAuthNo参数 // - medicalRequestExt.put("org_no", AliMIConfig.ORG_NO); // 医药机构编号 - medicalRequestExt.put("org_name", AliMIConfig.ORG_HOSPITAL_NAME); // 医药机构名称 - medicalRequestExt.put("payment_city_code", AliMIConfig.CITY_CODE); // 医保结算地城市编码(国标) + medicalRequestExt.put("org_no", AliMedConfig.ORG_NO); // 医药机构编号 + medicalRequestExt.put("org_name", AliMedConfig.ORG_HOSPITAL_NAME); // 医药机构名称 + medicalRequestExt.put("payment_city_code", AliMedConfig.CITY_CODE); // 医保结算地城市编码(国标) // medicalRequestExt.put("industry", "HOSPITAL"); // 行业标识 医院:HOSPITAL medicalRequestExt.put("chinfo", "gjydzf"); // 渠道标识-默认为gjydzf @@ -208,10 +209,9 @@ public class AliMIHelper { bizContent.put("extend_params", extendParams); request.setBizContent(JSONObject.toJSONString(bizContent)); - log.info("[支付宝]医保下单-入参 {}", JSONObject.toJSONString(request)); + log.info("[支付宝医保]下单-入参 {}", JSONObject.toJSONString(request)); AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); - log.info("[支付宝]医保下单-返回 orderStr={}", response.getBody()); - + log.info("[支付宝医保]下单-返回 orderStr={}", response.getBody()); if (response.isSuccess()) { Map map = new HashMap<>(); map.put("orderStr", response.getBody()); @@ -246,9 +246,9 @@ public class AliMIHelper { model.setQueryOptions(queryOptions); request.setBizModel(model); - log.info("[支付宝][医保]线下交易查询-入参 {}", JSONObject.toJSONString(request)); + log.info("[支付宝医保]线下交易查询-入参 {}", JSONObject.toJSONString(request)); AlipayTradeQueryResponse response = alipayClient.execute(request); - log.info("[支付宝][医保]线下交易查询-返回 {}", JsonHelper.toJsonString(response)); + log.info("[支付宝医保]线下交易查询-返回 {}", JsonHelper.toJsonString(response)); if (response.isSuccess()) { if ("TRADE_SUCCESS".equals(response.getTradeStatus())) { order.setSuccess(true); @@ -277,11 +277,11 @@ public class AliMIHelper { public static AlipayTradeRefundApplyResponse refundTrade(String outTradeNo, String outRefundNo, String tradeNo, BigDecimal refundAmount, String refundReason) throws Exception { try { if (ObjectUtils.isEmpty(outRefundNo)) { - log.info("[支付宝]退费outRefundNo为空"); + log.info("[支付宝医保]退费outRefundNo为空"); return null; } if (ObjectUtils.isEmpty(outTradeNo) && ObjectUtils.isEmpty(tradeNo)) { - log.info("[支付宝]退费[outTradeNo 和 tradeNo]不能都为空"); + log.info("[支付宝医保]退费[outTradeNo 和 tradeNo]不能都为空"); return null; } AlipayClient alipayClient = new DefaultAlipayClient(AliConfig.getAlipayConfig()); @@ -300,19 +300,21 @@ public class AliMIHelper { JSONObject extendParams = new JSONObject(); extendParams.put("cancel_serial_no", outRefundNo); extendParams.put("cancel_bill_no", outRefundNo); + // INNER_ASSET:表示只退自费部分; OUTSIDE_ASSET:表示只退医保部分,医保部分不支持部分退 + extendParams.put("DESIGNATED_REFUND_ASSET", "INNER_ASSET"); bizContent.put("extend_params", extendParams); request.setBizContent(JSONObject.toJSONString(bizContent)); - log.info("[支付宝][医保]交易退款接口-入参 {}", JSONObject.toJSONString(request)); + log.info("[支付宝医保]交易退款接口-入参 {}", JSONObject.toJSONString(request)); AlipayTradeRefundApplyResponse response = alipayClient.execute(request); - log.info("[支付宝][医保]交易退款接口-返回 {}", response.getBody()); + log.info("[支付宝医保]交易退款接口-返回 {}", response.getBody()); if (response.isSuccess()) { if ("REFUND_FAIL".equals(response.getRefundStatus())) { - log.info("[支付宝][医保]退款失败 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus()); + log.info("[支付宝医保]退款失败 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus()); return null; } - log.info("[支付宝][医保]退款成功 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus()); + log.info("[支付宝医保]退款成功 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus()); return response; } } catch (Exception e) { @@ -336,7 +338,7 @@ public class AliMIHelper { request.setBizContent(JSONObject.toJSONString(bizContent)); AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); - log.info("[支付宝]交易退款查询-返回 {}", response.getBody()); + log.info("[支付宝医保]交易退款查询-返回 {}", response.getBody()); if (response.isSuccess()) { return response.getBody(); } diff --git a/src/main/java/com/ynxbd/common/action/pay/AliPayAction.java b/src/main/java/com/ynxbd/common/action/pay/AliPayAction.java index 66f9902..49dc9df 100644 --- a/src/main/java/com/ynxbd/common/action/pay/AliPayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/AliPayAction.java @@ -1,9 +1,9 @@ package com.ynxbd.common.action.pay; import com.alipay.api.domain.MedicalNationalPayAuthInfo; -import com.ynxbd.ali.config.AliMIConfig; +import com.ynxbd.ali.config.AliMedConfig; import com.ynxbd.ali.helper.AliHelper; -import com.ynxbd.ali.helper.AliMIHelper; +import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Order; @@ -90,8 +90,8 @@ public class AliPayAction extends BaseAction { */ @Action("medical_notify") public Result medical_notify(String outTradeNo, String notifyType) { - // [支付宝][医保][收到通知] outTradeNo=ALI_1dedf988982a4142c20ee839d499, notifyType=recipe - log.info("[支付宝][医保][收到通知] outTradeNo={}, notifyType={}", outTradeNo, notifyType); + // [支付宝医保][收到通知] outTradeNo=ALI_1dedf988982a4142c20ee839d499, notifyType=recipe + log.info("[支付宝医保][收到通知] outTradeNo={}, notifyType={}", outTradeNo, notifyType); if (outTradeNo == null || notifyType == null) { return Result.respStr(); } @@ -101,10 +101,10 @@ public class AliPayAction extends BaseAction { log.info(order.getErrorMsg()); return Result.error(order.getErrorMsg()); } - log.info("[支付宝][医保][收到通知] order={}", JsonHelper.toJsonString(order)); + log.info("[支付宝医保][收到通知] order={}", JsonHelper.toJsonString(order)); try { - if (AliMIConfig.IS_DEV) { + if (AliMedConfig.IS_DEV) { Thread.sleep(1000 * 12); // 12s } String openid = order.getOpenid(); @@ -127,10 +127,10 @@ public class AliPayAction extends BaseAction { */ @Action("queryMIAuth") public Result queryMIAuth(String openid, String accessToken, String patientName, String patientCardNo, String reqBizNo, String callUrl) { - log.info("[支付宝][医保]授权查询 openid={}, accessToken={}, patientName={}, patientCardNo={}, reqBizNo={}, callUrl={}", openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl); + log.info("[支付宝医保]授权查询 openid={}, accessToken={}, patientName={}, patientCardNo={}, reqBizNo={}, callUrl={}", openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl); try { - MedicalNationalPayAuthInfo dataInfo = AliMIHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl); - log.info("[支付宝][医保]授权查询 {}", JsonHelper.toJsonString(dataInfo)); + MedicalNationalPayAuthInfo dataInfo = AliMedHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl); + log.info("[支付宝医保]授权查询 {}", JsonHelper.toJsonString(dataInfo)); if (dataInfo == null) { return Result.error("授权查询失败"); } diff --git a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java index 47cc7de..11e9b7f 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -1,7 +1,7 @@ package com.ynxbd.common.action.pay; import com.alibaba.fastjson.JSONObject; -import com.ynxbd.ali.helper.AliMIHelper; +import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Order; @@ -21,7 +21,7 @@ import com.ynxbd.common.service.MedicalService; import com.ynxbd.common.service.params.RequestParams; import com.ynxbd.wx.wxfactory.*; import com.ynxbd.wx.wxfactory.bean.*; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.utils.MdRespHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -117,7 +117,7 @@ public class MedicalAction extends BaseAction { @Action("medicalAuth") public Result medicalAuth(String openid, String qrCode) { log.info("[医保建档] openid-{},qrCode={}", openid, qrCode); - MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WechatMIConfig.PARTNER_URL, openid, qrCode); + MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WxMedConfig.PARTNER_URL, openid, qrCode); log.info("[医保建档获取用户信息] resp-{}", info); return Result.success(info); } @@ -220,6 +220,9 @@ public class MedicalAction extends BaseAction { if (openid == null || qrCode == null || outTradeNo == null || tradeNo == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } + if (!WxMedConfig.IS_DEV) { + return Result.error("环境异常调用失败"); + } MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); if (merchantEnum == null) { // 支付方式异常 @@ -331,7 +334,7 @@ public class MedicalAction extends BaseAction { return Result.error(order.getMessage()); } else if (merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { - Order order = AliMIHelper.queryTrade(outTradeNo, medTransId); + Order order = AliMedHelper.queryTrade(outTradeNo, medTransId); order.setOrderObj(orderObj); if (order.hasErrorMsg()) { return Result.error(order.getErrorMsg()); @@ -367,10 +370,10 @@ public class MedicalAction extends BaseAction { @Action("payNotify") public Result payNotify() { try { - log.info("[微信][医保]回调通知..."); + log.info("[微信医保]回调通知..."); MedicalNotify notifyInfo = WxMedicalHelper.paidMINotify(request); // 成功返回 - Result.respXml(MdRespHelper.respOk(WechatMIConfig.PAY_KEY)); + Result.respXml(MdRespHelper.respOk(WxMedConfig.PAY_KEY)); String openid = notifyInfo.getOpenid(); String bankTransNo = notifyInfo.getMedTransId(); @@ -382,13 +385,13 @@ public class MedicalAction extends BaseAction { String notifyType = notifyInfo.getAttach(); - log.info("[微信][医保][{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyType={}", + log.info("[微信医保][{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyType={}", notifyType, outTradeNo, bankTransNo, notifyType); new MedicalService().commonNotify(MerchantEnum.WX_MEDICAL, notifyType, outTradeNo, totalFee, bankTransNo, payDate, payTime, openid, payInfo); return null; } catch (ServiceException e) { - return Result.respXml(MdRespHelper.resp(e, WechatMIConfig.PAY_KEY)); + return Result.respXml(MdRespHelper.resp(e, WxMedConfig.PAY_KEY)); } } diff --git a/src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java b/src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java index 8e9128c..41765bb 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java @@ -1,22 +1,36 @@ package com.ynxbd.common.action.pay; -import com.ynxbd.ali.config.AliMIConfig; +import com.alibaba.fastjson.JSONObject; +import com.ynxbd.ali.config.AliMedConfig; +import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.HisRecipe; +import com.ynxbd.common.bean.enums.MerchantEnum; +import com.ynxbd.common.bean.his.HisTreat; +import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.config.interceptor.AesDecode; +import com.ynxbd.common.dao.RecipeDao; +import com.ynxbd.common.dao.his.HisMIDao; import com.ynxbd.common.dao.his.HisMITestDao; +import com.ynxbd.common.dao.his.HisTreatDao; import com.ynxbd.common.helper.common.DateHelper; +import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; +import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.RecipeService; +import com.ynxbd.wx.wxfactory.WxCacheHelper; import com.ynxbd.wx.wxfactory.WxMedicalHelper; import com.ynxbd.wx.wxfactory.bean.MIOrder; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import lombok.extern.slf4j.Slf4j; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -38,7 +52,7 @@ public class MedicalTestAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - if (!WechatMIConfig.IS_DEV && !AliMIConfig.IS_DEV) { + if (!WxMedConfig.IS_DEV && !AliMedConfig.IS_DEV) { return Result.error("环境错误"); } @@ -64,11 +78,11 @@ public class MedicalTestAction extends BaseAction { if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - if (!WechatMIConfig.IS_DEV && !AliMIConfig.IS_DEV) { + if (!WxMedConfig.IS_DEV && !AliMedConfig.IS_DEV) { return Result.error("环境错误"); } - List hisRecipeList = HisMITestDao.devPaidRecipeList(patientId, begDate, endDate); + List hisRecipeList = HisMITestDao.devPaidRecipeList(patientId, begDate, endDate); return Result.success(new RecipeService().filterPaidList(hisRecipeList)); } @@ -115,8 +129,7 @@ public class MedicalTestAction extends BaseAction { */ @Action("queryWxOrder") public Result queryWxOrder(String accessToken, String outTradeNo, String medTransId) { - log.info("[医保]现金退费 outTradeNo={}, medTransId={}", outTradeNo, medTransId); - + log.info("[微信医保]订单查询 outTradeNo={}, medTransId={}", outTradeNo, medTransId); MIOrder order = WxMedicalHelper.queryOrder(accessToken, outTradeNo, medTransId); if (order.isOk()) { return Result.success(order); @@ -125,6 +138,106 @@ public class MedicalTestAction extends BaseAction { } + /** + * [医保]HIS退费 + * + */ + @Action("his_mi_refund") + public Result his_mi_refund(String payAuthNo, String tradeNo) { + log.info("[医保]HIS退费 payAuthNo={}, tradeNo={}", payAuthNo, tradeNo); + Recipe recipe = new RecipeDao().selectByTradeNo(tradeNo); + if (recipe == null) { + return Result.error(ResultEnum.DATA_NOT_FOUND); + } + if (!AliMedConfig.IS_DEV) { + return Result.error("环境异常调用失败"); + } + log.info("[医保]HIS退费 rxInfo={}", JsonHelper.toJsonString(recipe)); + + String chrgBchno = recipe.getChrgBchno(); + String bankTransNo = recipe.getBankTransNo(); + BigDecimal cashFee = recipe.getPayMoney(); + + JsonResult jsonResult = HisMIDao.miRefund(MerchantEnum.ALI_MEDICAL, payAuthNo, chrgBchno.substring(1), bankTransNo, ("R" + tradeNo), cashFee); + return Result.success(jsonResult); + } + + + @Action("wx_med_refund_test") + public Result wx_med_refund_test() throws ServiceException { + WxMedicalHelper.refundCash("", "", new BigDecimal(""), "人工退费"); + return Result.success(); + } + + @Action("ali_med_refund_test") + public Result ali_med_refund_test() throws Exception { + AliMedHelper.refundTrade("ALI_bb3c58c912384d6dc15affefad73", "ORD530100202509251522130008038", null, new BigDecimal("3.95"), "医保退费"); + return Result.success(); + } + + + @Action("wx_med_add_order") + public Result wx_med_add_order(String outTradeNo) { + try { + log.info("[医保]补充订单数据 outTradeNo={}", outTradeNo); + MIOrder order = WxMedicalHelper.queryOrder(WxCacheHelper.getAccessToken(), outTradeNo, null); + if (order == null || !order.isOk()) { + return Result.error("订单未找到"); + } + if (!"PAYED".equals(order.getInsuranceTradeStatus())) { + return Result.error("订单未支付"); + } + + Recipe recipe = new Recipe(); + recipe.setUpdateTime(new Date()); + recipe.setOpenid(order.getOpenid()); + recipe.setPayStatus(0); + recipe.setHisStatus(-1); + recipe.setOutTradeNo(outTradeNo); + recipe.setChrgBchno(order.getSerialNo()); + recipe.setBankTransNo(order.getMedTransId()); + JSONObject jsonObject = JsonHelper.parseObject(order.getRequestContent()); + + String payOrdId = jsonObject.getString("payOrdId"); + recipe.setTradeNo(payOrdId); + recipe.setPayOrdId(payOrdId); + // ========================== + recipe.setPatientId("1xbd"); + recipe.setMdTrtId("xbd-med"); + recipe.setMdUserId("xbd-med"); + recipe.setPayWay("0"); + + recipe.setHisResult("订单未调用HIS接口"); + recipe.setTotalFee(order.getTotalFee()); + recipe.setPayMoney(order.getCashFee()); + recipe.setAcctFee(order.getInsuranceSelfFee()); + recipe.setHifpFee(order.getInsuranceFundFee()); + + String body = order.getBody(); + String treatNum = body == null ? null : body.substring(4); + recipe.setTreatNum(treatNum); + + if (treatNum != null) { + List dataList = new HisTreatDao().getInfoByTreatNum(treatNum); + if (!dataList.isEmpty()) { + HisTreat hisTreat = dataList.get(0); + if (hisTreat != null) { + recipe.setPatientId(hisTreat.getPatientId()); + recipe.setDeptCode(hisTreat.getDeptCode()); + recipe.setDeptName(hisTreat.getDeptName()); + } + } + } + + if (new RecipeDao().insertMedical(recipe)) { + log.info("[医保]补充订单数据 recipe={}", JsonHelper.toJsonString(recipe)); + } + return Result.success(); + } catch (Exception e) { + log.error("异常:{}", e.getMessage()); + } + return Result.success(); + } // // /** @@ -166,4 +279,5 @@ public class MedicalTestAction extends BaseAction { // return Result.success(jsonResult); // } + } diff --git a/src/main/java/com/ynxbd/common/action/test/TestAction.java b/src/main/java/com/ynxbd/common/action/test/TestAction.java index bb121e1..eef6dcf 100644 --- a/src/main/java/com/ynxbd/common/action/test/TestAction.java +++ b/src/main/java/com/ynxbd/common/action/test/TestAction.java @@ -1,28 +1,16 @@ package com.ynxbd.common.action.test; -import com.alibaba.fastjson.JSONObject; -import com.ynxbd.ali.helper.AliMIHelper; import com.ynxbd.common.action.base.BaseAction; -import com.ynxbd.common.bean.his.HisTreat; -import com.ynxbd.common.bean.pay.Recipe; -import com.ynxbd.common.dao.RecipeDao; -import com.ynxbd.common.dao.his.HisTreatDao; import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; -import com.ynxbd.wx.wxfactory.WxCacheHelper; -import com.ynxbd.wx.wxfactory.WxMedicalHelper; -import com.ynxbd.wx.wxfactory.bean.MIOrder; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import lombok.extern.slf4j.Slf4j; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; -import java.math.BigDecimal; import java.util.Date; -import java.util.List; /** * @Author wsq @@ -80,88 +68,14 @@ public class TestAction extends BaseAction { @Action("test03") public Result test03() throws ServiceException { - System.out.println("开关" + WechatMIConfig.IS_AUTO_REFUND); + System.out.println("开关" + WxMedConfig.IS_AUTO_REFUND); log.info("日志测试"); System.out.println(System.getProperty("fileEncoding")); System.out.println(System.getProperty("encoding")); return Result.success(); } - @Action("wx_med_refund_test") - public Result wx_med_refund_test() throws ServiceException { - WxMedicalHelper.refundCash("WX_M202f622bb3444a033f7a014a421b", "ORD530100202505100932115202726", new BigDecimal("183.390"), "人工退费"); - return Result.success(); - } - - @Action("ali_med_refund_test") - public Result ali_med_refund_test() throws Exception { - AliMIHelper.refundTrade("", "", null, new BigDecimal(""), "退费测试"); - return Result.success(); - } - - @Action("md_add") - public Result md_add(String outTradeNo) { - try { - log.info("[医保]补充订单数据 outTradeNo={}", outTradeNo); - MIOrder order = WxMedicalHelper.queryOrder(WxCacheHelper.getAccessToken(), outTradeNo, null); - if (order == null || !order.isOk()) { - return Result.error("订单未找到"); - } - if (!"PAYED".equals(order.getInsuranceTradeStatus())) { - return Result.error("订单未支付"); - } - - Recipe recipe = new Recipe(); - recipe.setUpdateTime(new Date()); - recipe.setOpenid(order.getOpenid()); - recipe.setPayStatus(0); - recipe.setHisStatus(-1); - recipe.setOutTradeNo(outTradeNo); - recipe.setChrgBchno(order.getSerialNo()); - recipe.setBankTransNo(order.getMedTransId()); - JSONObject jsonObject = JsonHelper.parseObject(order.getRequestContent()); - - String payOrdId = jsonObject.getString("payOrdId"); - recipe.setTradeNo(payOrdId); - recipe.setPayOrdId(payOrdId); - // ========================== - recipe.setPatientId("1xbd"); - recipe.setMdTrtId("xbd-med"); - recipe.setMdUserId("xbd-med"); - recipe.setPayWay("0"); - - recipe.setHisResult("订单未调用HIS接口"); - recipe.setTotalFee(order.getTotalFee()); - recipe.setPayMoney(order.getCashFee()); - recipe.setAcctFee(order.getInsuranceSelfFee()); - recipe.setHifpFee(order.getInsuranceFundFee()); - - String body = order.getBody(); - String treatNum = body == null ? null : body.substring(4); - recipe.setTreatNum(treatNum); - - if (treatNum != null) { - List dataList = new HisTreatDao().getInfoByTreatNum(treatNum); - if (!dataList.isEmpty()) { - HisTreat hisTreat = dataList.get(0); - if (hisTreat != null) { - recipe.setPatientId(hisTreat.getPatientId()); - recipe.setDeptCode(hisTreat.getDeptCode()); - recipe.setDeptName(hisTreat.getDeptName()); - } - } - } - - if (new RecipeDao().insertMedical(recipe)) { - log.info("[医保]补充订单数据 recipe={}", JsonHelper.toJsonString(recipe)); - } - return Result.success(); - } catch (Exception e) { - log.error("异常:{}", e.getMessage()); - } - return Result.success(); - } // @Action("lock") diff --git a/src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java b/src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java index 308032c..acdca01 100644 --- a/src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java +++ b/src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java @@ -1,7 +1,7 @@ package com.ynxbd.common.bean.enums; -import com.ynxbd.ali.config.AliMIConfig; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.ali.config.AliMedConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -47,7 +47,7 @@ public enum MerchantEnum { "20", "21", "22"), WX_MEDICAL("wx_medical", "【微信医保】", - WechatMIConfig.IS_DEV, + WxMedConfig.IS_DEV, "4", "10,11,12,13,14,15", "medical/payNotify", @@ -55,7 +55,7 @@ public enum MerchantEnum { "0", "1", "2"), ALI_MEDICAL("ali_medical", "【支付宝医保】", - AliMIConfig.IS_DEV, + AliMedConfig.IS_DEV, "3", "25,26,27,28,29,30", "ali_pay/medical_notify", diff --git a/src/main/java/com/ynxbd/common/dao/his/HisMIDao.java b/src/main/java/com/ynxbd/common/dao/his/HisMIDao.java index 38f4690..cb4d207 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMIDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMIDao.java @@ -14,6 +14,7 @@ import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.wx.wxfactory.bean.MedicalInfo; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; @@ -22,6 +23,7 @@ import java.util.List; import java.util.Map; // HIS医保接口 +@Slf4j public class HisMIDao { /** @@ -204,9 +206,9 @@ public class HisMIDao { params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008 params.put("FPNum", fpNum); params.put("PayWay", "4"); + params.put("PayDeviceID", "mobile"); params.put("BankTransNo", bankTransNo); params.put("TransNo", refundTradeNo); - params.put("PayDeviceID", "mobile"); params.put("PayMoney", cashFee); // 现金部分 }); } diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index ef31286..5de1f4f 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -2,8 +2,8 @@ package com.ynxbd.common.service; import com.alibaba.fastjson.JSONObject; import com.alipay.api.response.AlipayTradeRefundApplyResponse; -import com.ynxbd.ali.config.AliMIConfig; -import com.ynxbd.ali.helper.AliMIHelper; +import com.ynxbd.ali.config.AliMedConfig; +import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.pay.PEnum; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.*; @@ -23,7 +23,7 @@ import com.ynxbd.wx.wxfactory.bean.MedicalInfo; import com.ynxbd.wx.wxfactory.bean.MIOrder; import com.ynxbd.wx.wxfactory.bean.MedicalUserInfo; import com.ynxbd.wx.wxfactory.bean.OrderMIEnum; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -38,7 +38,7 @@ public class MedicalService { if (ObjectUtils.isEmpty(openid)) { return null; } - return openid.equals(WechatMIConfig.DEV_OPENID) || openid.equals(AliMIConfig.DEV_OPENID); + return openid.equals(WxMedConfig.DEV_OPENID) || openid.equals(AliMedConfig.DEV_OPENID); } public void commonNotify(MerchantEnum merchantEnum, String notifyType, String outTradeNo, BigDecimal totalFee, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { @@ -114,7 +114,8 @@ public class MedicalService { payAuthNo = userInfo.getPayAuthNo(); } - log.info("[医保]上传明细:patientId={}, totalFee={}, cardNo={}, recipeJson={}", patientId, totalFee, cardNo, recipeJson); + // 测试报告内容[2] + log.info("{}[HIS医保上传明细] req={patientId:{}, treatNum={}, totalFee:{}, cardNo:{}, recipeJson:{}}", merchantEnum.NAME, patientId, treatNum, totalFee, cardNo, recipeJson); JsonResult result = HisMIDao.rxMIUploadFeeDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); return hisMIPlaceOrder(merchantEnum, payAuthNo, result); } @@ -216,9 +217,9 @@ public class MedicalService { throw new ServiceException("【支付宝】医保授权码medicalCardId为空"); } - Order order = hasDBOrder ? AliMIHelper.queryTrade(outTradeNo, null) : new Order(); + Order order = hasDBOrder ? AliMedHelper.queryTrade(outTradeNo, null) : new Order(); String notifyUrl = WeChatConfig.getHttpsBaseUrl() + merchantEnum.getNotifyUrl(outTradeNo, notifyType); - Map map = AliMIHelper.createOrder(orderMIEnum, + Map map = AliMedHelper.createOrder(orderMIEnum, openid, outTradeNo, chrgBchno, @@ -504,7 +505,7 @@ public class MedicalService { return false; } - if (!WechatMIConfig.IS_AUTO_REFUND) { + if (!WxMedConfig.IS_AUTO_REFUND) { log.info("[医保][挂号]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); return false; } @@ -536,7 +537,7 @@ public class MedicalService { apiResult.setSuccess(order.isOk()); apiResult.setMessage(order.isOk() ? WxPayHelper.OK : order.getMessage()); } else { - log.info("[支付宝][医保]未开通自动退费....."); + log.info("[支付宝医保]未开通自动退费....."); apiResult.setMessage("[支付宝]未启用自动退费"); } return apiResult; @@ -626,7 +627,7 @@ public class MedicalService { return false; } - if (!WechatMIConfig.IS_AUTO_REFUND) { + if (!WxMedConfig.IS_AUTO_REFUND) { log.info("[医保][处方][现金自动退费]功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); return false; } @@ -679,7 +680,7 @@ public class MedicalService { // 医保退费-必须先执行 log.info("[医保][处方][个账]退费开始 tradeNo={}, payAuthNo={}, fpNum={}", tradeNo, payAuthNo, fpNum); - JsonResult jsonResult = HisMIDao.miRefund(MerchantEnum.WX, payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee); + JsonResult jsonResult = HisMIDao.miRefund(MerchantEnum.WX_MEDICAL, payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee); if (!jsonResult.success()) { // 失败 log.info("[医保][处方][个账]退费失败 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); String message = jsonResult.getMessage(); @@ -724,7 +725,7 @@ public class MedicalService { } else { // 支付宝 - AlipayTradeRefundApplyResponse respBody = AliMIHelper.refundTrade(outTradeNo, outRefundNo, tradeNo, cashFee, "线上退费"); + AlipayTradeRefundApplyResponse respBody = AliMedHelper.refundTrade(outTradeNo, outRefundNo, tradeNo, cashFee, "线上退费"); boolean isOk = respBody != null; log.info("[支付宝][处方][现金]退费{} outTradeNo={}, bankTransNo={}, tradeNo={}", (isOk ? "成功" : "失败"), outTradeNo, bankTransNo, tradeNo); if (isOk) { diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java index 6c1b936..da38f5b 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java @@ -9,7 +9,7 @@ import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.wxfactory.base.auth.models.RespAccessToken; import com.ynxbd.wx.wxfactory.base.auth.models.RespJsapiTicket; import com.ynxbd.wx.wxfactory.bean.*; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.medical.enums.MdRefundTypeEnum; import com.ynxbd.wx.wxfactory.utils.WxSignHelper; import lombok.extern.slf4j.Slf4j; @@ -34,7 +34,7 @@ public class WxMedicalHelper { */ public static MedicalUserInfo getUserInfo(String openid, String qrCode, String cardNo, String realName) throws ServiceException { log.info("[医保]获取用户信息 openid={}, qrCode={}", openid, qrCode); - MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WechatMIConfig.PARTNER_URL, openid, qrCode); + MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WxMedConfig.PARTNER_URL, openid, qrCode); if (info == null || !info.isSuccess()) { String message = info == null ? "授权失败" : info.getMessage(); log.info("[医保授权]失败 {}", message); @@ -78,7 +78,7 @@ public class WxMedicalHelper { } // 签名验证 - if (!WxSignHelper.validateSign(paramsMap, WechatMIConfig.PAY_KEY)) { // 验证未通过,通知支付失败 + if (!WxSignHelper.validateSign(paramsMap, WxMedConfig.PAY_KEY)) { // 验证未通过,通知支付失败 throw new ServiceException("[医保]回调通知签名验证未通过!"); } @@ -156,8 +156,8 @@ public class WxMedicalHelper { , outTradeNo, openid, cardNo, realName, payOrdId, payAuthNo, totalFee, insuranceFee, cashFee, familyType, familyName, familyCardNo); MedicalPayOrder order = WxFactory.Medical.Common().createOrder(OrderMIEnum, WxCacheHelper.getAccessToken(), - WechatMIConfig.MD_APP_ID, WeChatConfig.MCH_ID, WechatMIConfig.PAY_KEY, - WechatMIConfig.CITY_CODE, WechatMIConfig.HOSPITAL_NAME, WechatMIConfig.ORG_NO, WechatMIConfig.CHANNEL, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, WxMedConfig.PAY_KEY, + WxMedConfig.CITY_CODE, WxMedConfig.HOSPITAL_NAME, WxMedConfig.ORG_NO, WxMedConfig.CHANNEL, openid, payAuthNo, payOrdId, @@ -204,9 +204,9 @@ public class WxMedicalHelper { public static MIOrder queryOrder(String accessToken, String outTradeNo, String medTransId) { return WxFactory.Medical.Common().queryOrder( accessToken, - WechatMIConfig.MD_APP_ID, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, - WechatMIConfig.PAY_KEY, + WxMedConfig.PAY_KEY, outTradeNo, medTransId); } @@ -252,9 +252,9 @@ public class WxMedicalHelper { public static MIOrder refund(String outTradeNo, String outRefundNo, String payOrdId, BigDecimal cashFee, String reason) { return WxFactory.Medical.Common().refund( WxCacheHelper.getAccessToken(), - WechatMIConfig.MD_APP_ID, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, - WechatMIConfig.PAY_KEY, + WxMedConfig.PAY_KEY, outTradeNo, outRefundNo, payOrdId, @@ -270,9 +270,9 @@ public class WxMedicalHelper { public static MIOrder refundCash(String outTradeNo, String outRefundNo, String payOrdId, BigDecimal cashFee, String reason) { return WxFactory.Medical.Common().refund( WxCacheHelper.getAccessToken(), - WechatMIConfig.MD_APP_ID, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, - WechatMIConfig.PAY_KEY, + WxMedConfig.PAY_KEY, outTradeNo, outRefundNo, payOrdId, @@ -297,9 +297,9 @@ public class WxMedicalHelper { return WxFactory.Medical.Common().downBill( WxCacheHelper.getAccessToken(), - WechatMIConfig.MD_APP_ID, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, - WechatMIConfig.PAY_KEY, + WxMedConfig.PAY_KEY, billDate, billType); } @@ -311,9 +311,9 @@ public class WxMedicalHelper { public static MedicalRefundInfo queryRefund(String accessToken, String outTradeNo, String mdTransId) { return WxFactory.Medical.Common().queryRefund( accessToken, - WechatMIConfig.MD_APP_ID, + WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, - WechatMIConfig.PAY_KEY, + WxMedConfig.PAY_KEY, outTradeNo, mdTransId); } @@ -330,7 +330,7 @@ public class WxMedicalHelper { return cacheToken; } - RespAccessToken response = WxFactory.Base.OAuth().getAccessToken(WechatMIConfig.MD_APP_ID, WechatMIConfig.MD_APP_SECRET); + RespAccessToken response = WxFactory.Base.OAuth().getAccessToken(WxMedConfig.MD_APP_ID, WxMedConfig.MD_APP_SECRET); if (!response.isSuccess()) { log.error("[微信]access_token请求失败 code={}, message={}", response.getErrCode(), response.getErrMsg()); return null; diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxMessageHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxMessageHelper.java index 0a5feaa..fa17f6a 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxMessageHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxMessageHelper.java @@ -2,7 +2,7 @@ package com.ynxbd.wx.wxfactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.wx.config.WeChatConfig; -import com.ynxbd.wx.wxfactory.medical.WechatMIConfig; +import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.message.MdClient; import lombok.extern.slf4j.Slf4j; @@ -26,7 +26,7 @@ public class WxMessageHelper { public static void regPush(String url, Integer status, String patCardNo, String patName, String patHospitalId, String deptName, String docName, String appointmentTime, String memo) { JsonResult result = new MdClient().push(WxCacheHelper.getAccessToken(), WeChatConfig.APP_ID, 9001, "123", messageType -> messageType.reg( - WechatMIConfig.HOSPITAL_NAME, + WxMedConfig.HOSPITAL_NAME, url, status, patCardNo, diff --git a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java index 53ce57e..d046277 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -7,7 +7,6 @@ import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.JsonResult; -import com.ynxbd.wx.wxfactory.WxFactory; import com.ynxbd.wx.wxfactory.bean.*; import com.ynxbd.wx.wxfactory.medical.enums.MdRefundTypeEnum; import com.ynxbd.wx.wxfactory.utils.WxRequestHelper; @@ -32,7 +31,7 @@ public class Client { * @param url url */ public String getAuthUrl(String url) { - String configUrl = WechatMIConfig.getConfigUrl(url); + String configUrl = WxMedConfig.getConfigUrl(url); log.info("[医保]免密授权地址-{}", configUrl); return configUrl; } @@ -118,7 +117,7 @@ public class Client { //========================================================== params.put("hospital_name", hospitalName); // - if (WechatMIConfig.IS_DEV) { + if (WxMedConfig.IS_DEV) { params.put("use_sandbox", 1); } @@ -141,10 +140,11 @@ public class Client { params.put("channel_no", channel); // 渠道号 //---------------------------------------------------------------- params.put("sign", WxSignHelper.generateSign(params, WxSignHelper.SIGN_TYPE_MD5, mdPayKey)); - log.info("[医保][下单] req={}", JsonHelper.toJsonString(params)); + // [微信医保]测试报告内容[3] + log.info("[微信医保][下单] req={}", JsonHelper.toJsonString(params)); }); - log.info("[医保][下单] resp={}", JsonHelper.toJsonString(jsonResult)); + log.info("[微信医保][下单] resp={}", JsonHelper.toJsonString(jsonResult)); if (!jsonResult.success()) { return new MedicalPayOrder().createResult(jsonResult); } @@ -325,11 +325,11 @@ public class Client { * @return 用户信息 */ public MedicalUserInfo getUserInfo(String reqUrl, String openid, String qrcode) { - log.info("[医保]用户授权地址-{}", reqUrl); + log.info("[微信医保][授权]请求地址-{}", reqUrl); MedicalUserInfo info = new MedicalUserInfo(); String timestamp = Long.toString(System.currentTimeMillis()); - String signature = WechatMIConfig.createSignature(timestamp); + String signature = WxMedConfig.createSignature(timestamp); if (signature == null) { info.setMessage("signature签名错误"); return info; @@ -337,7 +337,8 @@ public class Client { JSONObject respJson = OkHttpHelper.postForm(reqUrl, params -> { params.put("qrcode", qrcode); params.put("openid", openid); - log.info("[医保][授权] req={}", JsonHelper.toJsonString(params)); + // [微信医保]测试报告内容[1] + log.info("[微信医保][授权] req={}", JsonHelper.toJsonString(params)); }, headers -> { headers.set("Accept", "application/json"); headers.set("Content-Type", "application/json"); @@ -353,7 +354,7 @@ public class Client { String code = respJson.getString("code"); String message = respJson.getString("message"); if (!"0".equals(code)) { - log.error("[医保授权]失败 resp={}", respJson); + log.error("[微信医保][授权]失败 resp={}", respJson); info.setMessage(String.format("[%s] %s", code, message)); return info; @@ -375,7 +376,7 @@ public class Client { info.setCardNo(cardNo); respJson.remove("user_card_no"); } - log.error("[医保授权]返回 resp={}", respJson); + log.error("[微信医保][授权]返回 resp={}", respJson); info.setUserName(userName); info.setPayAuthNo(payAuthNo); diff --git a/src/main/java/com/ynxbd/wx/wxfactory/medical/WechatMIConfig.java b/src/main/java/com/ynxbd/wx/wxfactory/medical/WxMedConfig.java similarity index 98% rename from src/main/java/com/ynxbd/wx/wxfactory/medical/WechatMIConfig.java rename to src/main/java/com/ynxbd/wx/wxfactory/medical/WxMedConfig.java index b89847a..aa96b89 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/WechatMIConfig.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/WxMedConfig.java @@ -9,8 +9,8 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -public class WechatMIConfig { - private WechatMIConfig() { +public class WxMedConfig { + private WxMedConfig() { } // 免密授权 diff --git a/src/main/resources/medical-ali.properties b/src/main/resources/medical-ali.properties index 51523fe..1c802ac 100644 --- a/src/main/resources/medical-ali.properties +++ b/src/main/resources/medical-ali.properties @@ -1,14 +1,15 @@ # \u533B\u4FDD\u914D\u7F6E -mi_ali.is_dev=true -mi_ali.is_enable=true -mi_ali.is_auto_refund=true - +med_ali.is_dev=true +med_ali.is_enable=true +med_ali.is_auto_refund=true # \u5B9A\u70B9\u533B\u7597\u673A\u6784\u540D\u79F0\uFF08\u652F\u4ED8\u5B9D\u53EF\u80FD\u4E0D\u540C\uFF09 -mi_ali.org_hospital_name=\u4E91\u5357\u7701\u6EC7\u5357\u4E2D\u5FC3\u533B\u9662 +med_ali.org_hospital_name=\u4E91\u5357\u7701\u6EC7\u5357\u4E2D\u5FC3\u533B\u9662 +# \u57CE\u5E02\u7F16\u7801 +med_ali.city_code=530700 # \u533B\u4FDD\uFF08PDF\u6587\u6863\uFF09---------------------------------------------------------------------------------- # \u5B9A\u70B9\u533B\u836F\u673A\u6784\u7F16\u7801 -mi_ali.org_no=H53250301796 +med_ali.org_no=H53250301796 # \u5B9A\u70B9\u533B\u836F\u673A\u6784\u5C0F\u7A0B\u5E8F/h5\u5E94\u7528id\uFF08\u6B63\u5F0F\u73AF\u5883\uFF1A\u6E20\u9053\u7F16\u53F7\uFF09 -mi_ali.org_app_id=1J06MILHV0JM4460C80A0000F05B9B68 +med_ali.org_app_id=1J06MILHV0JM4460C80A0000F05B9B68 # \u5B9A\u70B9\u533B\u836F\u673A\u6784\u6E20\u9053\u8BA4\u8BC1\u7F16\u7801 -mi_ali.org_chnl_crtf_codg=BqK1kMStlhVDgN2uHf4EsP9BQzovPtfTZGwRsyhqMMY05hWhBzmfAN/glcC2Qe8q +med_ali.org_chnl_crtf_codg=BqK1kMStlhVDgN2uHf4EsP9BQzovPtfTZGwRsyhqMMY05hWhBzmfAN/glcC2Qe8q