1、配置公众号的自定义菜单,如

{
"button":[
{
"type":"view",
"name":"公众号",
"url":"http://xxx/consultList"
},
{
"type":"view",
"name":"小程序",
"url":"http://xxx"
},
{
"type":"view",
"name":"个人信息",
"url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=http%3a%2f%2fxxx%2foauth%2findex&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
}
]
}

自定义菜单

2、设置网页授权域名

* 进入微信管理平台,打开功能设置-网页授权域名

* 需要设置的就是微信菜单中redirect_uri的地址(可以是接口地址获取页面路由地址)

* 在设置时,需要将一个认证的text文本放入网站根目录

  当时我项目中的app.js文件启动的3000端口只加载了和微信api有关的接口,并没有网站根目录,所以有新建了一个server.js启动目录,和一个网站根目录

  项目结构如下:

  

var http = require('http');
var fs = require('fs');//引入文件读取模块 var documentRoot = 'D:/wechat/nodetest/www';
//需要访问的文件的存放目录 var server= http.createServer(function(req,res){ var url = req.url;
//客户端输入的url,例如如果输入localhost:8888/index.html
//那么这里的url == /index.html var file = documentRoot + url;
console.log(url);
//E:/PhpProject/html5/websocket/www/index.html fs.readFile( file , function(err,data){
/*
一参为文件路径
二参为回调函数
回调函数的一参为读取错误返回的信息,返回空就没有错误
二参为读取成功返回的文本内容
*/
if(err){
res.writeHeader(,{
'content-type' : 'text/html;charset="utf-8"'
});
res.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
res.end();
}else{
res.writeHeader(,{
'content-type' : 'text/html;charset="utf-8"'
});
res.write(data);//将index.html显示在客户端
res.end(); } }); }).listen(); console.log('服务器开启成功');

server.js

将需要认证的.text文本放入www文件夹,确认网页授权就可以了

微信管理平台的网页应授权配置完成之后关闭这个server启动项就可以了,后续域名授权可以正常使用

3、关于域名授权接口

const wechat = require('../wechat/wechat')
const config = require('../config/wechat.json')
let wechatApp = new wechat(config)
module.exports = {
// 公众号消息
'GET /oauth/index': async (ctx, next) => {
let code=ctx.request.query.code
await wechatApp.snsapi_base(code).then(function (data) {
ctx.response.type = 'text'
ctx.response.body = data
});
}
};

域名授权接口

  /**
* 通过snsapi_base 方式获取用户的openid和网页授权access_token(与调用微信接口使用的access_token不同)
*/
WeChat.prototype.snsapi_base = async function (code) {
logger.info('snsapi_base code', code)
var that = this;
return new Promise(function (resolve, reject) {
//格式化请求地址
var url = util.format(that.apiURL.snsapi_base, that.apiDomain, that.appID, that.appScrect, code);
that.requestGet(url).then(function (data) {
resolve(data);
});
});
}

网页授权获取用户openid

网页授权的两种方式

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

  * 因为所需要的有效信息只要一个openid就够了,所以我使用的就是第一种 以snsapi_base为scope发起的网页授权

  * 在域名授权接口的query中就会有一个code参数,我们要做的就是把这个code和公众号的appID,appScrect作为参数发送一个GET请求给微信接口

   接口的获取结果中就有openid和access_token等参数,其实我们所需要的保留一个openid就可以了

git:https://github.com/wuyongxian20/wechat-api

node.js 微信开发3-网页授权的更多相关文章

  1. node.js 微信开发2-消息回复、token获取、自定义菜单

    项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...

  2. node.js 微信开发1-接入

    准备工作1 域名准备 无论是个人开发还是做公司项目域名都是必不可少的 前期我个人用过花生壳做个开发测试,挺好用的,就是现在要收费了,开通花生壳要收费,开通内网穿透要收费(为啥要内网穿透呢,因为微信接入 ...

  3. 微信开发中网页授权access_token与基础支持的access_token异同

    问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...

  4. 微信开发中网页授权access_token与基础支持的access_token异同 【转载、收藏】

    问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...

  5. node JS 微信开发

    JS-SDK 要点 微信测试号; 扫码登录;无需认证(只是名称统一为微信测试号)http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/logi ...

  6. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境

    首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...

  7. ASP.NET MVC4 微信公众号开发之网页授权(二):通过公众号AppID(应用ID)和AppSecret(应用密钥)取得网页授权openid

    ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境 通过了上一篇文章我们已经搭建好了基础开发大环境,现在打开开发环境这里我用的是 vs2013,通过如下方式: 拼接请求链接重定向到 ...

  8. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  9. 4.Node.js 微信消息管理

    一.写在前面的话   当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应.   消息推送也是 ...

随机推荐

  1. flutter的加载弹框

    代码组件: import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'packa ...

  2. Python数据抓取技术与实战 pdf

    Python数据抓取技术与实战 目录 D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字 ...

  3. springboot 项目基本目录包结构

    1.基本目录结构 controller service impl mapper utils domain config interceoter(拦截器) dto

  4. NETTY option参数

    Channel配置参数 (1).通用参数 CONNECT_TIMEOUT_MILLIS :   Netty参数,连接超时毫秒数,默认值30000毫秒即30秒. MAX_MESSAGES_PER_REA ...

  5. 原生JavaScript常用本地浏览器存储方法四(HTML5 LocalStorage sessionStorage)

    HTML5 LocalStorage浏览器的支持的情况如上图,IE在8.0的时候就支持了.不过需要注意的是,IE测试的时候需要服务器环境(或者localhost). 测试自然是检测浏览器是否支持本地存 ...

  6. CentOS 7 新装服务器部署流程

    目录 1.设置时区 2.配置内网IP (如果是外网IP,linux要修改远程端口) 3.配置自己的yum源 4.关闭SELinux 5.添加zabbix监控 6.关闭防火墙和NM 7.安装软件包 8. ...

  7. C++标准模板库STL算法与自适应容器(栈和队列)

    参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在 ...

  8. 【Luogu P3919】可持久化数组

    数组是一种单点修改,单点查询的基础数据结构. 如果要对数组改进,使之可持久化,那么显然我们需要利用其它的数据结构来改进它. 对于单点修改和单点查询两种操作,很容易发现可持久化线段树也是支持这种操作的. ...

  9. Linux DHCP 服务器配置与管理

    一.环境介绍: 运行软件:VMware Workstation Pro 14 系统环境:CentOS-7-x86_64-1810 二.操作配置: 1.DHCP 服务器搭建 1)安装DHCP yum i ...

  10. Quartz.Net—JobBuilder

    JobBuilder JobBuilder是一个建造者模式,链式建造.通过静态方法构建一个JobBuilder实例,然后再调用类方法Build()创建一个IJobDetail的实现. 1.静态方法 p ...