700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信小程序-获取用户session_key openid unionid - 后端为nodejs

微信小程序-获取用户session_key openid unionid - 后端为nodejs

时间:2019-12-07 09:29:06

相关推荐

微信小程序-获取用户session_key openid unionid - 后端为nodejs

微信小程序-获取用户session_key,openid,unionid - 后端为nodejs8.0+

步骤:

1、通过wx.login接口获取code既jscode,传递到后端;

2、后端请求

https://api./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 = ‘/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./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(’’);

}

})

结果:

这个返回结果没有unionid,按照官方的说法,需要在微信开放平台绑定小程序;

如果需要解密和数据校验,请跳转这里。

参考地址:

https://mp./debug/wxadoc/dev/api/api-login.html

https://mp./debug/wxadoc/dev/api/uinionID.html

意外金喜的博客:/zzwwjjdj1

作者:意外金喜

来源:CSDN

原文:/zzwwjjdj1/article/details/79351005

版权声明:本文为博主原创文章,转载请附上博文链接!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。