Browse Source

新增小程序登陆

赵冬冬 4 years ago
parent
commit
a408ed82fb

+ 1 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/CarbonH5ServiceApplication.java

@@ -19,6 +19,7 @@ public class CarbonH5ServiceApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(CarbonH5ServiceApplication.class, args);
+        System.out.println("---------------------h5启动成功!---------------------");
     }
 
 }

+ 27 - 31
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/controller/web/WechatAppController.java

@@ -9,6 +9,7 @@ import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
+import com.hcloud.microserver.h5.entity.LoginRequest;
 import com.hcloud.microserver.h5.service.CustomerInfoService;
 import com.hcloud.microserver.commoncore.annotation.AuthCarbonValidate;
 import com.hcloud.microserver.commoncore.base.BaseController;
@@ -56,28 +57,42 @@ public class WechatAppController extends BaseController {
 
     @Autowired
     private CustomerInfoService customerInfoService;
+
     /**
      * 登陆接口
      */
     @PostMapping("/login")
     @ResponseBody
-    public ResponseBase login(@RequestBody MyWxMpUser myWxMpUser) {
-        String code = myWxMpUser.getCode();
+    public ResponseBase login(@RequestBody LoginRequest request) {
+        String code = request.getCode();
         if (StringUtils.isBlank(code)) {
             return responseSuccess(new ResultVO(1, "请输入code错误!"));
         }
         try {
-            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
-            this.logger.info(session.getSessionKey());
-            this.logger.info(session.getOpenid());
+
+            // 获取微信用户session
+            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(request.getCode());
+            if (null == session) {
+                throw new RuntimeException("login handler error");
+            }
+
+            // 解密用户信息
+            WxMaUserInfo wxUserInfo = wxMaService.getUserService().getUserInfo(session.getSessionKey(),
+                    request.getEncryptedData(), request.getIv());
+            if (null == wxUserInfo) {
+                throw new RuntimeException("wxUser not exist");
+            }
+
+            MyWxMpUser myWxMpUser=new MyWxMpUser();
             //TODO 可以增加自己的逻辑,关联业务相关数据
             myWxMpUser.setOpenId(session.getOpenid());
-            myWxMpUser.setUnionId(session.getOpenid());
+            myWxMpUser.setUnionId(session.getUnionid());
+            myWxMpUser.setNickname(wxUserInfo.getNickName());
+            myWxMpUser.setHeadImgUrl(wxUserInfo.getAvatarUrl());
             //后台新增用户成功
-            String customerId = customerInfoService.wxlogin(myWxMpUser);
+            Map<String, String> tokenMap = customerInfoService.wxlogin(myWxMpUser);
             //登录系统获取本地
-            Map<String, Object> resultMap = getStringObjectMap(customerId);
-            return responseSuccess(new ResultVO(ResultEnum.SUCCESS, resultMap));
+            return responseSuccess(new ResultVO(ResultEnum.SUCCESS, tokenMap));
         } catch (WxErrorException e) {
             this.logger.error(e.getMessage(), e);
             return responseSuccess(new ResultVO(1, "登录错误!"));
@@ -111,24 +126,7 @@ public class WechatAppController extends BaseController {
         return responseSuccess(new ResultVO(ResultEnum.SUCCESS, resultMap));
     }
 
-    /**
-     * <pre>
-     * 获取用户信息接口
-     * </pre>
-     */
-    @GetMapping("/info")
-    public String info(String sessionKey,
-                       String signature, String rawData, String encryptedData, String iv) {
-        // 用户信息校验
-        if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
-            return "user check failed";
-        }
-        // 解密用户信息
-        WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
-        MyWxMpUser myWxMpUser = getMyWxMpUser(userInfo);
-        String wxlogin = customerInfoService.wxlogin(myWxMpUser);
-        return JsonUtils.toJson(wxlogin);
-    }
+
 
     private MyWxMpUser getMyWxMpUser(WxMaUserInfo userInfo) {
         String openId = userInfo.getOpenId();
@@ -146,8 +144,6 @@ public class WechatAppController extends BaseController {
     }
 
 
-
-
     @Value("${wx.auth.wxpayAppcallbackurl}")
     private String wxpayCallbackUrl;
 
@@ -158,7 +154,7 @@ public class WechatAppController extends BaseController {
     @PostMapping("/pay")
     @AuthCarbonValidate
     @ResponseBody
-    public ResponseBase pay( HttpServletRequest request) {
+    public ResponseBase pay(HttpServletRequest request) {
 //        String orderId = wxPayFrom.getOrderId();
 //        String openid = wxPayFrom.getOpenid();
 //        String tradeType = wxPayFrom.getTradeType();
@@ -293,7 +289,6 @@ public class WechatAppController extends BaseController {
     }
 
 
-
     /**
      * //签名成功生成支付订单
      *
@@ -330,6 +325,7 @@ public class WechatAppController extends BaseController {
         ip = split[0];
         return ip;
     }
+
     /**
      * <pre>
      * 获取用户绑定手机号信息

+ 21 - 0
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/entity/LoginRequest.java

@@ -0,0 +1,21 @@
+package com.hcloud.microserver.h5.entity;
+
+import lombok.Data;
+
+@Data
+public class LoginRequest {
+    //用户登录凭证
+    String code;
+
+    //原始数据字符串
+    String signature;
+
+    //校验用户信息字符串
+    String rawData;
+
+    //加密用户数据
+    String encryptedData;
+
+    //加密算法的初始向量
+    String iv;
+}

+ 3 - 1
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/service/CustomerInfoService.java

@@ -5,6 +5,8 @@ import com.hcloud.microserver.commoncore.base.BaseServie;
 import com.hcloud.microserver.facade.carbon.forms.CustomerInfoForm;
 import com.hcloud.microserver.facade.carbon.vo.MyWxMpUser;
 
+import java.util.Map;
+
 /**
  * @author xiezt
  */
@@ -85,5 +87,5 @@ public interface CustomerInfoService extends BaseServie<CustomerInfoForm,String>
     int bindCustomerPhone(String customerId,String phone);
 
 
-    String wxlogin(MyWxMpUser wxMpUser);
+    Map<String, String> wxlogin(MyWxMpUser wxMpUser);
 }

+ 45 - 8
carbon-h5/carbon-h5-service/src/main/java/com/hcloud/microserver/h5/service/impl/CustomerInfoServiceImpl.java

@@ -2,9 +2,12 @@ package com.hcloud.microserver.h5.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hcloud.microserver.commoncore.exception.Asserts;
+import com.hcloud.microserver.h5.bo.CustomerDetails;
 import com.hcloud.microserver.h5.bo.CustomerInfoBO;
 import com.hcloud.microserver.h5.dao.*;
 import com.hcloud.microserver.h5.enums.LoginChannelEnum;
+import com.hcloud.microserver.h5.service.CustomerCacheService;
 import com.hcloud.microserver.h5.service.CustomerCompanyInfoService;
 import com.hcloud.microserver.h5.service.CustomerInfoService;
 import com.hcloud.microserver.commoncore.base.PageBean;
@@ -17,15 +20,17 @@ import com.hcloud.microserver.facade.carbon.entity.CustomerInfo;
 import com.hcloud.microserver.facade.carbon.forms.CustomerCompanyInfoForm;
 import com.hcloud.microserver.facade.carbon.forms.CustomerInfoForm;
 import com.hcloud.microserver.facade.carbon.vo.MyWxMpUser;
+import com.hcloud.microserver.security.util.JwtTokenUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @author xiezt
@@ -272,7 +277,42 @@ public class CustomerInfoServiceImpl implements CustomerInfoService {
     }
 
     @Override
-    public String wxlogin(MyWxMpUser wxMpUser) {
+    public Map<String, String> wxlogin(MyWxMpUser wxMpUser) {
+        String guid = getString(wxMpUser);
+       return getToken(guid);
+    }
+
+    @Autowired
+    private CustomerCacheService customerCacheService;
+
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Value("${jwt.tokenHead}")
+    private String tokenHead;
+
+    private  Map<String, String> getToken(String guid) {
+
+        CustomerInfoForm customerInfoById = getCustomerInfoById(guid);
+
+        CustomerDetails customerInfo = new CustomerDetails(customerInfoById);
+
+        if (customerInfo == null){
+            Asserts.fail("登录失败");
+        }
+        UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(customerInfo, null, customerInfo.getAuthorities());
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+        String token = jwtTokenUtil.generateToken(customerInfo);
+        customerCacheService.setToken(token, customerInfo.getUsername());
+
+        Map<String, String> tokenMap = new HashMap<>();
+        tokenMap.put("token", token);
+        tokenMap.put("tokenHead", tokenHead);
+
+        return tokenMap;
+    }
+
+    private String getString(MyWxMpUser wxMpUser) {
         String unionId = wxMpUser.getUnionId();
         String phone = wxMpUser.getPhone();
         CustomerInfo customerInfo = customerInfoMapper.wxlogin(wxMpUser);
@@ -280,7 +320,6 @@ public class CustomerInfoServiceImpl implements CustomerInfoService {
         String nickname = wxMpUser.getNickname();
         String headImgUrl = wxMpUser.getHeadImgUrl();
         Integer sex = wxMpUser.getSex();
-
         if(null == customerInfo){
             customerInfo = new CustomerInfo();
             //设置唯一标识
@@ -308,9 +347,7 @@ public class CustomerInfoServiceImpl implements CustomerInfoService {
             customerInfo.setHeadImage(headImgUrl);
             customerInfoMapper.updateByPrimaryKeySelective(customerInfo);
         }
-        String guid = customerInfo.getGuid();
-        return guid;
-
+        return customerInfo.getGuid();
     }
 
 

+ 8 - 13
carbon-h5/carbon-h5-service/src/main/resources/com/hcloud/microserver/h5/dao/CustomerInfoMapper.xml

@@ -157,19 +157,14 @@
   </select>
 
   <select id="wxlogin" parameterType="java.lang.String" resultMap="BaseResultMap">
-    SELECT
-	    a.*, COUNT(b.id)
-    FROM
-        t_customer_info a
-    LEFT JOIN t_order b ON a.guid = b.customer_id
-    WHERE
-        1=1
-    and ( a.wx_id=#{myWxMpUser.openId} or a.union_id=#{myWxMpUser.unionId} or a.phone=#{myWxMpUser.phone} )
-    GROUP BY
-        b.customer_id
-    ORDER BY
-        COUNT(b.id) DESC
-    LIMIT 1
+      SELECT
+          a.*
+      FROM
+          t_customer_info a
+      WHERE
+          a.wx_id = #{MyWxMpUser.openId}
+      OR a.union_id =  #{MyWxMpUser.unionId}
+      LIMIT 1
   </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
   delete from t_customer_info