diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java index 74be1aa..e828917 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/PaymentChannelOrderUserCommandController.java @@ -5,6 +5,7 @@ import com.qniao.dam.api.command.paymentchannelorder.user.request.PrePayThirdPar import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField; import com.qniao.dam.application.service.paymentchannelorder.PaymentChannelOrderApplicationService; import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; +import com.qniao.dam.infrastructure.utils.IPUtil; import com.qniao.framework.utils.ServletUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +13,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -25,12 +27,14 @@ public class PaymentChannelOrderUserCommandController { @ApiOperation("用户发起第三方预支付") @PostMapping("/pre-pay/third-party") - public Map prePayThirdParty(@RequestBody @Validated PrePayThirdPartyDto dto, + public Map prePayThirdParty(HttpServletRequest request, + @RequestBody @Validated PrePayThirdPartyDto dto, @RequestParam Long userId) { Long appFrom = Long.valueOf(ServletUtils.getAppId()); PaymentChannelOrder paymentChannelOrder = dto.trans2Domain(); paymentChannelOrder.setAppId(Long.valueOf(ServletUtils.getAppId())); List fieldList = ThirdPartyFieldAssembler.from(dto.getThirdPartyFields()); + fieldList.add(new ThirdPartyField(ThirdPartyField.PAYER_CLIENT_IP, IPUtil.getIp(request))); //todo 付款单状态判断 订单支付方式是否满足 return paymentChannelOrderApplicationService.prePay(paymentChannelOrder, fieldList, appFrom); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java index d7603da..b99a405 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/paymentchannelorder/user/request/ThirdPartyField.java @@ -2,12 +2,16 @@ package com.qniao.dam.api.command.paymentchannelorder.user.request; import cn.hutool.core.text.StrFormatter; import com.qniao.framework.exception.BizException; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; import java.util.Objects; @Data +@AllArgsConstructor +@NoArgsConstructor public class ThirdPartyField { private String key; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/IPUtil.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/IPUtil.java new file mode 100644 index 0000000..d711dd6 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/utils/IPUtil.java @@ -0,0 +1,44 @@ +package com.qniao.dam.infrastructure.utils; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + +@Slf4j +public class IPUtil { + + + private static final String UNKNOWN = "unknown"; + + /** + * 获取ip地址 + */ + public static String getIp(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + String comma = ","; + String localhost = "127.0.0.1"; + if (ip.contains(comma)) { + ip = ip.split(",")[0]; + } + if (localhost.equals(ip)) { + // 获取本机真正的ip地址 + try { + ip = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + log.error(e.getMessage(), e); + } + } + return ip; + } +}