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 ae4f75b..5862686 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -345,13 +345,25 @@ public class MedicalAction extends BaseAction { } } - /** - * HIS查询医保退费 - */ + @Action("queryRefund") - public Result queryRefund(String accessToken, String outTradeNo, String mdTransId) { - MedicalRefundInfo info = WxMedHelper.queryRefund(accessToken, outTradeNo, mdTransId); - return Result.success(info); + public Result queryRefund(String payCode, String outRefundNo, String outTradeNo, String mdTransId) { + log.info("[医保]查询退费订单 payCode={}, outRefundNo={}, outTradeNo={}, mdTransId={}", payCode, outRefundNo, outTradeNo, mdTransId); + + MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); + if (merchantEnum == null) { // 支付方式异常 + return Result.error(ResultEnum.PAY_TYPE_ERROR); + } + if (ObjectUtils.isEmpty(outRefundNo) && ObjectUtils.isEmpty(outTradeNo) && ObjectUtils.isEmpty(mdTransId)) { + return Result.error(ResultEnum.PARAM_IS_BLANK); + } + if (merchantEnum.equals(MerchantEnum.WX_MEDICAL)) { + MedicalRefundInfo info = WxMedHelper.queryRefund(outRefundNo, outTradeNo, mdTransId); + info.setAppid(null); + info.setMchId(null); + return Result.success(info); + } + return Result.error(ResultEnum.PAY_TYPE_NOT_SUPPORT); } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java index 8217be7..bcad541 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java @@ -310,12 +310,13 @@ public class WxMedHelper { /** * [医保]获取授权链接 */ - public static MedicalRefundInfo queryRefund(String accessToken, String outTradeNo, String mdTransId) { + public static MedicalRefundInfo queryRefund( String outRefundNo, String outTradeNo, String mdTransId) { return WxFactory.Medical.Common().queryRefund( - accessToken, + WxCacheHelper.getAccessToken(), WxMedConfig.MD_APP_ID, WeChatConfig.MCH_ID, WxMedConfig.PAY_KEY, + outRefundNo, outTradeNo, mdTransId); } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/bean/MedicalRefundInfo.java b/src/main/java/com/ynxbd/wx/wxfactory/bean/MedicalRefundInfo.java index 296a462..36c571f 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/bean/MedicalRefundInfo.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/bean/MedicalRefundInfo.java @@ -12,9 +12,7 @@ import lombok.ToString; @NoArgsConstructor public class MedicalRefundInfo extends WxFactory.ResponseCheck.ResultBase { private String appid; - private String sub_appid; - private String mch_id; - private String sub_mch_id; + private String mchId; private String nonce_str; private String med_trans_id; private String med_refund_id; @@ -29,5 +27,4 @@ public class MedicalRefundInfo extends WxFactory.ResponseCheck.ResultBase { private String response_content; private String cash_refund_id; private String insurance_refund_id; - } 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 079dec2..12b9c55 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java @@ -14,6 +14,7 @@ import com.ynxbd.wx.wxfactory.utils.WxSignHelper; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.ObjectUtils; import java.math.BigDecimal; import java.util.Date; @@ -259,16 +260,18 @@ public class Client { * @param mchId mchId * @param mdPayKey mdPayKey */ - public MedicalRefundInfo queryRefund(String accessToken, String appId, String mchId, String mdPayKey, String outTradeNo, String medTransId) { - + public MedicalRefundInfo queryRefund(String accessToken, String appId, String mchId, String mdPayKey, String outRefundNo, String outTradeNo, String medTransId) { JsonResult jsonResult = WxRequestHelper.postMdXml(("https://api.weixin.qq.com/payinsurance/queryrefund?access_token=" + accessToken), params -> { params.put("appid", appId); params.put("mch_id", mchId); - // 二选一 - if (outTradeNo != null) { + // 四选一 优先级(med_refund_id > hosp_out_refund_no > hosp_out_trade_no > med_trans_id) + if (!ObjectUtils.isEmpty(outRefundNo)) { + params.put("hosp_out_refund_no", outRefundNo); // 医院退款订单号 + } + if (!ObjectUtils.isEmpty(outTradeNo)) { params.put("hosp_out_trade_no", outTradeNo); // 第三方服务商订单号 outTradeNo } - if (medTransId != null) { + if (!ObjectUtils.isEmpty(medTransId)) { params.put("med_trans_id", medTransId); // 微信生成的医疗订单号 } params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", ""));