详解微信小程序-获取用户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的交互示例代码
Aug 18 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
浅谈vue websocket 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
PHP取进制余数函数代码
2012/01/19 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
smarty简单应用实例
2015/11/03 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
python实现反转部分单向链表
2018/09/27 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
函授本科自我鉴定
2013/11/03 职场文书
网络教育自我鉴定
2014/02/04 职场文书
综合实践活动总结
2014/05/05 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
聘任证明怎么写
2015/03/02 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL