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

微信小程序-获取用户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(’’);
}
})
结果:

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

如果需要解密和数据校验,请跳转这里。
在这里插入图片描述
参考地址:

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

https://mp.weixin.qq.com/debug/wxadoc/dev/api/uinionID.html

意外金喜的博客:http://blog.csdn.net/zzwwjjdj1

作者:意外金喜
来源:CSDN
原文:https://blog.csdn.net/zzwwjjdj1/article/details/79351005
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值