前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序获取用户openid(附前后端源码)

微信小程序获取用户openid(附前后端源码)

作者头像
小诸葛
发布2020-04-14 15:46:23
7.7K0
发布2020-04-14 15:46:23
举报
文章被收录于专栏:方法论

前言

在开发微信小程序的时候,获取用户openid是再常见不过的事情了,openid是用户在指定小程序X小程序中的固定身份id,每个用户在该X小程序的都不一样,每个用户在不同的小程序的身份id也不一样,那么怎样才能获取用户的openid呢?

获取openid过程:

获取openid首先需要调用小程序的login方法获取小程序的登录凭证code,然后使用code向微信换取登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等,这个方法是获取不到用户头像、昵称等隐私信息的,隐私信息需要用户授权,并且使用的也是其他的方法。

下面讲一个简单的获取用户openid案例。

前端代码如代码清单1所示:

代码清单1

代码语言:javascript
复制
getOpenid: function() {
    var that = this;
    wx.login({
      success(res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'http://localhost:8091/wxapi/decryptCode',
            data: {
              code: res.code
            },
            success(data){
              wx.showToast({
                title: '获取openid成功',
                icon: 'success',
                duration: 2000
              })
              console.log("openid:" + data.data)
              that.setData({
                userOpenid:data.data
              })
            },fail(data){
              wx.showToast({
                title: '获取openid失败',
                icon: 'fail',
                duration: 2000
              })
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
  }

从代码清单1可以看到,这段代码就是一个获取用户openid的getOpenid方法,当这个方法被调用后,首先调用小程序的开放接口wx.login获取code,然后将code发送到后台,如果后台成功返回openid则提示获取openid成功并打印到控制台并显示在页面上,反之提示获取openid失败。

后端代码如代码清单2所示:

代码清单2

代码语言:javascript
复制
    @ResponseBody
    @RequestMapping(value = "/wxapi/decryptCode", produces = "application/json;charset=UTF-8",method = RequestMethod.POST)
    public String decodeOpenid(HttpServletResponse response, String code){
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("utf-8");
 
        String wxspAppid = "填写小程序appid";
        String wxspSecret = "填写小程序密钥";
 
        try {
            Map<String, String> map = new HashMap<>();
            // 授权(必填)
            String grant_type = "authorization_code";
            // 请求参数
            String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type="
                    + grant_type;
            log.info("解析code请求参数:"+params.toString());
            // 发送请求
            String sr = HttpRequest.sendPost("https://api.weixin.qq.com/sns/jscode2session", params);
            // 解析相应内容(转换成json对象)
            JSONObject json = JSONObject.parseObject(sr);
            log.info("解析code请求结果:"+json.toString());
            // 获取会话密钥(session_key)
            String session_key = json.getString("session_key");
            String openid = json.getString("openid");
            
            log.info("openid:"+openid);
            return RespResult.resp400("openId生成失败");
        } catch (Exception e) {
            e.printStackTrace();
            return RespResult.resp500(e);
        }
    }

从代码清单2可以看到,后台获取code后,会将小程序appid和secret等信息进行拼接,然后向微信发送post请求获取用户openid等登录态信息,之后再返回openid给前端。

运行截图如图1-1所示:

图1-1 代码运行截图

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html(小程序官方文档)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小诸葛的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档