详解微信小程序-获取用户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 相关文章推荐
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python中字典和JSON互转操作实例
2015/01/19 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Python连接字符串过程详解
2020/01/06 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
python 如何将office文件转换为PDF
2020/09/22 Python
使用django自带的user做外键的方法
2020/11/30 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
流动人口婚育证明
2014/10/19 职场文书
优秀员工推荐材料
2014/12/20 职场文书
校长师德表现自我评价
2015/03/04 职场文书
唐山大地震的观后感
2015/06/05 职场文书
婚宴致辞
2015/07/28 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫