1. 程式人生 > >node 微信授權 獲取openid

node 微信授權 獲取openid

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