node 微信受權 獲取openid

node獲取微信受權拿到openidnode

 

須要瞭解的網站ios

  1.微信受權json

先說一下流程(一張圖代替全部):axios

流程步驟:api

 1.用戶贊成,獲取code。微信

 2.經過code獲取網頁受權access_token.app

 3.獲取用戶信息。koa

開始搞事情:async

這是個人路由結構。網站

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。

 

 在這裏再次感謝在人生路上幫助個人人!謝謝大家。

若是以上代碼對您有用,歡迎打賞!若有錯誤的地方也請您留言指出。

 

      (支付寶)                  (微信)

相關文章
相關標籤/搜索