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

1544年前 (2020-12-09)SpringBoot2224

小程序端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;
    }
}


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

分享给朋友:

相关文章

java将金额转化为大写金额

 private static String[] num = {"零","壹","贰","叁","肆...

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

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

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

坑爹的ShowModalDialog 后台传值解决方案

 今天遇到需要ShowModalDialog打开页面,通过acceptanceIds 参数值后台过滤出相应结果前台  var url = "loadAccept...

freeMarker Jfinal 获取session里的值

问题:freeMaker session取值的常用格式都试过 session["xxx"],session.xxx 直接xxx 都取不出来?????解决:JFinal与Struts...

js/jquery 日历控件及实例下载

js/jquery 日历控件及实例下载

实现日历控件效果:页面:<link href="${base}/resource/${profile.path}/css/lhgcalendar.css" rel="...

org.apache.subversion.javahl.ClientException: The working copy needs to be upgraded svn: Working cop

org.apache.subversion.javahl.ClientException: The working copy needs to be upgraded svn: Working cop

SVN更新出现问题:org.apache.subversion.javahl.ClientException: The working copy needs to be upgraded svn: W...

发表评论

访客

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