1. 获取openId
1. 登录过程
参考官网: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
2. 核心代码
- 客户端
按钮点击事件,调用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)
}
})
}
- 服务器端代码-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
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
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】