• node 微信授权 获取openid


    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。

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

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

          (支付宝)                  (微信)

  • 相关阅读:
    C#连接数据库的三种方法
    远程控制mysql出现的问题
    DFS_子集
    DFS_全排列
    Centos下搭建Mysql
    Nginx与PHP(FastCGI)的安装、配置与优化
    Centos下主DNS的搭建
    Nginx的基本配置与优化
    Nginx服务器的安装与配置
    gdb基本命令
  • 原文地址:https://www.cnblogs.com/jimmy1293/p/8969057.html
Copyright © 2020-2023  润新知