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。

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

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

      (支付宝)                  (微信)

最新文章

  1. Servlet的生命周期及工作原理
  2. Python版设计模式: 创建型模式:单例模式和工厂模式家族
  3. jquery 自定义click事件执行多次
  4. 正则表达式提取string 中的表名
  5. java文档
  6. HDU-3308 LCIS(区间合并)
  7. Java学习笔记(八):集合类
  8. 【LeetCode练习题】Merge Sorted Array
  9. 我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)
  10. PHP判断客户端是否使用代理服务器及其匿名级别
  11. CentOS配置apache多站点设置
  12. Android缩放动画[ScaleAnimation]
  13. 建立uboot,内核的SI工程(1)
  14. 如何免费的将本地Web服务映射到外网
  15. freemaker超详细 讲解 配置
  16. EF code first,set composite primary key 复合key问题
  17. 浮动布局float
  18. 关于QT中“崩溃”问题
  19. Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务
  20. String对象内存分析

热门文章

  1. [LC] 238. Product of Array Except Self
  2. 实现一个简易的HashMap
  3. Java程序、JSP以及JavaScript中如何判断某个字符串是否包含某个子串
  4. 支持向量机 SVM - Wenjing
  5. Python知识点总结及其介绍链接
  6. nginx 502排错
  7. SetTimeout()多次运行函数后越来越快的问题
  8. MySQL show命令的用法
  9. 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新
  10. 如何成为一名高级C++程序员