1. 获取openId

1. 登录过程

微信小程序(9)获取微信openId_客户端

参考官网: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

2. 核心代码

  1. 客户端

按钮点击事件,调用wx.login() 获取到code 之后进行登录。

handleGetOpenId: function() {
    wx.login({
      success: async function(res) {
        console.log(res);
        let code = res.code;
        let resDate = await request('/getOpenId', {code});
        console.log(resDate)
      }
    })
  }
  1. 服务器端代码-node exress 代码

server.js 增加如下请求:

/**
   * 获取注册获取用户唯一标识
   */
  app.use('/getOpenId', async (req, res, next) => {
    // 获取请求的code 参数
    let code = req.query.code;
    let appId= 'xxx';
    let appSecret = 'xxx';
    let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`;
    let result = await fly.get(url);
    console.log(url)
    console.log(result)
    // 获取响应data 数据里面的openId
    let openId = JSON.parse(result.data).openid;
    // 拿到openId, 和其他信息进行关联之后传送到客户端
    let user = {
      username: 'zs',
      age: 15,
      openId
    }
    
    
    var token = jwt.sign(user, 'cus-secret');
    console.log(token)
    var decodedToken = jwt.verify(token, 'cus-secret');
    console.log(decodedToken)
    res.send(openId);
  })

2. 涉及到的知识点

1. js 请求库-fly

https://github.com/wendux/fly

Fly.js 是一个基于 promise 的,轻量且强大的Javascript http 网络库,它有如下特点:
提供统一的 Promise API。
浏览器环境下,轻量且非常轻量 。
支持多种JavaScript 运行环境
支持请求/响应拦截器。
自动转换 JSON 数据。
支持切换底层 Http Engine,可轻松适配各种运行环境。
浏览器端支持全局Ajax拦截 。
H5页面内嵌到原生 APP 中时,支持将 http 请求转发到 Native。支持直接请求图片。

可以用于node 服务端和网易云请求,也可以用于微信小程序客户端和服务器端交互。

fly 支持不同的环境是将不通的API封装到不同的包,支持多端的适配。

1. 下载
npm install flyio
2. node 环境中使用
var Fly=require("flyio/src/node")
var fly=new Fly;
...
/**
   * 获取注册获取用户唯一标识
   */
app.use('/getOpenId', async (req, res, next) => {
  // 获取请求的code 参数
  let code = req.query.code;
  let appId= 'xxx';
  let appSecret = 'xxx';
  let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${appSecret}&grant_type=authorization_code`;
  let result = await fly.get(url);
  console.log(result);
  res.send("test ~~~")
})

2. jsonwebtoken-加密

参考:https://github.com/auth0/node-jsonwebtoken

简单理解:服务器端用秘钥加密,客户端收到数据后用相同的秘钥解密。

简单加密解密:

1. 安装
npm install jsonwebtoken

2. 使用
var jwt = require('jsonwebtoken');

var token = jwt.sign(user, 'cus-secret');
console.log(token)
var decodedToken = jwt.verify(token, 'cus-secret');
console.log(decodedToken)

3. appId 和 appSecret

需要在开发管理-》开发设置进行设置。

3. 分包

https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】