node 微信授權 獲取openid
阿新 • • 發佈:2018-05-02
style 微信網頁授權 9.png sco tocken body next() wechat userinfo
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。
在這裏再次感謝在人生路上幫助我的人!謝謝你們。
如果以上代碼對您有用,歡迎打賞!如有錯誤的地方也請您留言指出。
(支付寶) (微信)
node 微信授權 獲取openid