学习小程序获取用户的唯一标识(openId)

1,220 阅读2分钟

小程序登录流程图: image.png

1.绑定点击事件:

<view>测试获取用户唯一标识openId</view>
<button bindtap="handleGetOpenId">获取openId</button>

2.wx.login获取code:并将登录凭证发送到服务器

// 获取用户openId的回调

handleGetOpenId() {

// 1.获取登录凭证

wx.login({

success: async (res) => {

let code = res.code

    }

  })
  // 2.将登录凭证发到服务器
  let result = await request('/getOpenId',{{code}})

},

wx.login()描述:

用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

参数

属性类型默认值必填说明最低版本
timeoutnumber超时时间,单位ms1.9.90
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

3.在开发者就是自己的服务器端注册获取用户唯一标识的接口:在服务器app.js中写:

app.use('/getOpenId',async (req,res,next) => {
    let code = req.query.code
    let appId = '自己appId'
    let appsecret = "自己的appsecret"
    let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appsecret}&js_code=${code}&grant_type=authorization_code`
     //发请求给微信服务器获取openId 
     let result = await fly.get(url)
     //reuslt里面就有openId,不过是JSON格式的
     let openId = JSON.parse(result.data).openid
     //和用户其他信息关联,自定义登录态
     let person = {
         username:'才需和',
         age:'18',
         openId
     }
     //对用户数据进行加密,生成token返回客户端
    let token = jwt.sign(person,'随便写个字符串就是密钥')
    //验证身份,反编译token
    let result2 = jwt.verify(token,'和上面密钥对应')
    console.log(result2) //就是person数据
     res.send(token)

}

4.由于flyio库类似于axios,但是他支持的平台多,比如node,小程序,所以我们在自己的服务器中下载这个包:

npm i flyio

引入:

const Fly = require("flyio/src/node")

const fly = new Fly

5.下载jsonwebtoken包来对用户数据进行加密,生成token返回客户端。

npm i jsonwebtoken

引入:

const jwt = require('jsonwebtoken')