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. sorry, unimplemented: non-trivial designated initializers not supported

    将C语言转换为C++代码时,发生如下错误 sorry, unimplemented: non-trivial designated initializers not supported. 查找原因,是 ...

  2. Glide升级到4.x版本遇到的问题

    Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency ...

  3. centos7 gcc升级

    1. 安装必备 yum groupinstall "Development Tools" yum install glibc-static libstdc++-static   2 ...

  4. C# 获取或设置指定 config 文件的值

    ExeConfigurationFileMap 这个类提供了修改.获取指定 config 的功能:新建一个 ExeConfigurationFileMap 的实例 ecf :并设置 ExeConfig ...

  5. 【Leetcode_easy】876. Middle of the Linked List

    problem 876. Middle of the Linked List 参考 1. Leetcode_easy_876. Middle of the Linked List; 完

  6. PS更换证件照背景颜色

    同学们大家好,我是阿宝老师,今天给大家讲一下如何使用PS更换证件照背景色. 目前使用PS更换证件照底片有三种方式,这三种方式虽有不同,但是最终目的都是将人像从背景中抠出来.扣取人像有三种方法可供选取, ...

  7. 【GStreamer开发】GStreamer基础教程15——继承Clutter

    目标 Clutter是一个开源的库,用来创建快速.可移植和动态的GUI.GStreamer可以通过cluttersink这个element把clutter集成进来,允许视频像纹理一样使用.本教程会展示 ...

  8. Samba访问控制smb.conf

    访问控制 Samba的访问控制通过hosts allow(配置允许访问的客户端).hosts deny(配置拒绝访问的客户端)两个参数实现. 在Samba中使用hosts allow.hosts de ...

  9. 说说Spring XML的头

    部分内容截取自(http://blog.csdn.net/zhch152/article/details/8191377,http://iswift.iteye.com/blog/1657537) 在 ...

  10. idea快速查看api文档

    第一种: 显示结果:点击箭头可以跳转到网页上查看 第二种:ctrl+q 快捷键