赞
踩
说明
之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
注意事项
session_key
是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。我们采用**微信开发 Java SDK(非官方提供)**简化开发。这个SDK支持微信支付、开放平台、公众号、企业号/企业微信、小程序等的后端开发。
官方地址:http://wxjava.fly2you.cn/zh-CN/
在service-user
模块中导入依赖
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-miniapp-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
注意:SDK版本为4.1.0的话,不会自动产生对象类型!需要后续手动注入!此处我踩了坑!
在nacos注册中心增加配置信息(换成你自己的)
wx:
miniapp:
appid: xxx # 小程序微信公众平台appId
secret: xxx # 小程序微信公众平台api秘钥
msgDataFormat: JSON
在IOC容器中会自动产生对象类型,可以自动注入
WxMaService
WxMaConfig
下面是一个方法示例:
/** * 采用微信javaSDK实现微信小程序登录 * @param code * @return */ @Override public Map<String, String> wxLogin(String code) { try { //根据code调用微信SDK获取用户会话信息 得到微信用户唯一标识 WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code); if (sessionInfo != null) { String openid = sessionInfo.getOpenid(); //根据openid查询用户记录 LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UserInfo::getWxOpenId,openid); UserInfo userInfo = userInfoMapper.selectOne(queryWrapper); //根据openid未得到用户记录 新增用户记录且采用MQ异步初始化账户(余额)信息 if(userInfo==null){ userInfo = new UserInfo(); userInfo.setWxOpenId(openid); userInfo.setNickname("用户" + IdUtil.getSnowflake().nextId()); userInfo.setAvatarUrl("https://oss.aliyuncs.com/aliyun_id_photo_bucket/default_handsome.jpg"); userInfoMapper.insert(userInfo); } //根据openid获取用户记录 //为登录微信用户生成令牌并存到redis String token = IdUtil.fastSimpleUUID(); String loginKey = RedisConstant.USER_LOGIN_KEY_PREFIX + token; UserInfoVo userInfoVo = BeanUtil.copyProperties(userInfo, UserInfoVo.class); redisTemplate.opsForValue().set(loginKey, userInfoVo, RedisConstant.USER_LOGIN_KEY_TIMEOUT, TimeUnit.SECONDS); //响应令牌 Map<String,String> mapResult = new HashMap<>(); mapResult.put("token", token); return mapResult; } return null; } catch (WxErrorException e) { log.error("微信登录异常:{}",e); throw new RuntimeException(e); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。