node.js 微信开发3-网页授权
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-网页授权的更多相关文章
- node.js 微信开发2-消息回复、token获取、自定义菜单
项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...
- node.js 微信开发1-接入
准备工作1 域名准备 无论是个人开发还是做公司项目域名都是必不可少的 前期我个人用过花生壳做个开发测试,挺好用的,就是现在要收费了,开通花生壳要收费,开通内网穿透要收费(为啥要内网穿透呢,因为微信接入 ...
- 微信开发中网页授权access_token与基础支持的access_token异同
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
- 微信开发中网页授权access_token与基础支持的access_token异同 【转载、收藏】
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
- node JS 微信开发
JS-SDK 要点 微信测试号; 扫码登录;无需认证(只是名称统一为微信测试号)http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/logi ...
- ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境
首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...
- ASP.NET MVC4 微信公众号开发之网页授权(二):通过公众号AppID(应用ID)和AppSecret(应用密钥)取得网页授权openid
ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境 通过了上一篇文章我们已经搭建好了基础开发大环境,现在打开开发环境这里我用的是 vs2013,通过如下方式: 拼接请求链接重定向到 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- 4.Node.js 微信消息管理
一.写在前面的话 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应. 消息推送也是 ...
随机推荐
- Spring Boot与MyBatis的集成
SSM(Spring+Spring MVC+MyBatis)是当前主流的框架组合开发方式之一,普遍被应用于互联网项目中.如果要使用Spring Boot开发一个基于SSM框架的应用,那么我们要怎么做呢 ...
- Spring MVC 为控制器添加通知与处理异常
与Spring AOP一样,Spring MVC也能够给控制器加入通知,它主要涉及4个注解: •@ControllerAdvice,主要作用于类,用以标识全局性的控制器的拦截器,它将应用于对应的控制器 ...
- LeetCode_344. Reverse String
344. Reverse String Easy Write a function that reverses a string. The input string is given as an ar ...
- 《MySQL必知必会》学习笔记——第30章 改善性能
本章将付息与MySQL性能有关的某些要点. 30.1 改善性能 数据库管理员把他们生命中的相当一部分时间花在了调整.试验以改善DBMS性能之上.在诊断英勇的滞缓现象和性能问题时,性能不良的数据库(以及 ...
- LODOP打印table超宽用省略号带'-'的内容换行问题
前面的博文有div超宽隐藏(LODOP打印超过后隐藏内容样式),还有有table设置超宽隐藏(),此外,还有超宽后用省略号表示的css样式,此文是针对这个样式的.该样式正常情况下没问题,但是遇到-短线 ...
- 【TensorRT】自定义网络层的实现custom layers
参考 1. Extending TensorRT With Custom Layers; 2. TensorRT Samples: MNIST(Plugin, add a custom layer); ...
- ACS712电流传感器应用
1. 原理图 其中第7脚输出的是电压值,那么电压值和测量的电流什么关系?看下图,有3个量程,我用的是20A电流的,100mv电压对应1A电流 看下图,不同的温度会有影响,不过区别不大 最后计算的公式是 ...
- 使用jmeter HTTP代理服务器录制APP脚本
使用jmeter HTTP代理服务器录制APP脚本 步骤一.jemter设置 1.启动JMeter,双击运行jmeter.bat,启动jmeter jmeter运行主界面 2.添加线程组:右键测试计划 ...
- Pytorch Tensor 常用操作
https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...
- Ubuntu 18.04 LTS 设置代理(系统代理;http 代理;sock5 代理;apt 代理 ...)
1. 设置系统代理 1.1 设置 http 代理 1.1.1 只在当前 shell 生效 export http_proxy="http://<user>:<passwor ...