From b6e350dce50bafd01ce146ded3699daf35bb8ad1 Mon Sep 17 00:00:00 2001 From: "Stormeye.Wu" Date: Tue, 14 Aug 2018 00:11:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/simple/annotation/AuthIgnore.java | 16 ++ .../java/com/simple/annotation/LoginUser.java | 19 +++ .../java/com/simple/config/CorsConfig.java | 22 +++ .../com/simple/config/Swagger2Config.java | 49 ++++++ .../java/com/simple/config/WebMvcConfig.java | 47 ++++++ .../com/simple/controller/BaseController.java | 96 +++++++++--- .../controller/WxPayOrderController.java | 27 +--- .../interceptor/AuthorizationInterceptor.java | 69 ++++++++ ...oginUserHandlerMethodArgumentResolver.java | 46 ++++++ mallinkCApi/pom.xml | 8 - .../com/simple/controller/BaseController.java | 29 ++++ .../controller/WxPayOrderController.java | 10 +- .../controller/WxUserGrantController.java | 24 +-- .../java/com/simple/common/ErrorCode.java | 5 +- .../java/com/simple/domain/po/WxAppinfo.java | 27 +++- .../java/com/simple/domain/po/WxCoupon.java | 34 ++-- .../com/simple/domain/po/WxCouponOrder.java | 147 ++++++++---------- .../simple/service/WxCouponOrderService.java | 48 ++++++ .../com/simple/service/WxPayOrderService.java | 5 +- .../service/impl/WxOrderServiceImpl.java | 6 +- .../service/impl/WxPayOrderServiceImpl.java | 44 +++--- .../main/resources/mapper/WxAppinfoMapper.xml | 13 +- .../main/resources/mapper/WxCouponMapper.xml | 6 +- .../resources/mapper/WxCouponOrderMapper.xml | 2 +- pom.xml | 10 ++ 25 files changed, 597 insertions(+), 212 deletions(-) create mode 100644 mallinkBApi/src/main/java/com/simple/annotation/AuthIgnore.java create mode 100644 mallinkBApi/src/main/java/com/simple/annotation/LoginUser.java create mode 100644 mallinkBApi/src/main/java/com/simple/config/CorsConfig.java create mode 100644 mallinkBApi/src/main/java/com/simple/config/Swagger2Config.java create mode 100644 mallinkBApi/src/main/java/com/simple/config/WebMvcConfig.java create mode 100644 mallinkBApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java create mode 100644 mallinkBApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java create mode 100644 mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java diff --git a/mallinkBApi/src/main/java/com/simple/annotation/AuthIgnore.java b/mallinkBApi/src/main/java/com/simple/annotation/AuthIgnore.java new file mode 100644 index 000000000..e92b1378a --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/annotation/AuthIgnore.java @@ -0,0 +1,16 @@ +package com.simple.annotation; + +import java.lang.annotation.*; + +/** + * api接口,忽略Token验证 + * @author stormeye.wu + * @email wuguoqiang@iformall.com + * @date 2017-03-23 15:44 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AuthIgnore { + +} diff --git a/mallinkBApi/src/main/java/com/simple/annotation/LoginUser.java b/mallinkBApi/src/main/java/com/simple/annotation/LoginUser.java new file mode 100644 index 000000000..b5ac735c0 --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/annotation/LoginUser.java @@ -0,0 +1,19 @@ +package com.simple.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 登录用户信息 + * + * @author stormeye.wu + * @email wuguoqiang@iformall.com + * @date 2017-03-23 20:39 + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface LoginUser { + +} diff --git a/mallinkBApi/src/main/java/com/simple/config/CorsConfig.java b/mallinkBApi/src/main/java/com/simple/config/CorsConfig.java new file mode 100644 index 000000000..d33a7559e --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/config/CorsConfig.java @@ -0,0 +1,22 @@ +package com.simple.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +/** + * Created by Administrator on 2017/8/9. + */ +@Configuration +public class CorsConfig extends WebMvcConfigurerAdapter { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "DELETE", "PUT") + .maxAge(3600); + } + +} diff --git a/mallinkBApi/src/main/java/com/simple/config/Swagger2Config.java b/mallinkBApi/src/main/java/com/simple/config/Swagger2Config.java new file mode 100644 index 000000000..136fbd3fb --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/config/Swagger2Config.java @@ -0,0 +1,49 @@ +package com.simple.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +//参考:http://blog.csdn.net/catoop/article/details/50668896 +@Configuration +@EnableSwagger2 +public class Swagger2Config { + + @Bean + public Docket createRestApi() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList(); + //增加一个request的header参数 + tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.simple.controller")) + .paths(PathSelectors.any()) + .build() + .globalOperationParameters(pars); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("c端 api") + .description("c api") + .termsOfServiceUrl("http://localhost:9000") + .version("2.0") + .build(); + } + +} \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/simple/config/WebMvcConfig.java b/mallinkBApi/src/main/java/com/simple/config/WebMvcConfig.java new file mode 100644 index 000000000..4ba634305 --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/config/WebMvcConfig.java @@ -0,0 +1,47 @@ +package com.simple.config; + +import com.simple.interceptor.AuthorizationInterceptor; +import com.simple.resolver.LoginUserHandlerMethodArgumentResolver; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import java.util.List; + +/** + * MVC配置 + * + * @author stormeye.wu + * @email wugq@mippoint.com + * @date 2017-04-20 22:30 + */ +@Configuration +public class WebMvcConfig extends WebMvcConfigurerAdapter { + @Autowired + private AuthorizationInterceptor authorizationInterceptor; + @Autowired + private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**"); + } + + @Override + public void addArgumentResolvers(List argumentResolvers) { + argumentResolvers.add(loginUserHandlerMethodArgumentResolver); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + //registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/"); + + } +} \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/simple/controller/BaseController.java b/mallinkBApi/src/main/java/com/simple/controller/BaseController.java index 7f8b36a46..2b07bd8f8 100644 --- a/mallinkBApi/src/main/java/com/simple/controller/BaseController.java +++ b/mallinkBApi/src/main/java/com/simple/controller/BaseController.java @@ -5,31 +5,85 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxCUser; +import com.simple.interceptor.AuthorizationInterceptor; +import com.simple.service.WxAppinfoService; +import com.simple.service.WxCUserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; @RestController public class BaseController { - @InitBinder - public void InitBinder(WebDataBinder dataBinder) { - dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { - public void setAsText(String value) { - try { - setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value)); - } catch(ParseException e) { - try { - setValue(new SimpleDateFormat("yyyy-MM-dd ").parse(value)); - } catch (ParseException e1) { - setValue(null); - } - } - } - - public String getAsText() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) getValue()); - } - - }); - } + @Autowired + private WxCUserService wxCUserService; + + @Autowired + private WxAppinfoService wxAppinfoService; + + @InitBinder + public void InitBinder(WebDataBinder dataBinder) { + dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + public void setAsText(String value) { + try { + setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value)); + } catch (ParseException e) { + try { + setValue(new SimpleDateFormat("yyyy-MM-dd ").parse(value)); + } catch (ParseException e1) { + setValue(null); + } + } + } + + public String getAsText() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) getValue()); + } + + }); + } + + + public WxCUser getUser() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + Long cUserId = (Long) request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY); + WxCUser user = wxCUserService.getById(cUserId); + return user; + } + + public String getTenantId() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + Long cUserId = (Long) request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY); + WxCUser user = wxCUserService.getById(cUserId); + return user.getTenantId(); + } + + public WxAppinfo getAppInfo(String appId) { + return wxAppinfoService.getByAppId(appId); + } + + public WxMaService getWeappService(String appId) { + + WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); + + WxMaInMemoryConfig config = new WxMaInMemoryConfig(); + config.setAppid(appinfo.getAppId()); + config.setSecret(appinfo.getSecret()); + config.setToken(appinfo.getToken()); + config.setAesKey(appinfo.getAesKey()); + config.setMsgDataFormat(appinfo.getMsgDataFormat()); + + WxMaService service = new WxMaServiceImpl(); + service.setWxMaConfig(config); + return service; + } } diff --git a/mallinkBApi/src/main/java/com/simple/controller/WxPayOrderController.java b/mallinkBApi/src/main/java/com/simple/controller/WxPayOrderController.java index 66d9602a5..13709709f 100644 --- a/mallinkBApi/src/main/java/com/simple/controller/WxPayOrderController.java +++ b/mallinkBApi/src/main/java/com/simple/controller/WxPayOrderController.java @@ -1,6 +1,8 @@ package com.simple.controller; import com.simple.common.ErrorCode; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxCUser; import com.simple.enums.EnumPayStatus; import com.simple.enums.EnumPayWay; import com.simple.exception.BizMessageException; @@ -37,31 +39,6 @@ public class WxPayOrderController extends BaseController { @Autowired private WxPayOrderService wxPayOrderService; - @ApiOperation(value = "发起微信小程序支付订单") - @ApiImplicitParams({ - @ApiImplicitParam(name = "cUserId", value = "用户id", required = true, dataType = "Long"), - @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long"), - @ApiImplicitParam(name = "payVendor", value = "支付发起渠道:0-微信小程序", defaultValue = "0",required = false, dataType = "Integer") - }) - @RequestMapping(value = "/create", method = RequestMethod.POST) - public ResultData _create(WxPayOrder record, HttpServletRequest request) throws Exception { - // 1. get openId by cUserId - // 2. check total fee is not null - // 3. check body is not null - // - logger.info("payment wechat, order create, param : " + record.toString()); - try { - record.setIp(IPUtil.getIpAddr(request)); - return wxPayOrderService.createPayOrder(record, EnumPayWay.PAY_WAY_WECHAT); - } catch (MallinkException e) { - logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); - } - return new ResultData(ErrorCode.PAYORDER_ERROR.getCode(), ErrorCode.PAYORDER_ERROR.getMessage()); - } - /** * * @return 接收微信异步通知 diff --git a/mallinkBApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java b/mallinkBApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java new file mode 100644 index 000000000..2c71bafcf --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java @@ -0,0 +1,69 @@ +package com.simple.interceptor; + + +import com.simple.annotation.AuthIgnore; +import com.simple.common.ErrorCode; +import com.simple.domain.po.WxCUser; +import com.simple.exception.MallinkException; +import com.simple.service.WxCUserService; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 权限(Token)验证 + * @author stormeye.wu + * @email wuguoqiang@iformall.com + * @date 2017-03-23 15:38 + */ +@Component +public class AuthorizationInterceptor extends HandlerInterceptorAdapter { + @Autowired + private WxCUserService wxCUserService; + + public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY"; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + AuthIgnore annotation; + if(handler instanceof HandlerMethod) { + annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthIgnore.class); + }else{ + return true; + } + + //如果有@IgnoreAuth注解,则不验证token + if(annotation != null){ + return true; + } + + //从header中获取token + String token = request.getHeader("token"); + //如果header中不存在token,则从参数中获取token + if(StringUtils.isBlank(token)){ + token = request.getParameter("token"); + } + + //token为空 + if(StringUtils.isBlank(token)){ + throw new MallinkException(ErrorCode.TOKEN_EMPTY); + } + + ///// TODO use b端用户表 + // 查询token信息 + WxCUser wxCUser = wxCUserService.getByToken(token); + if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){ + throw new MallinkException(ErrorCode.TOKEN_INVALID.getCode(), "URL:" + request.getRequestURL() + " token失效,请重新登录"); + } + + //设置userId到request里,后续根据userId,获取用户信息 + request.setAttribute(LOGIN_USER_KEY, wxCUser.getId()); + + return true; + } +} diff --git a/mallinkBApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java b/mallinkBApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java new file mode 100644 index 000000000..a39617a98 --- /dev/null +++ b/mallinkBApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java @@ -0,0 +1,46 @@ +package com.simple.resolver; + +import com.simple.annotation.LoginUser; +import com.simple.domain.po.WxCUser; +import com.simple.interceptor.AuthorizationInterceptor; +import com.simple.service.WxCUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +/** + * 有@LoginUser注解的方法参数,注入当前登录用户 + * @author stormeye.wu + * @email wugq@mippoint.com + * @date 2017-03-23 22:02 + */ +@Component +public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { + @Autowired + private WxCUserService wxCUserService; + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().isAssignableFrom(WxCUser.class) && parameter.hasParameterAnnotation(LoginUser.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, + NativeWebRequest request, WebDataBinderFactory factory) throws Exception { + //获取用户ID + Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST); + if(object == null){ + return null; + } + + //获取用户信息 + WxCUser user = wxCUserService.getByToken((String)object); + + return user; + } +} diff --git a/mallinkCApi/pom.xml b/mallinkCApi/pom.xml index 4ef0e25ce..6779bc68c 100644 --- a/mallinkCApi/pom.xml +++ b/mallinkCApi/pom.xml @@ -11,15 +11,7 @@ mallinkCApi - - 3.1.0 - - - com.github.binarywang - weixin-java-miniapp - ${weixin-java-miniapp.version} - com.simple mallinkService diff --git a/mallinkCApi/src/main/java/com/simple/controller/BaseController.java b/mallinkCApi/src/main/java/com/simple/controller/BaseController.java index 427a64661..55fabfdb5 100644 --- a/mallinkCApi/src/main/java/com/simple/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/simple/controller/BaseController.java @@ -5,8 +5,14 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; +import com.simple.annotation.AuthIgnore; +import com.simple.domain.po.WxAppinfo; import com.simple.domain.po.WxCUser; import com.simple.interceptor.AuthorizationInterceptor; +import com.simple.service.WxAppinfoService; import com.simple.service.WxCUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.WebDataBinder; @@ -22,6 +28,9 @@ public class BaseController { @Autowired private WxCUserService wxCUserService; + @Autowired + private WxAppinfoService wxAppinfoService; + @InitBinder public void InitBinder(WebDataBinder dataBinder) { dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @@ -57,4 +66,24 @@ public class BaseController { WxCUser user = wxCUserService.getById(cUserId); return user.getTenantId(); } + + public WxAppinfo getAppInfo(String appId) { + return wxAppinfoService.getByAppId(appId); + } + + public WxMaService getWeappService(String appId) { + + WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); + + WxMaInMemoryConfig config = new WxMaInMemoryConfig(); + config.setAppid(appinfo.getAppId()); + config.setSecret(appinfo.getSecret()); + config.setToken(appinfo.getToken()); + config.setAesKey(appinfo.getAesKey()); + config.setMsgDataFormat(appinfo.getMsgDataFormat()); + + WxMaService service = new WxMaServiceImpl(); + service.setWxMaConfig(config); + return service; + } } diff --git a/mallinkCApi/src/main/java/com/simple/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/simple/controller/WxPayOrderController.java index 209c42ea4..345008ac6 100644 --- a/mallinkCApi/src/main/java/com/simple/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/simple/controller/WxPayOrderController.java @@ -1,6 +1,9 @@ package com.simple.controller; +import cn.binarywang.wx.miniapp.api.WxMaService; import com.simple.common.ErrorCode; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxCUser; import com.simple.enums.EnumPayStatus; import com.simple.enums.EnumPayWay; import com.simple.exception.BizMessageException; @@ -38,23 +41,24 @@ public class WxPayOrderController extends BaseController { @ApiOperation(value = "发起微信小程序支付订单") @ApiImplicitParams({ - @ApiImplicitParam(name = "cUserId", value = "用户id", required = true, dataType = "Long"), @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long"), @ApiImplicitParam(name = "payVendor", value = "支付发起渠道:0-微信小程序", defaultValue = "0",required = false, dataType = "Integer") }) @RequestMapping(value = "/create", method = RequestMethod.POST) public ResultData _create(WxPayOrder record, HttpServletRequest request) throws Exception { logger.info("payment wechat, order create, param : " + record.toString()); + WxCUser user = getUser(); + WxAppinfo appInfo = getAppInfo(user.getAppId()); try { record.setIp(IPUtil.getIpAddr(request)); - return wxPayOrderService.createPayOrder(record, EnumPayWay.PAY_WAY_WECHAT); + return wxPayOrderService.createPayOrder(appInfo, user, record, EnumPayWay.PAY_WAY_WECHAT); } catch (MallinkException e) { logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); } - return new ResultData(ErrorCode.PAYORDER_ERROR.getCode(), ErrorCode.PAYORDER_ERROR.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR); } /** diff --git a/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java index b45aae627..1fcbe5d5e 100755 --- a/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java @@ -39,27 +39,9 @@ import java.util.Map; public class WxUserGrantController extends BaseController { private final static Logger logger = LoggerFactory.getLogger(WxUserGrantController.class); - @Autowired - private WxAppinfoService wxAppinfoService; @Autowired private WxCUserService wxCUserService; - private WxMaService createFromId(String appId) { - - WxAppinfo appinfo = wxAppinfoService.getByAppId(appId); - - WxMaInMemoryConfig config = new WxMaInMemoryConfig(); - config.setAppid(appinfo.getAppId()); - config.setSecret(appinfo.getSecret()); - config.setToken(appinfo.getToken()); - config.setAesKey(appinfo.getAesKey()); - config.setMsgDataFormat(appinfo.getMsgDataFormat()); - - WxMaService service = new WxMaServiceImpl(); - service.setWxMaConfig(config); - return service; - } - /** * 用户登录 * @param map @@ -74,7 +56,7 @@ public class WxUserGrantController extends BaseController { Map resultMap = new HashMap(); String appId = map.get("appId"); - WxMaService wxMaService = createFromId(appId); + WxMaService wxMaService = getWeappService(appId); String code = map.get("code"); String scene = map.get("scene"); @@ -163,7 +145,7 @@ public class WxUserGrantController extends BaseController { WxCUser user = getUser(); if (user != null) { - WxMaService wxMaService = createFromId(user.getAppId()); + WxMaService wxMaService = getWeappService(user.getAppId()); logger.debug(user.toString()); String session_key = user.getSessionKey(); @@ -221,7 +203,7 @@ public class WxUserGrantController extends BaseController { WxCUser user = getUser(); - WxMaService wxMaService = createFromId(user.getAppId()); + WxMaService wxMaService = getWeappService(user.getAppId()); String session_key = user.getSessionKey(); try { diff --git a/mallinkService/src/main/java/com/simple/common/ErrorCode.java b/mallinkService/src/main/java/com/simple/common/ErrorCode.java index df8714916..ffc2790fb 100644 --- a/mallinkService/src/main/java/com/simple/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/simple/common/ErrorCode.java @@ -87,8 +87,9 @@ public enum ErrorCode{ /** * 支付 */ - PAYORDER_ERROR(12004, "支付订单异常"), - PAYORDER_NOTIFY_CHECK_SIGN_ERROR(12005 , "验签失败"); + PAY_ORDER_EXIST(12001, "支付订单已存在"), + PAY_ORDER_ERROR(12004, "支付订单异常"), + PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR(12005 , "验签失败"); diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java b/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java index 6f83790aa..6aadb354e 100644 --- a/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java +++ b/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java @@ -16,7 +16,7 @@ public class WxAppinfo implements Serializable { protected Long id; @Transient - protected List ids; + protected List ids; @Transient protected String sortColumns; @@ -32,10 +32,11 @@ public class WxAppinfo implements Serializable { return sortColumns; } - public List getIds() { + public List getIds() { return ids; } - public void setIds(List ids) { + + public void setIds(List ids) { this.ids = ids; } @@ -62,6 +63,12 @@ public class WxAppinfo implements Serializable { /*消息类型**/ @io.swagger.annotations.ApiModelProperty(value="消息类型",name="msgDataFormat") private String msgDataFormat; + /*微信商户ID**/ + @io.swagger.annotations.ApiModelProperty(value="微信商户ID",name="mchId") + private String mchId; + /*微信支付回调**/ + @io.swagger.annotations.ApiModelProperty(value="微信支付回调",name="notifyUrl") + private String notifyUrl; /*微信访问token**/ @io.swagger.annotations.ApiModelProperty(value="微信访问token",name="accessToken") private String accessToken; @@ -113,6 +120,18 @@ public class WxAppinfo implements Serializable { public void setMsgDataFormat(String _msgDataFormat) { msgDataFormat = _msgDataFormat; } + public String getMchId() { + return mchId; + } + public void setMchId(String _mchId) { + mchId = _mchId; + } + public String getNotifyUrl() { + return notifyUrl; + } + public void setNotifyUrl(String _notifyUrl) { + notifyUrl = _notifyUrl; + } public String getAccessToken() { return accessToken; } @@ -144,6 +163,8 @@ public class WxAppinfo implements Serializable { ,Token_ASC("`token` ASC"),Token_DESC("`token` DESC") ,AesKey_ASC("`aesKey` ASC"),AesKey_DESC("`aesKey` DESC") ,MsgDataFormat_ASC("`msgDataFormat` ASC"),MsgDataFormat_DESC("`msgDataFormat` DESC") + ,MchId_ASC("`mchId` ASC"),MchId_DESC("`mchId` DESC") + ,NotifyUrl_ASC("`notifyUrl` ASC"),NotifyUrl_DESC("`notifyUrl` DESC") ,AccessToken_ASC("`accessToken` ASC"),AccessToken_DESC("`accessToken` DESC") ,LastTokenTime_ASC("`lastTokenTime` ASC"),LastTokenTime_DESC("`lastTokenTime` DESC") ,ExpiresIn_ASC("`expiresIn` ASC"),ExpiresIn_DESC("`expiresIn` DESC") diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/simple/domain/po/WxCoupon.java index d706137fe..010f5a16b 100644 --- a/mallinkService/src/main/java/com/simple/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/simple/domain/po/WxCoupon.java @@ -16,7 +16,7 @@ public class WxCoupon implements Serializable { protected Long id; @Transient - protected List ids; + protected List ids; @Transient protected String sortColumns; @@ -32,10 +32,11 @@ public class WxCoupon implements Serializable { return sortColumns; } - public List getIds() { + public List getIds() { return ids; } - public void setIds(List ids) { + + public void setIds(List ids) { this.ids = ids; } @@ -61,10 +62,10 @@ public class WxCoupon implements Serializable { private String subTitle; /*售价(适用于类型2,3,4,5)**/ @io.swagger.annotations.ApiModelProperty(value="售价(适用于类型2,3,4,5)",name="salePrice") - private BigDecimal salePrice; + private Integer salePrice; /*使用条件金额(适用于类型1,2,3,4)**/ @io.swagger.annotations.ApiModelProperty(value="使用条件金额(适用于类型1,2,3,4)",name="usePrice") - private BigDecimal usePrice; + private Integer usePrice; /*限领张数**/ @io.swagger.annotations.ApiModelProperty(value="限领张数",name="useLimitQuantity") private Integer useLimitQuantity; @@ -97,7 +98,7 @@ public class WxCoupon implements Serializable { private String detail; /*面额**/ @io.swagger.annotations.ApiModelProperty(value="面额",name="price") - private BigDecimal price; + private Integer price; /*剩余库存**/ @io.swagger.annotations.ApiModelProperty(value="剩余库存",name="remainInventory") private Integer remainInventory; @@ -107,8 +108,8 @@ public class WxCoupon implements Serializable { /*购买须知**/ @io.swagger.annotations.ApiModelProperty(value="购买须知",name="remark") private String remark; - /*状态(0:草稿,1:待生效,2:已生效,3:已失效,4:已作废)**/ - @io.swagger.annotations.ApiModelProperty(value="状态(0:草稿,1:待生效,2:已生效,3:已失效,4:已作废)",name="status") + /*状态(-1:全部,0:草稿/待生效,1:已生效,2:已失效,3:已作废)**/ + @io.swagger.annotations.ApiModelProperty(value="状态(-1:全部,0:草稿/待生效,1:已生效,2:已失效,3:已作废)",name="status") private Integer status; /*创建时间**/ @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") @@ -119,7 +120,6 @@ public class WxCoupon implements Serializable { /*业态**/ @io.swagger.annotations.ApiModelProperty(value="业态",name="business") private String business; - public String getTenantId() { return tenantId; } @@ -156,16 +156,16 @@ public class WxCoupon implements Serializable { public void setSubTitle(String _subTitle) { subTitle = _subTitle; } - public BigDecimal getSalePrice() { + public Integer getSalePrice() { return salePrice; } - public void setSalePrice(BigDecimal _salePrice) { + public void setSalePrice(Integer _salePrice) { salePrice = _salePrice; } - public BigDecimal getUsePrice() { + public Integer getUsePrice() { return usePrice; } - public void setUsePrice(BigDecimal _usePrice) { + public void setUsePrice(Integer _usePrice) { usePrice = _usePrice; } public Integer getUseLimitQuantity() { @@ -228,10 +228,10 @@ public class WxCoupon implements Serializable { public void setDetail(String _detail) { detail = _detail; } - public BigDecimal getPrice() { + public Integer getPrice() { return price; } - public void setPrice(BigDecimal _price) { + public void setPrice(Integer _price) { price = _price; } public Integer getRemainInventory() { @@ -325,7 +325,7 @@ public class WxCoupon implements Serializable { } } - public void setSortColumns(Field... fields) + public void setSortColumns(WxCoupon.Field... fields) { if (fields == null || fields.length == 0) { return; @@ -350,7 +350,7 @@ public class WxCoupon implements Serializable { } if (sortColumns.contains(",")) { String[] cols = sortColumns.split(","); - List fList = new ArrayList(); + java.util.List fList = new java.util.ArrayList(); for (int k = 0; k < cols.length; k++) { fList.add(Field.valueOf(cols[k])); } diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java index e3389bc10..a30cec926 100644 --- a/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java @@ -69,7 +69,7 @@ public class WxCouponOrder implements Serializable { private Date updateDate; /*单券实际购买价格**/ @io.swagger.annotations.ApiModelProperty(value = "单券实际购买价格", name = "couponPrice") - private BigDecimal couponPrice; + private Integer couponPrice; public Long getTenantId() { return tenantId; @@ -143,89 +143,78 @@ public class WxCouponOrder implements Serializable { updateDate = _updateDate; } - public BigDecimal getCouponPrice() { + public Integer getCouponPrice() { return couponPrice; } - public void setCouponPrice(BigDecimal _couponPrice) { + public void setCouponPrice(Integer _couponPrice) { couponPrice = _couponPrice; } - public static enum Field { - CouponOrderId_ASC("`couponOrderId` ASC"), - CouponOrderId_DESC("`couponOrderId` DESC"), - TenantId_ASC("`tenantId` ASC"), - TenantId_DESC("`tenantId` DESC"), - CouponId_ASC("`couponId` ASC"), - CouponId_DESC("`couponId` DESC"), - CUserId_ASC("`cUserId` ASC"), - CUserId_DESC("`cUserId` DESC"), - BUserId_ASC("`bUserId` ASC"), - BUserId_DESC("`bUserId` DESC"), - OrderId_ASC("`orderId` ASC"), - OrderId_DESC("`orderId` DESC"), - ExpiredTime_ASC("`expiredTime` ASC"), - ExpiredTime_DESC("`expiredTime` DESC"), - CouponOrderStatus_ASC("`couponOrderStatus` ASC"), - CouponOrderStatus_DESC("`couponOrderStatus` DESC"), - CreateDate_ASC("`createDate` ASC"), - CreateDate_DESC("`createDate` DESC"), - UpdateDate_ASC("`updateDate` ASC"), - UpdateDate_DESC("`updateDate` DESC"), - CouponPrice_ASC("`couponPrice` ASC"), - CouponPrice_DESC("`couponPrice` DESC"); - - private String value; - - Field(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setCol(String value) { - this.value = value; - } - - @Override - public String toString() { - return this.getValue(); - } - } - - public void setSortColumns(WxCouponOrder.Field... fields) { - if (fields == null || fields.length == 0) { - return; - } - for (int k = 0; k < fields.length; k++) { - if (fields[k] == null) { - return; - } - } - StringBuilder sb = new StringBuilder(fields[0].toString()); - for (int k = 1; k < fields.length; k++) { - sb.append(","); - sb.append(fields[k].toString()); - } - - } - - public void setSortColumns(String sortColumns) { - if (sortColumns == null || "".equals(sortColumns.trim())) { - return; - } - if (sortColumns.contains(",")) { - String[] cols = sortColumns.split(","); - java.util.List fList = new java.util.ArrayList(); - for (int k = 0; k < cols.length; k++) { - fList.add(Field.valueOf(cols[k])); - } - this.setSortColumns(fList.toArray(new Field[fList.size()])); - } else { - this.setSortColumns(Field.valueOf(sortColumns)); - } - } + + public static enum Field + { + Id_ASC("`id` ASC"),Id_DESC("`id` DESC") + ,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC") + ,CouponId_ASC("`couponId` ASC"),CouponId_DESC("`couponId` DESC") + ,CUserId_ASC("`cUserId` ASC"),CUserId_DESC("`cUserId` DESC") + ,BUserId_ASC("`bUserId` ASC"),BUserId_DESC("`bUserId` DESC") + ,OrderId_ASC("`orderId` ASC"),OrderId_DESC("`orderId` DESC") + ,ExpiredTime_ASC("`expiredTime` ASC"),ExpiredTime_DESC("`expiredTime` DESC") + ,CouponOrderStatus_ASC("`couponOrderStatus` ASC"),CouponOrderStatus_DESC("`couponOrderStatus` DESC") + ,CreateDate_ASC("`createDate` ASC"),CreateDate_DESC("`createDate` DESC") + ,UpdateDate_ASC("`updateDate` ASC"),UpdateDate_DESC("`updateDate` DESC") + ,CouponPrice_ASC("`couponPrice` ASC"),CouponPrice_DESC("`couponPrice` DESC") + ; + private String value; + Field(String value){ + this.value = value; + } + public String getValue() { + return value; + } + public void setCol(String value) { + this.value = value; + } + @Override + public String toString() { + return this.getValue(); + } + } + + public void setSortColumns(WxCouponOrder.Field... fields) + { + if (fields == null || fields.length == 0) { + return; + } + for (int k = 0; k < fields.length; k++) { + if (fields[k] == null) { + return; + } + } + StringBuilder sb = new StringBuilder(fields[0].toString()); + for (int k = 1; k < fields.length; k++) { + sb.append(","); + sb.append(fields[k].toString()); + } + + } + + public void setSortColumns(String sortColumns) + { + if (sortColumns == null || "".equals(sortColumns.trim())) { + return; + } + if (sortColumns.contains(",")) { + String[] cols = sortColumns.split(","); + java.util.List fList = new java.util.ArrayList(); + for (int k = 0; k < cols.length; k++) { + fList.add(Field.valueOf(cols[k])); + } + this.setSortColumns(fList.toArray(new Field[fList.size()])); + } else { + this.setSortColumns(Field.valueOf(sortColumns)); + } + } } diff --git a/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java new file mode 100644 index 000000000..39fce4b26 --- /dev/null +++ b/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java @@ -0,0 +1,48 @@ +package com.simple.service; + +import java.util.*; +import com.github.pagehelper.PageInfo; +import com.simple.domain.po.WxCouponOrder; + +public interface WxCouponOrderService { + + /** + * 根据实体查询分页列表 + * + * @param record + * @param offset + * @param limit + * @return + */ + PageInfo listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize); + + /** + * 根据Id获得实体 + * + * @param id + * @return + */ + WxCouponOrder getById(Long id); + + /** + * 保存或更新实体 + * + * @param record + */ + void saveOrUpdate(WxCouponOrder record); + + /** + * 根据Id删除实体 + * + * @param id + */ + void deleteById(Long id); + + + + + + + + +} diff --git a/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java b/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java index a012a791e..18bf36e52 100644 --- a/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/simple/service/WxPayOrderService.java @@ -1,8 +1,11 @@ package com.simple.service; import java.util.*; + import com.github.pagehelper.PageInfo; import com.simple.common.ResultData; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxCUser; import com.simple.domain.po.WxPayOrder; import com.simple.enums.EnumPayWay; @@ -14,7 +17,7 @@ public interface WxPayOrderService { * @param payWay * @return */ - ResultData createPayOrder(WxPayOrder record, EnumPayWay payWay); + ResultData createPayOrder(WxAppinfo appInfo, WxCUser user, WxPayOrder record, EnumPayWay payWay); void handleOrderPaySuccess(WxPayOrder record, String transactionId); diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java index e9f2d641a..243665dd5 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java @@ -81,7 +81,7 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.TOO_MANY_REQUEST); } - BigDecimal payPrice = null; + int payPrice = 0; int payment = 0; Date curr = new Date(); @@ -108,9 +108,7 @@ public class WxOrderServiceImpl implements WxOrderService { } payPrice = coupon.getSalePrice(); - - BigDecimal ll = coupon.getSalePrice().multiply(new BigDecimal(100)); - payment = ll.intValue(); + payment = coupon.getSalePrice(); valid_date = (coupon.getValidType() == EnumValidStatus.VALID_RANGE.getCode())?coupon.getValidEndDate(): new Date((curr.getTime()/1000+coupon.getValidDays()*24*60*60)*1000); diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java index 852d8c5b3..d7276364e 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java @@ -3,12 +3,15 @@ package com.simple.service.impl; import java.math.BigDecimal; import java.util.*; +import cn.binarywang.wx.miniapp.api.WxMaService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.simple.common.ErrorCode; import com.simple.common.ResultData; +import com.simple.domain.po.WxAppinfo; +import com.simple.domain.po.WxCUser; import com.simple.domain.po.WxOrder; import com.simple.domain.po.WxPayOrder; import com.simple.enums.EnumOrderStatus; @@ -46,11 +49,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Autowired WxOrderService wxOrderService; - String weappId = ""; - String wechatMchId = ""; - String partnerKey = ""; - String wxpayNotifyUrl = ""; - JSONObject errorMap = JSON.parseObject("{\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," + "\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"用户帐号余额不足\",\"resolution\":\"用户帐号余额不足,请用户充值或更换支付卡后再支付\"}," + "\"ORDERPAID\":{\"detail\":\"商户订单已支付\",\"reason\":\"商户订单已支付,无需重复操作\",\"resolution\":\"商户订单已支付,无需更多操作\"}," + @@ -68,7 +66,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { "\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); @Override - public ResultData createPayOrder(WxPayOrder record, EnumPayWay payWay) { + public ResultData createPayOrder(WxAppinfo appInfo, WxCUser user, WxPayOrder record, EnumPayWay payWay) { final IdWorker idworker = IdWorker.get(); try { @@ -83,8 +81,12 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.ORDER_IS_NOT_PAY); } // TODO body - String body = ""; + String body = "test"; // 2. check 是否有支付订单 + List list = wxPayOrderMapper.findList(record); + if (list.size() > 0) { + throw new MallinkException(ErrorCode.PAY_ORDER_EXIST); + } // 3. 创建支付订单 Date currentDate = new Date(); @@ -103,27 +105,25 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { int sqlRow = wxPayOrderMapper.insertSelective(record); if(sqlRow == 1) { - return new ResultData(); + throw new MallinkException(ErrorCode.DB_FAIL); } - /* { // 统一下单 String noncestr = Utility.generate32UUID(); WxPayOrderP wxPayOrderP = new WxPayOrderP(); - wxPayOrderP.setAppid(weappId); - wxPayOrderP.setMch_id(wechatMchId); + wxPayOrderP.setAppid(appInfo.getAppId()); + wxPayOrderP.setMch_id(appInfo.getMchId()); wxPayOrderP.setNonce_str(noncestr); wxPayOrderP.setBody(body); wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); - BigDecimal llp = order.getPayment().multiply(new BigDecimal(100)); - wxPayOrderP.setTotal_fee(llp.intValue()); + wxPayOrderP.setTotal_fee(order.getPayment()); wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderP.setNotify_url(wxpayNotifyUrl); + wxPayOrderP.setNotify_url(appInfo.getNotifyUrl()); wxPayOrderP.setTrade_type(WxPay.TradeType.APP.name()); // 终端类型 wxPayOrderP.setProduct_id(String.valueOf(order.getId())); // 订单ID wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentTime)); wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentTime + 15 * 60)); // 15分钟结束 - wxPayOrderP.setSign(WxPayment.createSign(BeanUtils.toStringMap(wxPayOrderP), partnerKey)); + wxPayOrderP.setSign(WxPayment.createSign(BeanUtils.toStringMap(wxPayOrderP), appInfo.getSecret())); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); logger.info("pay order, wechat pushOrder, wxPayOrder:" + wxPayOrderP.toString() + ", response: " + response.toString()); Map returnMap = WxPayment.xmlToMap(response); @@ -136,7 +136,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { sighMap.put("timeStamp", timestamp); sighMap.put("nonceStr", noncestr); sighMap.put("package", "prepay_id="+prepay_id); - String signAgent = WxPayment.createSign(sighMap, partnerKey); + String signAgent = WxPayment.createSign(sighMap, appInfo.getSecret()); returnMap.put("timeStamp", timestamp); returnMap.put("nonceStr", noncestr); returnMap.put("package", "prepay_id="+prepay_id); @@ -144,15 +144,13 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return new ResultData(200, "创建支付订单成功", returnMap); } else { JSONObject errObj = errorMap.getJSONObject(result_no); - return new ResultData(ErrorCode.PAYORDER_ERROR.getCode(), errObj.toJSONString(), returnMap); + return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errObj.toJSONString(), returnMap); } } - */ - return new ResultData(); } catch (RuntimeException e) { - throw new MallinkException(ErrorCode.PAYORDER_ERROR); + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); } catch (Exception e) { - throw new MallinkException(ErrorCode.PAYORDER_ERROR); + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); } } @@ -171,7 +169,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } if (!signVerified) { logger.warn("notify order, wxpay checksign error, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); - throw new MallinkException(ErrorCode.PAYORDER_NOTIFY_CHECK_SIGN_ERROR); + throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); } if (!"SUCCESS".equals(paramMap.get("return_code"))) { logger.warn("notify order, wxpay status not success, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); @@ -231,7 +229,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } catch (RuntimeException e) { logger.warn("notify order, alipay checksign error, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.PAYORDER_NOTIFY_CHECK_SIGN_ERROR); + throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); } return ""; } diff --git a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml index 5f3170dcd..b757b20ca 100644 --- a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml @@ -10,13 +10,15 @@ + + - `id`,`tenant_id`,`app_id`,`name`,`secret`,`token`,`aes_key`,`msg_data_format`,`access_token`,`last_token_time`,`expires_in` + `id`,`tenant_id`,`app_id`,`name`,`secret`,`token`,`aes_key`,`msg_data_format`,`mch_id`,`notify_url`,`access_token`,`last_token_time`,`expires_in` @@ -59,6 +61,15 @@ and `msg_data_format` like concat('%', #{msgDataFormat},'%') + + + + and `mch_id` like concat('%', #{mchId},'%') + + + + + and `notify_url` like concat('%', #{notifyUrl},'%') diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 2333e89aa..28aab475c 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -9,8 +9,8 @@ - - + + @@ -21,7 +21,7 @@ - + diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index d109c4057..c645f5ded 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -12,7 +12,7 @@ - + diff --git a/pom.xml b/pom.xml index d7bbe663c..53c9af695 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,10 @@ + + 3.1.0 + + org.springframework.boot @@ -208,6 +212,12 @@ 2.8.5 + + com.github.binarywang + weixin-java-miniapp + ${weixin-java-miniapp.version} + +