node 微信授权 获取openid

node获取微信授权拿到openid

 

需要了解的网站

  1.微信授权

先说一下流程(一张图代替所有):

流程步骤:

 1.用户同意,获取code。

 2.通过code获取网页授权access_token.

 3.获取用户信息。

开始搞事情:

这是我的路由结构。

const Koa = require('koa')
const app = new Koa()
const path = require('path')
const route = require('koa-route');
const static = require('koa-static');
const keyBody = require('koa-body')

// routes
const { oauth } = require('./routes/accredit/oauth');
const { token } = require('./routes/accredit/token');
const rootPath = path.join(__dirname + '/View')
const _static = static(rootPath)
    // 中间件
const logger = async(ctx, next) => {
    const rt_start = Date.now()
    await next()
    const rt_end = Date.now()
    ctx.set('X-Response-Time', `${rt_end - rt_start}ms`);
    console.log(ctx.request.method, ctx.url, `${rt_end - rt_start}ms`)
}

app.use(_static) // 静态资源
app.use(keyBody()) // req body数据获取 (非参数序列化)
app.use(logger) // 日志

// page route
app.use(route.get('/oauth', oauth)); //授权
app.use(route.get('/token', token)); //获取openid


app.listen(8088, (err) => {
    if (err) { console.error(err) }
    console.log('Listening At:', 8088)
}

 

 1.在APP中访问oauth获取code

var config = require('./../config');
var request = require('request');
/* 微信网页授权 */
const oauth = async(ctx, next) => {
    const { request: req, response: res } = ctx;        
     var AppID = config.AppID; var AppSecret = config.AppSecret; // 第一步:用户同意授权,获取code var Router = 'jy'; // 这是编码后的地址 var return_uri = config.return_uri + Router; var scope = 'snsapi_base'; // snsapi_userinfo可以获取用户信息与token与openid // snsapi_base只能获取到token与openid res.redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + AppID + '&redirect_uri=' + return_uri + '&response_type=code&scope=' + scope + '&state=123456#wechat_redirect'); } module.exports = { oauth };

 1.01(config.js)//写好配置参数

    (1):AppID,

    (2):AppSecret。

2.在客户端访问 tocken,tongguo code获取access_tocken

var config = require('./../config');
var request = require('request');
var axios = require('axios')
const token = async(ctx, next) => {
    const { request: req, response: res } = ctx
    var code = req.header.referer.match(new RegExp("[?&]" + 'code' + "=([^&]+)", "i"))[1];
    var AppID = config.AppID;
    var AppSecret = config.AppSecret;
    var result = await request.get({
            url: 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' + AppID + '&secret=' + AppSecret + '&code=' + code + '&grant_type=authorization_code',
        },
        function(error, response, body) {
            if (response.statusCode == 200) {
                // 第三步:拉取用户信息(需scope为 snsapi_userinfo)
                // console.log(JSON.parse(body));
                var data = JSON.parse(body);
                var access_token = data.access_token;
                var openid = data.openid;
            } else {
                console.log(response.statusCode);
            }
        }
    );
    ctx.type = 'json';
    ctx.body = result;
}

module.exports = { token }

因为我这里只需要获取到openid即可,所以在这里就已经返回result。

 在这里再次感谢在人生路上帮助我的人!谢谢你们。

如果以上代码对您有用,欢迎打赏!如有错误的地方也请您留言指出。

      (支付宝)                  (微信)

原文地址:https://www.cnblogs.com/jimmy1293/p/8969057.html