详解微信小程序-获取用户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 相关文章推荐
14款NodeJS Web框架推荐
Jul 11 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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生成树的方法
2015/07/28 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
python数组复制拷贝的实现方法
2015/06/09 Python
让Python代码更快运行的5种方法
2015/06/21 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python rsa 加密解密
2017/03/20 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
考生诚信考试承诺书
2014/05/23 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
高中社区服务活动报告
2015/02/05 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技