新增医保回调地址链接协议更加请求的协议变化

debug
wangsq 2 weeks ago
parent 930f8409b7
commit 753edfcd0f
  1. 11
      src/main/java/com/ynxbd/common/action/base/BaseAction.java
  2. 4
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  3. 6
      src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java
  4. 4
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  5. 4
      src/main/java/com/ynxbd/common/service/PayService.java
  6. 6
      src/main/java/com/ynxbd/common/service/RecipeService.java
  7. 4
      src/main/java/com/ynxbd/common/service/RegService.java
  8. 8
      src/main/java/com/ynxbd/wx/config/WeChatConfig.java
  9. 6
      src/main/java/com/ynxbd/wx/wxfactory/WxMedHelper.java

@ -189,4 +189,15 @@ public class BaseAction implements Serializable, ServletRequestAware {
} }
return null; return null;
} }
// 是否为https请求
protected boolean isHttpsWithProxy() {
// 优先检查代理头(适用于反向代理场景)
String forwardedProto = request.getHeader("X-Forwarded-Proto");
if (forwardedProto != null) {
return "https".equalsIgnoreCase(forwardedProto);
}
// 未经过代理,直接检查原生请求
return request.isSecure();
}
} }

@ -97,7 +97,7 @@ public class MedicalAction extends BaseAction {
*/ */
@Action("getRefundAuthUrl") @Action("getRefundAuthUrl")
public Result getRefundAuthUrl() { public Result getRefundAuthUrl() {
JSONObject respJson = WxMedHelper.getMdAuthUrl("wx-medical-refund.html", null); JSONObject respJson = WxMedHelper.getMdAuthUrl("wx-medical-refund.html", null, isHttpsWithProxy());
return Result.success(respJson); return Result.success(respJson);
} }
@ -124,7 +124,7 @@ public class MedicalAction extends BaseAction {
@Action("getMedicalAuthUrl") @Action("getMedicalAuthUrl")
public Result getMedicalAuthUrl(String url) { public Result getMedicalAuthUrl(String url) {
JSONObject respJson = WxMedHelper.getMdAuthUrl(url, null); JSONObject respJson = WxMedHelper.getMdAuthUrl(url, null, isHttpsWithProxy());
return Result.success(respJson); return Result.success(respJson);
} }

@ -25,6 +25,7 @@ import com.ynxbd.wx.wxfactory.WxMedHelper;
import com.ynxbd.wx.wxfactory.bean.WxMedOrder; import com.ynxbd.wx.wxfactory.bean.WxMedOrder;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Namespace;
@ -145,6 +146,9 @@ public class MedicalTestAction extends BaseAction {
@Action("his_med_refund") @Action("his_med_refund")
public Result his_med_refund(String payAuthNo, String tradeNo) { public Result his_med_refund(String payAuthNo, String tradeNo) {
log.info("[医保]HIS退费 payAuthNo={}, tradeNo={}", payAuthNo, tradeNo); log.info("[医保]HIS退费 payAuthNo={}, tradeNo={}", payAuthNo, tradeNo);
if (ObjectUtils.isEmpty(payAuthNo) || ObjectUtils.isEmpty(tradeNo)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
Recipe recipe = new RecipeDao().selectByTradeNo(tradeNo); Recipe recipe = new RecipeDao().selectByTradeNo(tradeNo);
if (recipe == null) { if (recipe == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND); return Result.error(ResultEnum.DATA_NOT_FOUND);
@ -171,7 +175,7 @@ public class MedicalTestAction extends BaseAction {
@Action("ali_med_refund_test") @Action("ali_med_refund_test")
public Result ali_med_refund_test() throws Exception { public Result ali_med_refund_test() throws Exception {
AliMedHelper.refundTrade("ALI_bb3c58c912384d6dc15affefad73", "ORD530100202509251522130008038", null, new BigDecimal("3.95"), "医保退费"); AliMedHelper.refundTrade("", "", null, new BigDecimal(""), "医保退费");
return Result.success(); return Result.success();
} }

@ -57,7 +57,7 @@ public class PayAction extends BaseAction {
String ip = HttpHelper.getIpAddress(request); String ip = HttpHelper.getIpAddress(request);
return new RegService().regPlaceOrder(payCode, ip, isOccupySource, isZeroPay, reg); return new RegService().regPlaceOrder(payCode, ip, isOccupySource, isZeroPay, reg, isHttpsWithProxy());
} catch (ServiceException e) { } catch (ServiceException e) {
return Result.error(e); return Result.error(e);
} }
@ -94,7 +94,7 @@ public class PayAction extends BaseAction {
} }
} }
Result result = recipeService.recipeHand(merchantEnum, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond); Result result = recipeService.recipeHand(merchantEnum, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond, isHttpsWithProxy());
if (!result.isOK() || result.getData() != null) { // 业务错误 || 存在返回数据-需提前返回 if (!result.isOK() || result.getData() != null) { // 业务错误 || 存在返回数据-需提前返回
return result; return result;
} }

@ -549,9 +549,9 @@ public class PayService {
/** /**
* 医保跳转 * 医保跳转
*/ */
public static JSONObject goMedical(MerchantEnum merchantEnum, PEnum pEnum) { public static JSONObject getMedAuthUrl(MerchantEnum merchantEnum, PEnum pEnum, boolean isHttps) {
if (MerchantEnum.WX_MEDICAL.equals(merchantEnum)) { // 微信医保(获取授权链接) if (MerchantEnum.WX_MEDICAL.equals(merchantEnum)) { // 微信医保(获取授权链接)
return WxMedHelper.getMdAuthUrl("wx-medical.html", pEnum.CODE); return WxMedHelper.getMdAuthUrl("wx-medical.html", pEnum.CODE, isHttps);
} }
return null; return null;
} }

@ -90,7 +90,7 @@ public class RecipeService {
* @param treatNum 门诊号 * @param treatNum 门诊号
* @return 是否完成操作 * @return 是否完成操作
*/ */
public Result recipeHand(MerchantEnum merchantEnum, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond) { public Result recipeHand(MerchantEnum merchantEnum, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond, boolean isHttps) {
Result result = PayService.isPaymentPermittedByTime(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
@ -99,7 +99,7 @@ public class RecipeService {
return Result.error(ResultEnum.PAY_TYPE_ERROR); return Result.error(ResultEnum.PAY_TYPE_ERROR);
} }
log.info("{}[处方预支付]参数 openid={}, patientId={}, treatNum={}, totalFee={}, awaitSecond={}, payWay={}", merchantEnum.NAME, openid, patientId, treatNum, totalFee, awaitSecond, payWay); log.info("{}[处方预支付]参数 isHttps={}, openid={}, patientId={}, treatNum={}, totalFee={}, awaitSecond={}, payWay={}", merchantEnum.NAME, isHttps, openid, patientId, treatNum, totalFee, awaitSecond, payWay);
if (openid == null || patientId == null || treatNum == null || totalFee == null || recipeJson == null) { if (openid == null || patientId == null || treatNum == null || totalFee == null || recipeJson == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
@ -138,7 +138,7 @@ public class RecipeService {
} }
// 医保支付 // 医保支付
JSONObject respMedJson = PayService.goMedical(merchantEnum, PEnum.RECIPE); JSONObject respMedJson = PayService.getMedAuthUrl(merchantEnum, PEnum.RECIPE, isHttps);
if (respMedJson != null) { if (respMedJson != null) {
return Result.success(respMedJson); return Result.success(respMedJson);
} }

@ -680,7 +680,7 @@ public class RegService {
/** /**
* 挂号下单 * 挂号下单
*/ */
public Result regPlaceOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg) { public Result regPlaceOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg, boolean isHttps) {
Result noPayTime = PayService.isPaymentPermittedByTime(); Result noPayTime = PayService.isPaymentPermittedByTime();
if (noPayTime != null) { if (noPayTime != null) {
return noPayTime; return noPayTime;
@ -705,7 +705,7 @@ public class RegService {
} }
} }
JSONObject mdRespJson = PayService.goMedical(merchantEnum, PEnum.REG); JSONObject mdRespJson = PayService.getMedAuthUrl(merchantEnum, PEnum.REG, isHttps);
if (mdRespJson != null) { if (mdRespJson != null) {
return Result.success(mdRespJson); return Result.success(mdRespJson);
} }

@ -154,6 +154,14 @@ public class WeChatConfig {
return CACHE_WEB_URL; return CACHE_WEB_URL;
} }
public static String getWebUrl(boolean isHttps) {
String webUrl = getWebUrl();
if (isHttps && !HAS_HTTPS_BY_BASE_URL) {
webUrl = webUrl.replace("http://", "https://");
}
return webUrl;
}
/** /**
* 判断是否为开发用户 * 判断是否为开发用户
*/ */

@ -229,12 +229,13 @@ public class WxMedHelper {
/** /**
* [医保]获取授权链接 * [医保]获取授权链接
*/ */
public static JSONObject getMdAuthUrl(String callbackUrl, String callNo) { public static JSONObject getMdAuthUrl(String callbackUrl, String callNo, boolean isHttps) {
callNo = ObjectUtils.isEmpty(callNo) ? "" : ("?callNo=" + callNo); callNo = ObjectUtils.isEmpty(callNo) ? "" : ("?callNo=" + callNo);
callbackUrl = ObjectUtils.isEmpty(callbackUrl) ? "" : callbackUrl; callbackUrl = ObjectUtils.isEmpty(callbackUrl) ? "" : callbackUrl;
JSONObject jsonObj = new JSONObject(); JSONObject jsonObj = new JSONObject();
String authUrl = WxFactory.Medical.Common().getAuthUrl(WeChatConfig.getWebUrl() + callbackUrl);
String authUrl = WxFactory.Medical.Common().getAuthUrl(WeChatConfig.getWebUrl(isHttps) + callbackUrl);
log.info("[医保] authUrl={}", authUrl); log.info("[医保] authUrl={}", authUrl);
if (ObjectUtils.isEmpty(authUrl)) { if (ObjectUtils.isEmpty(authUrl)) {
jsonObj.put("url", "config_error"); jsonObj.put("url", "config_error");
@ -242,6 +243,7 @@ public class WxMedHelper {
jsonObj.put("url", authUrl + callNo); jsonObj.put("url", authUrl + callNo);
} }
jsonObj.put("type", MerchantEnum.WX_MEDICAL.CODE); jsonObj.put("type", MerchantEnum.WX_MEDICAL.CODE);
jsonObj.put("isProtocol", true); // 使用发起请求的页面的协议
return jsonObj; return jsonObj;
} }

Loading…
Cancel
Save