瀏覽代碼

二期 管家小程序

suntianwu 3 年之前
父節點
當前提交
b466ba860b

+ 5 - 4
src/main/java/com/care/client/controller/PassportController.java

@@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
@@ -36,6 +37,7 @@ public class PassportController {
     @ApiParam(name = "params", value = "登录参数")
     @PostMapping("login")
     public Result<Object> login(@RequestBody MemberInitParams params) {
+        CheckUtils.valueIsNull(params, "loginType");
 
         if ("wx".equalsIgnoreCase(params.getLoginType())) {
             CheckUtils.valueIsNull(params, "code");
@@ -53,10 +55,9 @@ public class PassportController {
 
     @ApiOperation(value = "小程序登录", notes = "微信登录解密手机号")
     @PostMapping("decodePhoneNumber")
-    public Result<Object> decodePhoneNumber(@RequestParam(value = "code", required = true) String code,
-                                            @RequestParam(value = "encryptedData", required = true) String encryptedData,
-                                            @RequestParam(value = "iv", required = true) String iv) {
-        if (passportService.decodePhoneNumber(code,encryptedData,iv)){
+    public Result<Object> decodePhoneNumber(@RequestBody Map<String,String> body) {
+
+        if (passportService.decodePhoneNumber(body.get("code"),body.get("encryptedData"),body.get("iv"))){
             return Result.success();
         } else {
             return Result.error("失败");

+ 4 - 0
src/main/java/com/care/client/service/PassportService.java

@@ -86,6 +86,10 @@ public class PassportService extends AbstractPassportService {
          String sessionKey = params.getSessionKey();
          String openId = params.getOpenid();
 
+         log.warn("encryptedData==" + encryptedData);
+         log.warn("sessionKey==" + sessionKey);
+         log.warn("iv==" + iv);
+
          String phone = WxUtil.getPhoneNumber(encryptedData,sessionKey,iv);
         if (StringUtils.isEmpty(phone)) {
             return false;

+ 1 - 1
src/main/java/com/care/client/service/WxPassportService.java

@@ -39,7 +39,7 @@ public class WxPassportService extends AbstractPassportService {
         log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
 
         MemberInitParams memberInitParams = new MemberInitParams();
-        params.setLoginType("wx");
+        memberInitParams.setLoginType("wx");
         memberInitParams.setOpenid(openid);
         memberInitParams.setSessionKey(sessionKey);
         redisUtil.hset(RedisKeyConstant.PINANBAO_WX_LOGIN_INFO, params.getCode(), memberInitParams, RedisKeyConstant.PINANBAO_WX_LOGIN_INFO_TIME);

+ 10 - 8
src/main/java/com/care/common/util/WxUtil.java

@@ -2,6 +2,7 @@ package com.care.common.util;
 
 import java.util.Arrays;
 
+import org.apache.commons.codec.binary.Base64;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 
 import com.alibaba.fastjson.JSONObject;
@@ -12,17 +13,17 @@ import javax.crypto.spec.SecretKeySpec;
 import java.security.AlgorithmParameters;
 
 import java.security.Security;
-import java.util.Base64;
+
 
 public class WxUtil {
 
-    public static String getPhoneNumber(String encryptedData, String session_key, String iv) {
+    public static String getPhoneNumber(String encryptedData, String sessionKey, String iv) {
         // 被加密的数据
-        byte[] dataByte = Base64.getDecoder().decode(encryptedData);
+        byte[] dataByte = Base64.decodeBase64(encryptedData);
         // 加密秘钥
-        byte[] keyByte = Base64.getDecoder().decode(session_key);
+        byte[] keyByte = Base64.decodeBase64(sessionKey);
         // 偏移量
-        byte[] ivByte = Base64.getDecoder().decode(iv);
+        byte[] ivByte = Base64.decodeBase64(iv);
         try {
             // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要
             int base = 16;
@@ -35,7 +36,7 @@ public class WxUtil {
             }
             // 初始化
             Security.addProvider(new BouncyCastleProvider());
-            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
             SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
             AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
             parameters.init(new IvParameterSpec(ivByte));
@@ -43,13 +44,14 @@ public class WxUtil {
             byte[] resultByte = cipher.doFinal(dataByte);
             if (null != resultByte && resultByte.length > 0) {
                 String result = new String(resultByte, "UTF-8");
-                System.out.println(result);
-                //{"phoneNumber":"18800000000","watermark":{"appid":"wx2ba363fc4454f27c","timestamp":1586333901},"purePhoneNumber":"18800000000","countryCode":"86"}
                 return JSONObject.parseObject(result).getString("phoneNumber");
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
+
         return null;
+
     }
+
 }

+ 3 - 4
src/main/java/com/care/keeper/controller/KeeperPassportController.java

@@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
@@ -53,10 +54,8 @@ public class KeeperPassportController {
 
     @ApiOperation(value = "管家小程序登录", notes = "微信登录解密手机号 --二期新增")
     @PostMapping("decodePhoneNumber")
-    public Result<Object> decodePhoneNumber(@RequestParam(value = "code", required = true) String code,
-                                            @RequestParam(value = "encryptedData", required = true) String encryptedData,
-                                            @RequestParam(value = "iv", required = true) String iv) {
-        if (keeperPassportService.decodePhoneNumber(code,encryptedData,iv)){
+    public Result<Object> decodePhoneNumber(@RequestBody Map<String,String> body) {
+        if (keeperPassportService.decodePhoneNumber(body.get("code"),body.get("encryptedData"),body.get("iv"))){
             return Result.success();
         } else {
             return Result.error("失败");

+ 1 - 1
src/main/java/com/care/keeper/service/WxKeeperPassportService.java

@@ -41,7 +41,7 @@ public class WxKeeperPassportService extends AbstractKeeperPassportService {
         log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
 
         KeeperInitParams keeperInitParams = new KeeperInitParams();
-        params.setLoginType("wx");
+        keeperInitParams.setLoginType("wx");
         keeperInitParams.setOpenid(openid);
         keeperInitParams.setSessionKey(sessionKey);
         redisUtil.hset(RedisKeyConstant.PINANSHOUHU_WX_LOGIN_INFO, params.getCode(), keeperInitParams, RedisKeyConstant.PINANSHOUHU_WX_LOGIN_INFO_TIME);