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。
在这里再次感谢在人生路上帮助我的人!谢谢你们。
如果以上代码对您有用,欢迎打赏!如有错误的地方也请您留言指出。
(支付宝) (微信)