Browse Source

微信小程序signup接口修改

tags/B.2.6.4_20240106_base
yk 1 year ago
parent
commit
046d7d645f
4 changed files with 44 additions and 21 deletions
  1. +12
    -2
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/controller/WeChatController.java
  2. +1
    -1
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/domain/bean/WeChatSignUpReq.java
  3. +6
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/domain/po/WeChatUserInfo.java
  4. +25
    -18
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/service/WeChatService.java

+ 12
- 2
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/controller/WeChatController.java View File

@@ -90,7 +90,15 @@ public class WeChatController {
@PostMapping("/signup")
public AjaxResult signup(@RequestBody WeChatSignUpReq signUpReq, HttpServletResponse response) {

String decodeStr = weChatService.decrypt(signUpReq.getEncryptedData(), signUpReq.getIv(), signUpReq.getWeappAuth());
String decodeStr = null;
try {
decodeStr = weChatService.decrypt(signUpReq.getEncryptedData(), signUpReq.getIv(), signUpReq.getWechatAuth());
} catch (Exception e) {
e.printStackTrace();
response.setStatus(500);
// throw new RuntimeException(e);
return AjaxResult.error("微信数据解析错误");
}

ObjectMapper objectMapper = new ObjectMapper();
WeChatUserInfo userInfo = null;
@@ -99,9 +107,10 @@ public class WeChatController {
} catch (JsonProcessingException e) {
response.setStatus(500);
// throw new RuntimeException(e);
return AjaxResult.error("解析错误");
return AjaxResult.error("WeChatUserInfo解析错误");
}

log.info("微信用户信息:{}", userInfo);
R<SysEnterpriseStaff> staff = tenantService.existStaff(userInfo.getPhoneNumber(), SecurityConstants.INNER);
String phone = null;
if (staff.getData() == null) {
@@ -113,6 +122,7 @@ public class WeChatController {
} else {
phone = staff.getData().getPhone();
}
log.info("信息 phone:{}", phone);
R<LoginUser> loginInfoResult = remoteLoginService.getLoginInfoInnerByPhone(phone, SecurityConstants.INNER);

log.info("根据手机号获取用户信息返回:{}", loginInfoResult.getData().getEnterpriseName());


+ 1
- 1
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/domain/bean/WeChatSignUpReq.java View File

@@ -14,7 +14,7 @@ public class WeChatSignUpReq {
private String encryptedData;
private JSONObject rawData;
private String signature;
private String weappAuth;
private String wechatAuth;





+ 6
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/domain/po/WeChatUserInfo.java View File

@@ -1,5 +1,6 @@
package com.xueyi.system.wechat.domain.po;

import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xueyi.common.core.web.tenant.base.TBaseEntity;
import lombok.Data;
@@ -44,6 +45,11 @@ public class WeChatUserInfo extends TBaseEntity {
// Getters and Setters
}

@Override
public String toString(){
return JSON.toJSONString(this);
}


}


+ 25
- 18
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/wechat/service/WeChatService.java View File

@@ -1,6 +1,7 @@
package com.xueyi.system.wechat.service;

import com.alibaba.fastjson2.JSON;
import com.xueyi.common.core.utils.core.CryptoUtil;
import com.xueyi.common.redis.utils.RedisUtil;
import com.xueyi.system.wechat.domain.bean.WeChatSessionResponse;
import org.slf4j.Logger;
@@ -61,28 +62,34 @@ public class WeChatService {
}


public String decrypt(String encryptedData, String iv, String sessionKey) {
try {
// Base64 解码
byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey);
byte[] encryptedDataBytes = Base64.getDecoder().decode(encryptedData);
byte[] ivBytes = Base64.getDecoder().decode(iv);
public String decrypt(String encryptedData, String iv, String wechatAuth) throws Exception{

// 创建 AES 密钥对象
SecretKey secretKey = new SecretKeySpec(sessionKeyBytes, "AES");
String str = CryptoUtil.decrypt(wechatAuth);
WeChatSessionResponse obj = JSON.parseObject(str, WeChatSessionResponse.class);
// Base64 解码
byte[] sessionKeyBytes = Base64.getDecoder().decode(obj.getSessionKey());
byte[] encryptedDataBytes = Base64.getDecoder().decode(encryptedData);
byte[] ivBytes = Base64.getDecoder().decode(iv);
log.info("sessionKeyBytes: {}", new String(sessionKeyBytes));
log.info("encryptedDataBytes: {}", new String(encryptedDataBytes));
log.info("ivBytes: {}", new String(ivBytes));

// 创建 AES 解密器
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(ivBytes));
// 创建 AES 密钥对象
SecretKey secretKey = new SecretKeySpec(sessionKeyBytes, "AES");
log.info("secretKey: {} 1===", secretKey.getAlgorithm());

// 解密
byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes);
String decoded = new String(decryptedBytes, "UTF-8");
// 创建 AES 解密器
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
log.info("cipher: {} 2===", cipher.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(ivBytes));

// 解密
byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes);
log.info("decryptedBytes: {} 3===", new String(decryptedBytes));
String decoded = new String(decryptedBytes, "UTF-8");
log.info("decoded: {} 4===", decoded);
return decoded;

return decoded;
} catch (Exception e) {
throw new IllegalArgumentException("Illegal Buffer", e);
}
}
}


Loading…
Cancel
Save