微信小程序开发总结

微信小程序-获取用户session_key,openid,uni

2018-05-10  本文已影响103人  意外金喜

微信小程序-获取用户session_key,openid,unionid - 后端为nodejs8.0+

步骤:

1、通过wx.login接口获取code既jscode,传递到后端;

2、后端请求

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

地址,就能获取到openid和unionid。

**小程序接口promise化和封装 **

1、utils文件夹下创建wechat.js文件

  /** 
  * Promise化小程序接口 
  */  
  class Wechat {  
  /** 
  * 登陆 
  * @return {Promise}  
  */  
  static login() {  
  return new Promise((resolve, reject) => wx.login({ success: resolve, fail: reject }));  
  };  

  /** 
  * 获取用户信息 
  * @return {Promise}  
  */  
  static getUserInfo() {  
  return new Promise((resolve, reject) => wx.getUserInfo({ success: resolve, fail: reject }));  
  };  

  /** 
  * 发起网络请求 
  * @param {string} url   
  * @param {object} params  
  * @return {Promise}  
  */  
  static request(url, params, method = "GET", type = "json") {  
  console.log("向后端传递的参数", params);  
  return new Promise((resolve, reject) => {  
  let opts = {  
  url: url,  
  data: Object.assign({}, params),  
  method: method,  
  header: { 'Content-Type': type },  
  success: resolve,  
  fail: reject  
  }  
  console.log("请求的URL", opts.url);  
  wx.request(opts);  
  });  
  };  

  /** 
  * 获取微信数据,传递给后端 
  */  
  static getCryptoData() {  
  let code = "";  
  return this.login()  
  .then(data => {  
  code = data.code;  
  console.log("login接口获取的code:", code);  
  return this.getUserInfo();  
  })  
  .then(data => {  
  console.log("getUserInfo接口", data);  
  let obj = {  
  js_code: code,  
  };  
  return Promise.resolve(obj);  
  })  
  .catch(e => {  
  console.log(e);  
  return Promise.reject(e);  
  })  
  };  

  /** 
  * 从后端获取openid 
  * @param {object} params  
  */  
  static getMyOpenid(params) {  
  let url = 'https://xx.xxxxxx.cn/api/openid';  
  return this.request(url, params, "POST", "application/x-www-form-urlencoded");  
  };  
  }  
  module.exports = Wechat;  

2、修改小程序的app.js文件

  let wechat = require('./utils/wechat.js');  
  App({  
  onLaunch() {  
    this.getUserInfo();  
  },  
  getUserInfo() {  
    wechat.getCryptoData()  
    .then(d => {  
      return wechat.getMyOpenid(d);  
    })  
    .then(d => {  
      console.log("从后端获取的openid", d.data);  
    })  
    .catch(e => {  
      console.log(e);  
    })  
   }  
  })  

后端nodejs,是用的express命令行生成的项目框架

1、创建common文件夹,创建utils文件,使用request模块请求接口,promise化request

  const request = require("request");  
  class Ut {  

  /** 
  * promise化request 
  * @param {object} opts  
  * @return {Promise<[]>} 
  */  
  static promiseReq(opts = {}) {  
  return new Promise((resolve, reject) => {  
  request(opts, (e, r, d) => {  
  if (e) {  
    return reject(e);  
  }  
  if (r.statusCode != 200) {  
    return reject(`back statusCode:${r.statusCode}`);  
  }  
  return resolve(d);  
  });  
  })  
  };  

  };  

  module.exports = Ut;  

2、新增路由,appId、secret在小程序的后台获取

  router.post("/openid", async (req, res) => {  
  const Ut = require("../common/utils");  
  try {  
  console.log(req.body);  
  let appId = "wx70xxxxxxbed01b";  
  let secret = "5ec6exxxxxx49bf161a79dd4";  
  let { js_code } = req.body;  
  let opts = {  
  url: `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${secret}&js_code=${js_code}&grant_type=authorization_code`  
  }  
  let r1 = await Ut.promiseReq(opts);  
  r1 = JSON.parse(r1);  
  console.log(r1);  
  res.json(r1);  
  }  
  catch (e) {  
  console.log(e);  
  res.json('');  
  }  
  })  

结果:

image

这个返回结果没有unionid,按照官方的说法,需要在微信开放平台绑定小程序;

如果需要解密和数据校验,请跳转这里

参考地址:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html

https://mp.weixin.qq.com/debug/wxadoc/dev/api/uinionID.html

上一篇下一篇

猜你喜欢

热点阅读