diff --git a/hai-service/src/main/java/com/hai/service/ApiIpAddressService.java b/hai-service/src/main/java/com/hai/service/ApiIpAddressService.java index ffb2022a..77ecc43e 100644 --- a/hai-service/src/main/java/com/hai/service/ApiIpAddressService.java +++ b/hai-service/src/main/java/com/hai/service/ApiIpAddressService.java @@ -65,4 +65,14 @@ public interface ApiIpAddressService { */ List getApiIpAddressByList(Map map); + /** + * @Author Sum1Dream + * @Name validationIpAddressLegal + * @Description // 验证IP地址合法性 + * @Date 09:49 2022/12/13 + * @Param [mchId, ipAddress] + * @Return java.lang.Boolean + */ + Boolean validationIpAddressLegal(String mchId , String ipAddress); + } diff --git a/hai-service/src/main/java/com/hai/service/ApiProductService.java b/hai-service/src/main/java/com/hai/service/ApiProductService.java index 998458cf..03f069fc 100644 --- a/hai-service/src/main/java/com/hai/service/ApiProductService.java +++ b/hai-service/src/main/java/com/hai/service/ApiProductService.java @@ -148,8 +148,10 @@ public interface ApiProductService { */ List findStarbucksByCategoryName(String categoryName); + // 配置产品 void ProductConfig(JSONObject object); + // 更新产品配置 void updateProductConfig(JSONObject object); /** @@ -224,6 +226,14 @@ public interface ApiProductService { */ void insertCity(ApiCity apiCity); + /** + * @Author Sum1Dream + * @Name updateCity + * @Description // 更新城市 + * @Date 09:20 2022/12/13 + * @Param [apiCity] + * @Return void + */ void updateCity(ApiCity apiCity); /** diff --git a/hai-service/src/main/java/com/hai/service/impl/ApiIpAddressServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/ApiIpAddressServiceImpl.java index 5922a90d..5e5a2bd4 100644 --- a/hai-service/src/main/java/com/hai/service/impl/ApiIpAddressServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/ApiIpAddressServiceImpl.java @@ -50,4 +50,15 @@ public class ApiIpAddressServiceImpl implements ApiIpAddressService { public List getApiIpAddressByList(Map map) { return null; } + + @Override + public Boolean validationIpAddressLegal(String mchId, String ipAddress) { + + ApiIpAddressExample example = new ApiIpAddressExample(); + example.createCriteria().andMchIdEqualTo(mchId).andIpAddressEqualTo(ipAddress); + + List list = apiIpAddressMapper.selectByExample(example); + + return list.size()>0; + } } diff --git a/hai-service/src/main/java/com/hai/service/impl/SecConfigServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/SecConfigServiceImpl.java index 7a1f10a3..8cdc0449 100644 --- a/hai-service/src/main/java/com/hai/service/impl/SecConfigServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/SecConfigServiceImpl.java @@ -5,18 +5,14 @@ import com.hai.common.utils.WxUtils; import com.hai.dao.SecConfigMapper; import com.hai.entity.SecConfig; import com.hai.entity.SecConfigExample; -import com.hai.entity.SecDictionary; -import com.hai.entity.SecDictionaryExample; import com.hai.service.ApiMerchantsService; import com.hai.service.SecConfigService; import org.apache.commons.collections4.MapUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.SortedMap; @Service("secConfigServiceImpl") public class SecConfigServiceImpl implements SecConfigService { diff --git a/v1/src/main/java/com/v1/controller/ApiOrderController.java b/v1/src/main/java/com/v1/controller/ApiOrderController.java index 29cbc87f..4acee2d9 100644 --- a/v1/src/main/java/com/v1/controller/ApiOrderController.java +++ b/v1/src/main/java/com/v1/controller/ApiOrderController.java @@ -1,12 +1,128 @@ package com.v1.controller; +import com.alibaba.fastjson.JSONObject; +import com.hai.common.exception.ErrorCode; +import com.hai.common.exception.ErrorHelp; +import com.hai.common.exception.SysCode; +import com.hai.common.utils.ResponseMsgUtil; +import com.hai.entity.ApiMerchants; +import com.hai.entity.ApiProductConfig; +import com.hai.model.ResponseData; +import com.hai.service.*; +import com.v1.config.ToolConfig; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; @Controller @RequestMapping(value = "/apiOrder") @Api(value = "API订单接口") public class ApiOrderController { + private static Logger log = LoggerFactory.getLogger(RechargeProductController.class); + + @Resource + private ApiMerchantsService apiMerchantsService; + + @Resource + private SecConfigService secConfigService; + + @Resource + private ApiProductService apiProductService; + + @Resource + private ApiOpenService apiOpenService; + + @RequestMapping(value = "/createOrder", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "充值预下单") + public ResponseData createOrder(@RequestBody JSONObject object , HttpServletRequest request ) { + try { + + String ip = ""; + // 有的user可能使用代理,为处理用户使用代理的情况,使用x-forwarded-for + if (request.getHeader("x-forwarded-for") == null) { + ip = request.getRemoteAddr(); + } else { + ip = request.getHeader("x-forwarded-for"); + } + + if (!secConfigService.isConfig("IP_WHITE" , ip)) { + log.error("createOrder error!", "非法ip地址,请联系管理人员!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.IP_ERROR, "非法ip地址,请联系管理人员!"); + } + + if (StringUtils.isBlank(object.getString("mobile")) || + StringUtils.isBlank(object.getString("apiProductId")) || + StringUtils.isBlank(object.getString("apiKey")) || + StringUtils.isBlank(object.getString("orderType")) || + StringUtils.isBlank(object.getString("timetable")) || + StringUtils.isBlank(object.getString("orderNo")) || + StringUtils.isBlank(object.getString("notifyUrl")) || + StringUtils.isBlank(object.getString("sign")) || + StringUtils.isBlank(object.getString("merchId")) + ) { + log.error("createOrder error!", "请求参数校验失败!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR); + } + + ApiMerchants apiMerchants = apiMerchantsService.findByMchId(object.getString("merchId")); + + if (apiMerchants == null) { + log.error("createOrder error!", "商户错误!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.ACCOUNT_NOT_EXIST); + } + + Map productMap = new HashMap<>(); + + productMap.put("id" , object.getString("apiConfigProductId")); + productMap.put("merchantsId" , apiMerchants.getId()); + + ApiProductConfig apiProductConfig = apiProductService.findMchProduct(productMap); + + if (apiProductConfig == null) { + log.error("createOrder error!", " 商品错误!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.PRODUCT_ERROR); + } + + Map map = new HashMap<>(); + map.put("mobile" , object.getString("mobile")); + map.put("apiConfigProductId" , object.getString("apiConfigProductId")); + map.put("timetable" , object.getString("timetable")); + map.put("orderNo" , object.getString("orderNo")); + map.put("notifyUrl" , object.getString("notifyUrl")); + map.put("apiKey" , object.getString("apiKey")); + map.put("merchId" , object.getString("merchId")); + + if (!secConfigService.isSignVerify(map, object.getString("sign"))) { + log.error("createOrder error!", "签名校验失败!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.SIGN_VERIFY); + } + + if (!ToolConfig.timetableCheck(15L , object.getLong("timetable"))) { + log.error("getRechargeProduct error!", "请求时间超过15分钟!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.TIME_OUT); + } + + apiOpenService.createOrder(object , apiMerchants , apiProductConfig); + return ResponseMsgUtil.success("下单成功"); + + } catch (Exception e) { + log.error("HighOpenApiController --> createOrder() error!", e); + return ResponseMsgUtil.exception(e); + } + } + } diff --git a/v1/src/main/java/com/v1/controller/ThirdPartyController.java b/v1/src/main/java/com/v1/controller/ThirdPartyController.java index dd19f283..afdcfd17 100644 --- a/v1/src/main/java/com/v1/controller/ThirdPartyController.java +++ b/v1/src/main/java/com/v1/controller/ThirdPartyController.java @@ -45,9 +45,12 @@ public class ThirdPartyController { @Resource private SecConfigService secConfigService; + @Resource + private ApiIpAddressService apiIpAddressService; + @RequestMapping(value = "/getAllCities", method = RequestMethod.POST) @ResponseBody - @ApiOperation(value = "查询所有城市") + @ApiOperation(value = "查询可用城市") public ResponseData getAllCities(@RequestBody JSONObject object , HttpServletRequest request ) { try { @@ -59,10 +62,6 @@ public class ThirdPartyController { ip = request.getHeader("x-forwarded-for"); } - if (!secConfigService.isConfig("IP_WHITE" , ip)) { - log.error("getRechargeProduct error!", "非法ip地址,请联系管理人员!"); - throw ErrorHelp.genException(SysCode.System, ErrorCode.IP_ERROR, "非法ip地址,请联系管理人员!"); - } if (StringUtils.isBlank(object.getString("apiKey")) || StringUtils.isBlank(object.getString("merchId")) || @@ -72,6 +71,12 @@ public class ThirdPartyController { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR); } + + if (!apiIpAddressService.validationIpAddressLegal(object.getString("merchId") , ip)) { + log.error("getRechargeProduct error!", "非法ip地址,请联系管理人员!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.IP_ERROR, "非法ip地址,请联系管理人员!"); + } + ApiMerchants apiMerchants = apiMerchantsService.findByMchId(object.getString("merchId")); if (apiMerchants == null) { @@ -214,8 +219,6 @@ public class ThirdPartyController { Map map = new HashMap<>(); map.put("apiKey" , object.getString("apiKey")); map.put("merchId" , object.getString("merchId")); - map.put("pageSize" , object.getString("pageSize")); - map.put("pageIndex" , object.getString("pageIndex")); if (!secConfigService.isSignVerify(map , object.getString("sign"))) { log.error("getRechargeProduct error!", "签名校验失败!");