最近在折腾小程序的node后台,还是处于入门阶段,写一下也让自己深刻记录一下如何获取小程序的openid和uid。

首先需要在在小程序后台获取小程序的appId和AppSecret,然后在小程序获取session_key所需的code。

小程序端代码

wx.checkSession({
  success () {
    //session_key 未过期,并且在本生命周期一直有效
  },
  fail () {
    // session_key 已经失效,需要重新执行登录流程
    wx.login({ // 重新登录
	   success(res){
	     let { code } = res; // 获取code登录凭证
	     wx.getUserInfo({
	       success(res) {
	         let { iv, encryptedData } = res; 获取iv和加密的encryptedData
	         wx.request({
	           url: `${config.service.host}/openid/`, //发送到服务端接口
	           method: \'POST\',
	           data: {
	             iv,
	             encryptedData,
	             code
	           },
	           success(res) {
	             console.log(res); // 返回值
	           }
	         })
	       }
	     })
	   }
	})
  }
})

服务端要发送请求去小程序服务器获取结果,发送请求需要安装koa2-request

yarn add koa2-request

小程序请求地址:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

参数
string appid
小程序 appId
string secret
小程序 appSecret
string js_code
登录时获取的 code
string grant_type
授权类型,此处只需填写 authorization_code

服务端代码

const config = require(\'../config\');
const WXBizDataCrypt = require(\'../WXBizDataCrypt\'); // 解密js
let { appId, AppSecret} = config;
const koa2Req = require(\'koa2-request\');

module.exports = async ( ctx )=> {
  let { encryptedData, iv, code } = ctx.request.body;
  const res = await koa2Req({
    url: `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${AppSecret}&js_code=${code}&grant_type=authorization_code`
  }) // 如满足条件,这一步就可以获取uid
  
  let body = JSON.parse(res.body);
  let { session_key } = body; // 提取session_key解密
  let pc = new WXBizDataCrypt(appId, session_key);
  var data = pc.decryptData(encryptedData , iv)
  ctx.state.data = {
    state = \'0001\',
    data
  }
}
  • UnionID获取途径

绑定了开发者帐号的小程序,可以通过下面 4 种途径获取 UnionID。

调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

小程序端调用云函数时,当满足 UnionID 获取条件时可在云函数中通过 cloud.getWXContext 获取 UnionID

收藏 打印