微信小程序> 微信小程序获取用户信息后端写法

微信小程序获取用户信息后端写法

浏览量:3058 时间: 来源:RenQiang_Cheng

之前介绍了两种小程序获取用户信息的写法,其中第二种需要后端配合完成。

后端我使用了一个第三方的 jar 包:

我使用的是 2.9.6.BETA 版本。

这个版本提供了通过微信参数解析用户信息的方法,只要在配置文件中把微信小程序的信息配置完成就可以直接使用,非常方便。

直接看后台获取用户信息和生成第三方token 的方法,这里的生成方式是直接使用 java 自带的方法:

@Autowiredprivate RedisUtil redisUtil;@Autowiredprivate WxMaService wxService;@RequestMapping(value = "/login_status", method = RequestMethod.GET)public String getLoginStatus(@RequestParam(value = "code") String code,@RequestParam(value = "signature") String signature, @RequestParam(value = "rawData") String rawData, @RequestParam(value = "encryptedData") String encryptedData, @RequestParam(value = "iv") String iv) throws WxErrorException {if(StringUtils.isEmpty(code)) {return "无效的code";}else {//存在有效的 codeSystem.out.println("这里请求了一次code==========" + code);WxMaJscode2SessionResult session = this.wxService.getUserService().getSessionInfo(code);String sessionKey = session.getSessionKey();//通过openId sessionKey 生成3rd session 返回给客户端小程序String accessToken = UUID.randomUUID().toString();// 用户信息校验        if (!this.wxService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {        return "用户信息校验失败";        }     // 解密用户信息        WxMaUserInfo userInfo = this.wxService.getUserService().getUserInfo(sessionKey, encryptedData, iv);        System.out.println(userInfo);        System.out.println("accessToken : " + accessToken);        redisUtil.set("asdfKevin", accessToken, 180L);        return accessToken;}

 

其中的 wxService 是上述 jar 自带的内容,redisUtil 是我自己封装的 redis 的读取工具类,比较简单就不说了。

代码逻辑非常简单,直接看就能看懂,最后 token 存到了 redis 中,备用。

另外 wxService 需要的两个配置类,代码如下:

import org.apache.commons.lang3.builder.ToStringBuilder;import org.apache.commons.lang3.builder.ToStringStyle;import org.springframework.boot.context.properties.ConfigurationProperties;import lombok.Data;@ConfigurationProperties(prefix = "wechat.miniapp")@Datapublic class WxMaProperties {    private String appid;    private String secret;    private String token;    private String aesKey;    private String msgDataFormat;    @Override    public String toString() {        return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);    }}

 

import javax.servlet.Filter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.kevin.crystal.filter.KevinTokenFilter;import cn.binarywang.wx.miniapp.api.WxMaService;import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;import cn.binarywang.wx.miniapp.config.WxMaConfig;import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;@Configuration@ConditionalOnClass(WxMaService.class)@EnableConfigurationProperties(WxMaProperties.class)public class WxMaConfiguration {    @Autowired    private WxMaProperties properties;    @Bean    @ConditionalOnMissingBean    public WxMaConfig config() {        WxMaInMemoryConfig config = new WxMaInMemoryConfig();        config.setAppid(this.properties.getAppid());        config.setSecret(this.properties.getSecret());        config.setMsgDataFormat(this.properties.getMsgDataFormat());        return config;    }    @Bean    @ConditionalOnMissingBean    public WxMaService wxMaService(WxMaConfig config) {        WxMaService service = new WxMaServiceImpl();        service.setWxMaConfig(config);        return service;    }    @Bean    public Filter kevinTokenFilter() {    System.out.println("----------------test token filter-----------------");    return new KevinTokenFilter();    }    @Bean    public FilterRegistrationBean tokenFilter() {    FilterRegistrationBean registration = new FilterRegistrationBean();    registration.setFilter(kevinTokenFilter());    registration.addUrlPatterns("/api/*");//    registration.addInitParameter("", "");    registration.setName("tokenFilter");        return registration;    }}

 

其中java 代码中读取的配置文件需要正确配置小程序的 app id 和 app secret 。至此,后台获取微信用户的信息的方法就介绍完了。

如果你是源码复制,发现一个东西 KevinTokenFilter,聪明的你一猜就知道,这个就是我之前提到的过滤小程序后续请求中是否存在自定义token 的方法啦。下一篇介绍使用 filter 过滤请求头的一种实现方法。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎