最近在使用 Java Spring Boot 开发微信小程序后端,目前是使用 WxJava 这个库,但是这个库不知道为啥文档是一坨答辩。 这个库官方缓存微信小程序 session 信息的时候并没有提到如何使用 Redis template 操作 Redis 的方案。
目前是摸索出来了要怎么简单的使用 redis template 登录微信小程序。
首先是我们需要创建一个 Bean,这个 Bean 是之后用来缓存微信小程序登录信息的。
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
return new StringRedisTemplate(factory);
}
之后就是创建一个 Bean 用来创建微信小程序登录对象, 这个地方比较关键, 我们需要创建一个 RedisTemplateWxRedisOps
对象,这个对象可以用来载入 RedisTemplate 相关的设置,
之后我们就可以使用微信小程序相关的服务了,比如说登录什么的。
@Bean
public WxMaService wxMaService() {
// 创建一个新的配置
WxMaDefaultConfigImpl config = new WxMaRedisBetterConfigImpl(new RedisTemplateWxRedisOps(stringRedisTemplate), "wxma");
config.setAppid(wxMaProperties.getAppid());
config.setSecret(wxMaProperties.getSecret());
WxMaService maService = new WxMaServiceImpl();
maService.setWxMaConfig(config);
return maService;
}
登录控制器大概就长这样:
@RestController
@AllArgsConstructor
@Slf4j
@RequestMapping("/user")
@Tag(name = "用户接口")
public class UserController {
private final WxMaService wxMaService;
@GetMapping("/login")
public ResponseDTO<UserDTO> login(String code) {
if (StringUtils.isBlank(code)) {
return ResponseDTO.error(ErrorCode.PARAM_ERROR);
}
try {
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
String sessionKey = session.getSessionKey() + session.getOpenid();
return ResponseDTO.ok(new UserDTO(DigestUtils.md5DigestAsHex(sessionKey.getBytes())));
} catch (WxErrorException e) {
return ResponseDTO.error(ErrorCode.SYSTEM_ERROR);
} finally {
WxMaConfigHolder.remove();// 清理ThreadLocal
}
}
}