微信小程序获取openid和用户信息

一、为什么需要openid

在微信小程序的开发过程中,往往需要将用户信息录入自己的数据库中,就得有一个唯一标记区分用户,这个标记就是openid。当一个用户使用了某个微信小程序,微信后台会产生一个openid,并且是唯一的,所以可以通过这个来区分用户。

另一方面,我们通过微信小程序API并不能获取到更多用户私密信息,只能获取到昵称,性别,居住地等公开的信息,微信号这种私密信息是获取到的,而通过这些昵称或者居住地,是没办法保证用户表里的用户数据是唯一的。所以综合而言,如果不需要建立自己的用户数据库,就没必要使用openid;如果需要,就得获取openid。

顺便说一下,还有一个unionid的东西存在。现在同一家开发公司甲,既有微信小程序A,又有微信公众号B,都是用同一个开发平台账号开发的。同时微信小程序A有个用户的openid是X,微信公众号B有个用户的openid是Y,那么我们怎么判断这两个用户是不是同一个人呢?所以引入了unionid的概念。同一用户,对同一个微信开放平台下的不同应用,unionid是相同的 。什么意思呢?假如用户乙关注了这两个程序,那么乙在小程序A的应用中opendi是X,unionid是Z;同时乙在公众号B应用中的openid是Y,unionid是Z。

二、如何获取openid

获取openid主要是两个步骤:

1、wx.login()得到code

2、通过code以及appid,secret 得到openid

wx.login({
      success: res => {
        console.log(res.code); // 先login得到code
        if (res.code) {
          // 将url中的appid和secret换成自己的  (可以在开发平台查看)
          var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + res.code + '&grant_type=authorization_code';
          wx.request({
            url: url,
            method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 
            success: function (res) {
              // res.data.openid 即为所求openid
              console.log(res.data.openid);
            }
          });
        } 
      }
    });

三、获取用户信息

既然要获取openid,那肯定就是要将用户录入数据库,那肯定也要获取用户信息。目前能通过wx.getUserInfo获取到的用户信息是例如昵称、性别这一类的公开信息。

1、用户授权

获取用户信息需要用户授权,那怎么授权呢?以前可以一进入页面就弹出授权框,现在不提倡了,文档建议使用button,设置open-type来授权。如下代码,点击button,如果没有授权会弹出授权框,如果拒绝了,那个e.detail.userInfo就是false,会执行else里代码块,如果接受,则执行if为true的操作;如果之前就已经有授权了,就不会弹出授权框,直接执行if为true的操作。

在开发时候,可以在开发者工具上方,点击“清缓存”按钮,这样就可以清除以前的授权信息,得重新授权。

.wxml

<button open-type='getUserInfo' bindgetuserinfo='checkPermission' id='bn_login'>使用微信登录</button>

.js

checkPermission:function(e){
    if(e.detail.userInfo){
      // 有授权的操作
    }else{
      // 没有授权的操作
    }
  }

2、获取用户信息

获取用户信息比较简单,调用wx.getUserInfo即可,这一块应该没什么好说的。

// 查看是否授权
   wx.getSetting({
     success(res) {
       if (res.authSetting['scope.userInfo']) {
         // 已经授权,可以直接调用 getUserInfo 获取头像昵称
         wx.getUserInfo({
           success(res) {
             console.log(res.userInfo)
           }
         })
       }
     }
   })

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值