微信医保订单退费信息查询接口调整,目前可无需用户授权直接查询订单信息

debug
王绍全 1 week ago
parent 7681486ac6
commit 993812dd3e
  1. 24
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  2. 5
      src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java
  3. 5
      src/main/java/com/ynxbd/wx/wxfactory/bean/MedicalRefundInfo.java
  4. 13
      src/main/java/com/ynxbd/wx/wxfactory/medical/Client.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);
}

@ -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);
}

@ -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;
}

@ -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("-", ""));

Loading…
Cancel
Save