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

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;
}
// 是否为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")
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);
}
@ -124,7 +124,7 @@ public class MedicalAction extends BaseAction {
@Action("getMedicalAuthUrl")
public Result getMedicalAuthUrl(String url) {
JSONObject respJson = WxMedHelper.getMdAuthUrl(url, null);
JSONObject respJson = WxMedHelper.getMdAuthUrl(url, null, isHttpsWithProxy());
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.medical.WxMedConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -145,6 +146,9 @@ public class MedicalTestAction extends BaseAction {
@Action("his_med_refund")
public Result his_med_refund(String payAuthNo, String 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);
if (recipe == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND);
@ -171,7 +175,7 @@ public class MedicalTestAction extends BaseAction {
@Action("ali_med_refund_test")
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();
}

@ -57,7 +57,7 @@ public class PayAction extends BaseAction {
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) {
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) { // 业务错误 || 存在返回数据-需提前返回
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)) { // 微信医保(获取授权链接)
return WxMedHelper.getMdAuthUrl("wx-medical.html", pEnum.CODE);
return WxMedHelper.getMdAuthUrl("wx-medical.html", pEnum.CODE, isHttps);
}
return null;
}

@ -90,7 +90,7 @@ public class RecipeService {
* @param treatNum 门诊号
* @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();
if (result != null) {
return result;
@ -99,7 +99,7 @@ public class RecipeService {
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) {
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) {
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();
if (noPayTime != null) {
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) {
return Result.success(mdRespJson);
}

@ -154,6 +154,14 @@ public class WeChatConfig {
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);
callbackUrl = ObjectUtils.isEmpty(callbackUrl) ? "" : callbackUrl;
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);
if (ObjectUtils.isEmpty(authUrl)) {
jsonObj.put("url", "config_error");
@ -242,6 +243,7 @@ public class WxMedHelper {
jsonObj.put("url", authUrl + callNo);
}
jsonObj.put("type", MerchantEnum.WX_MEDICAL.CODE);
jsonObj.put("isProtocol", true); // 使用发起请求的页面的协议
return jsonObj;
}

Loading…
Cancel
Save