springboot框架 后台获取微信小程序用户的openid

1544年前 (2020-12-09)SpringBoot1817

小程序端app.js中:

// 登录
    wx.login({
      success: res => {        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        if (res.code) {
          wx.request({
            url: 'http://localhost:84/user/login',
            method: 'POST',           
             data: {
              code: res.code
            },            
            header: {
              'content-type': 'application/x-www-form-urlencoded'
            },
            success(res) {
              console.log("openid:"+res.data.openid);             
              if (res.data.openid != "" || res.data.openid!=null){                // 登录成功
                wx.setStorageSync("openid", res.data.openid);//将用户id保存到缓存中
                wx.setStorageSync("session_key", res.data.session_key);//将session_key保存到缓存中
              }else{                // 登录失败
                // TODO 跳转到错误页面,要求用户重试


                return false;
              }
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    })


java端:

@RestController
public class LoginController  extends BaseController {
    @Autowired
    private SysUserMapper sysUserMapper;
    @PostMapping("/user/login")
    @ResponseBody
    public String login(@RequestHeader("token") String token,@RequestParam("code") String code){
        String appID = "wx8786*******41b1c";
        String appSecret = "7ab8d23ec**********3070ecf71afcd";
        String loginname = JwtUtil.getUsername(token);

        Map<String,Object> map = new HashMap<String,Object>();
        String result = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session?appid=" + appID + "&secret="
                        + appSecret + "&js_code=" + code+ "&grant_type=authorization_code"
                ,map);
        ObjectMapper mapper = new ObjectMapper();
        OpenIdJson openIdJson = null;
        try {
            openIdJson = mapper.readValue(result, OpenIdJson.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(result.toString());
        System.out.println(openIdJson.getOpenid());
        SysUser sysUser = new SysUser();
        sysUser.setOpenid(openIdJson.getOpenid());
        sysUser.setLoginName(loginname);
        sysUserMapper.updateUserByUsername(sysUser);
        return result;

    }
}

上面的HttpUtil.get()方法引入了工具包

<!-- 调用Api工具类 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.0</version>
</dependency>

OpenIdJson的实体类:

public class OpenIdJson {
    private String openid;
    private String session_key;

    public String getOpenid() {
        return openid;
    }

    public void setOpenid(String openid) {
        this.openid = openid;
    }

    public String getSession_key() {
        return session_key;
    }

    public void setSession_key(String session_key) {
        this.session_key = session_key;
    }
}


本文原创,转载必追究版权。

相关文章

js限制input只能输入数字、英文、汉字

 1.只能输入数字和英文的:  <input onkeyup="value=value.replace(/[\W]/g,'') "...

Oracle 数据库cmd命令备份

 //导出exp wsbspt/wsbspt@192.168.1.101/wsbs file=D:/wsbspt.dmp log=D:/wsbspt.txt//导入imp &nbs...

揭秘!如何用一句话找到你的一万微友

 玩微商一年半的时间了,现在的微商如火如荼,很多刚进入微商行业的伙伴都在烦恼一个问题,那就是粉丝、粉丝,我最近调查了身边30多个微友,有25个竟然都是好友问题,有的竟然给我说主动加了50多个...

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

 本文为Web service 开发入门篇,主要介绍在Myeclipse 8.5环境下开发Web service的服务程序和客户端程序的基本流程。 在Weblogic 11g...

get/post方式调用http接口

get/post方式调用http接口

 1. 项目环境如下:myeclipse8.5 、tomcat5.0/weblogic、xp、JDK:开发1.5,编译1.4为了方便,在原来的web项目UpDown中新建了一个httpcal...

MyEclipse 10 性能大优化

MyEclipse 10 性能大优化

 MyEclipse 10已发布,新版本的特性能够大大提高开发者的效率。但同时,由于电脑配置的原因,很多开发者在使用MyEclipse的时候,速度都不是很快,需要我们对MyEclipse进行...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。