详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs


Posted in NodeJs onApril 29, 2019

微信小程序-获取用户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('');
 }
})

结果:

详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs

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

参考地址:

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

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

以上所述是小编给大家介绍的微信小程序获取session_key,openid,unionid的方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
NodeJS实现一个聊天室功能
Nov 25 NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 #NodeJs
Nodejs实现用户注册功能
Apr 14 #NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 #NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 #NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 #NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 #NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 #NodeJs
You might like
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
js 编写规范
2010/03/03 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
微信小程序block的使用教程
2018/04/01 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
Python设计模式之门面模式简单示例
2018/01/09 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
Django框架反向解析操作详解
2019/11/28 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
python如何安装下载后的模块
2020/07/03 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
如何利用cmp命令比较文件
2016/04/11 面试题
员工入职担保书范文
2014/04/01 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
硕士论文致谢范文
2015/05/14 职场文书
经济纠纷起诉状
2015/05/20 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript