From 2c4b1ceaa288ccc04cb115c0a2d9b7ef62f1c688 Mon Sep 17 00:00:00 2001 From: hupeng Date: Sat, 28 Sep 2019 09:47:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E9=99=86=E9=9B=86=E6=88=90=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=99=BB=E9=99=86=E5=8F=8A?= =?UTF-8?q?=E5=85=B6=E5=A2=9E=E5=8A=A0=E4=BD=99=E9=A2=9D=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/app/common/utils/JsonUtils.java | 28 ++++++ .../auth/controller/AuthController.java | 85 ++++++++++++++----- .../shop/controller/MallController.java | 2 +- .../shop/controller/PayController.java | 33 +++---- ruoyi-api/src/main/resources/application.yml | 14 ++- 5 files changed, 122 insertions(+), 40 deletions(-) create mode 100644 ruoyi-api/src/main/java/com/ruoyi/app/common/utils/JsonUtils.java diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/common/utils/JsonUtils.java b/ruoyi-api/src/main/java/com/ruoyi/app/common/utils/JsonUtils.java new file mode 100644 index 0000000..adc39cd --- /dev/null +++ b/ruoyi-api/src/main/java/com/ruoyi/app/common/utils/JsonUtils.java @@ -0,0 +1,28 @@ +package com.ruoyi.app.common.utils; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +/** + * @author Binary Wang + */ +public class JsonUtils { + private static final ObjectMapper JSON = new ObjectMapper(); + + static { + JSON.setSerializationInclusion(Include.NON_NULL); + JSON.configure(SerializationFeature.INDENT_OUTPUT, Boolean.TRUE); + } + + public static String toJson(Object obj) { + try { + return JSON.writeValueAsString(obj); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java index 8e99cce..98e1192 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/auth/controller/AuthController.java @@ -1,22 +1,33 @@ package com.ruoyi.app.modular.auth.controller; + + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.itmuch.lightsecurity.annotation.PreAuthorize; import com.itmuch.lightsecurity.jwt.JwtOperator; import com.itmuch.lightsecurity.jwt.User; import com.itmuch.lightsecurity.jwt.UserOperator; import com.ruoyi.app.common.R; import com.ruoyi.app.common.persistence.model.StoreMember; +import com.ruoyi.app.common.utils.JsonUtils; import com.ruoyi.app.modular.member.service.IMemberService; import com.ruoyi.app.modular.member.service.vo.LoginVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; /** @@ -25,6 +36,7 @@ import java.util.HashMap; * @Date 2019/6/27 **/ //@RequestMapping(value = "/") +@Slf4j @RestController @RequiredArgsConstructor(onConstructor = @__(@Autowired)) @Api(value = "认证授权模块", tags = "认证授权模块", description = "认证授权模块") @@ -32,6 +44,7 @@ public class AuthController { private final UserOperator userOperator; private final JwtOperator operator; private final IMemberService memberService; + private final WxMaService wxService; /** * 获取当前登录用户信息 @@ -53,25 +66,59 @@ public class AuthController { @PostMapping("/oauth/access_token") @ApiOperation(value = "获取token",notes = "获取token") public R loginReturnToken(@Validated @RequestBody LoginVO loginVO) { - Boolean isProduct = false; - String openid = null; - if(isProduct){ - //todo 此处结合小程序API - }else{ - openid = "orIMY4xGhMmipwFZoSL1vOhUNFZ0"; + Boolean isProduct = true; //true 开启真实小程序环境 + String openid = "orIMY4xGhMmipwFZoSL1vOhUNFZ0"; + WxMaUserInfo userInfo = null; + try{ + if(isProduct){ + WxMaJscode2SessionResult session = wxService.getUserService() + .getSessionInfo(loginVO.getCode()); + //log.info(session.getSessionKey()); + //log.info(session.getOpenid()); + //TODO 可以增加自己的逻辑,关联业务相关数据 + + String sessionKey = session.getSessionKey(); + openid = session.getOpenid(); + // 解密用户信息 + userInfo = wxService.getUserService() + .getUserInfo(sessionKey, loginVO.getEncrypted_data(), loginVO.getIv()); + + } + + StoreMember member = memberService.login(openid); + //System.out.println(member); + User user = null; + if(member == null){ + //新用户插入数据 + StoreMember newMember = new StoreMember(); + newMember.setOpenid(userInfo.getOpenId()); + newMember.setNickname(userInfo.getNickName()); + newMember.setHeadimg(userInfo.getAvatarUrl()); + newMember.setSex(userInfo.getGender()); + newMember.setCreateTime(new Date()); + memberService.save(newMember); + user = User.builder() + .id(newMember.getId().intValue()) + .username(newMember.getNickname()) + .build(); + }else{ + user = User.builder() + .id(member.getId().intValue()) + .username(member.getNickname()) + .build(); + } + + + String token = operator.generateToken(user); + HashMap map = new HashMap<>(); + map.put("access_token",token); + return R.success(map); + } catch (WxErrorException e) { + //System.out.println(e.getMessage()); + log.error(e.getMessage()); + return R.error(4000,e.getMessage()); } - StoreMember member = memberService.login(openid); - if(member == null){ - R.error(401,"用户登陆失败"); - } - User user = User.builder() - .id(member.getId().intValue()) - .username(member.getNickname()) - //.roles(Arrays.asList("user", "admin")) - .build(); - String token = operator.generateToken(user); - HashMap map = new HashMap<>(); - map.put("access_token",token); - return R.success(map); + + } } \ No newline at end of file diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java index 720c0ca..8973a11 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/MallController.java @@ -174,7 +174,7 @@ public class MallController { } HashMap map = new HashMap<>(); - map.put("orderSn",orderSn); + map.put("order_no",orderSn); return R.success(map); } diff --git a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/PayController.java b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/PayController.java index 3aefd3c..e498b57 100644 --- a/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/PayController.java +++ b/ruoyi-api/src/main/java/com/ruoyi/app/modular/shop/controller/PayController.java @@ -87,23 +87,24 @@ public class PayController { orderService.payYue(storeOrder); return R.success("余额支付成功"); }else{ + return R.error(4000,"微信支付开发中"); //todo 微信支付 - try { - //WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); - orderRequest.setBody("主题"); - orderRequest.setOutTradeNo("订单号"); - orderRequest.setTotalFee(1);//元转成分 - orderRequest.setOpenid("openId"); - orderRequest.setSpbillCreateIp("userIp"); - //orderRequest.setTimeStart("yyyyMMddHHmmss"); - // orderRequest.setTimeExpire("yyyyMMddHHmmss"); - - return R.success(wxPayService.createOrder(orderRequest)); - } catch (Exception e) { - log.error("微信支付失败!订单号:{},原因:{}", orderNo, e.getMessage()); - e.printStackTrace(); - return R.error(4000,"支付失败,请稍后重试!"); - } +// try { +// //WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); +// orderRequest.setBody("主题"); +// orderRequest.setOutTradeNo("订单号"); +// orderRequest.setTotalFee(1);//元转成分 +// orderRequest.setOpenid("openId"); +// orderRequest.setSpbillCreateIp("userIp"); +// //orderRequest.setTimeStart("yyyyMMddHHmmss"); +// // orderRequest.setTimeExpire("yyyyMMddHHmmss"); +// +// return R.success(wxPayService.createOrder(orderRequest)); +// } catch (Exception e) { +// log.error("微信支付失败!订单号:{},原因:{}", orderNo, e.getMessage()); +// e.printStackTrace(); +// return R.error(4000,"支付失败,请稍后重试!"); +// } } diff --git a/ruoyi-api/src/main/resources/application.yml b/ruoyi-api/src/main/resources/application.yml index cecd8d9..0448095 100644 --- a/ruoyi-api/src/main/resources/application.yml +++ b/ruoyi-api/src/main/resources/application.yml @@ -58,9 +58,9 @@ spring: #driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.p6spy.engine.spy.P6SpyDriver #driverClassName: com.mysql.cj.jdbc.Driver - username: supply - password: supply#@147 - url: jdbc:p6spy:mysql://localhost:3306/supply?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC + username: root + password: root + url: jdbc:p6spy:mysql://localhost:3306/ruoyi?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC #url: jdbc:mysql://localhost:3306/ruoyi?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC type: com.alibaba.druid.pool.DruidDataSource #这里是配置druid连接池,以下都是druid的配置信息 druid: @@ -148,4 +148,10 @@ wx: mchKey: subAppId: subMchId: - keyPath: \ No newline at end of file + keyPath: + miniapp: + appid: wx604d2ea4702620d2 + secret: 0beb4dad95fbd97cbaf2a0a4dec51575 + token: + aesKey: + msgDataFormat: JSON \ No newline at end of file