详解微信小程序-获取用户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 URL模块操作URL相关方法介绍
Mar 03 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
nodejs socket服务端和客户端简单通信功能
Sep 14 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
Javascript学习指南
2014/12/01 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
下载给定网页上图片的方法
2014/02/18 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python处理html转义字符的方法详解
2016/07/01 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
2013年军训通讯稿
2014/02/05 职场文书
闭幕式主持词
2014/04/02 职场文书
团日活动总结
2014/04/28 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
党校毕业个人总结
2015/02/28 职场文书
语文教师求职信范文
2015/03/20 职场文书
工程服务质量承诺书
2015/04/29 职场文书