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

1545年前 (2020-12-09)SpringBoot2515

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


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

分享给朋友:

相关文章

每次开机checking file system on d

 解决方案:点击左下角(开始)- (运行)输入(CMD)回车 - 进入CMD界面- 输入(d:)回车 - 输入(chkdsk /f)中间有空格。回车,出现提示按Y键,完成后,重启一次会检...

java解析JSON 数组数据 实例

 public  static void main (String args[]){  String sJson ="[{'acceptTim...

freeMarker 截取字符串(操作字符串函数 )

<#if c.proSummary!?length gt 25>  <!-- 如果长度 >25 截取25个字-->    ...

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

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

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

是谁动了我的座位

是谁动了我的座位

女孩一上火车,见自己的座位上坐着一男士。她核对自己的票,客气地说:“先生,您坐错位置了吧?” 男士拿出票嚷嚷着:“看清楚点,这是我的座,你瞎了?” 女孩仔细看了他的票,不再做声,默...

目标管理法——目标分解法

让自己的人生更幸福更有意义关键是:要将梦想转化为具体的目标,然后合理的分解,达到量化,指标化!现将学习到的两种非常有效的目标分解法分享给所有梦想、有激情的朋友:祝愿大家都能梦想成真! 一、俄...

发表评论

访客

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