详解微信小程序-获取用户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使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 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
PDO::rollBack讲解
2019/01/29 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
python实现中文分词FMM算法实例
2015/07/10 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
举例讲解Python常用模块
2019/03/08 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
幼儿园教师个人反思
2014/01/30 职场文书
室内拓展活动方案
2014/02/13 职场文书
关于旅游的活动方案
2014/08/15 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
详解Oracle块修改跟踪功能
2021/11/07 Oracle