美文网首页
NodeJs开发微信记录(3)--网页授权

NodeJs开发微信记录(3)--网页授权

作者: neoyoun | 来源:发表于2017-03-03 20:54 被阅读0次

微信公众号提供的与用户互动的功能有限,大部分的业务场景还是需要用户跳转到网页中来实现。同时我们需要获取微信用户信息,这时候我们绕不开的一个重要的点就是微信网页开发。根据官方文档,网页开发有几个步骤:

步骤1--设置域名

设置回调域名,登录公众号后 ,进入 ‘开发-接口权限’ ,下拉找到‘网页授权’,修改设置域名(纯域名,不带http或https等协议头)。域名需要ICP备案,填写之后需要下载验证文件。把文件放到项目根目录,路由设置该路径为静态文件。我使用的路由规则是 '/:file',判断为 txt文件名直接返回文件。如果同目录下有其他不希望暴露的文件则需要更细致的判断。

步骤2--逻辑实现

网页授权有两种形式
snsapi_base -- 获取基本信息,仅需要识别用户的话,通过这个就能拿到用户的 openid。如果绑定了开放平台的话,还会返回一个 unionId。这种授权是不需要用户同意的(省去一些信任成本)
snsapi_userinfo -- 获取用户详细信息,包括用户性别、昵称、地区、性别、微信头像等。如果需要的话选这种,需要用户确认登录。
相关代码长这样(koa2框架的写法):

'use strict'
const rp = require('request-promise')
let scopePage = async (ctx, next)=>{
  if(!ctx.query.code && !ctx.query.state) {
    //首次进入,需要跳转到scopeurl 来获取 code
    let curUrl = ctx.href
    let scopeUrl = generatorScopeUrl(curUrl, 'info')
    ctx.status = 302;
    ctx.redirect(scopeUrl)
  } else if(ctx.query.code && ctx.query.state) {
    //用户同意授权
    let code = ctx.query.code; 
    let appid = 'yourappid'; //公众号appid
    let fetchWechatUserInfo = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=SECRET&code=${code}&grant_type=authorization_code `;
    let options = {
      method: 'GET',
      uri: fetchWechatUserInfo,
      json: true
    }
    let userInfo = await rp(options);
    if(userInfo.errcode){
      throw new Error('fetch userInfo failure, please check the params')
    }
    let {openid, access_token, refresh_token} = userInfo
  
    let fetchWechatUserDetailInfoUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN `;
    let userDetailInfo = await rp({method:'GET', uri: fetchWechatUserDetailInfoUrl, json:true })
    userInfo = Object.assign({}, userInfo, userDetailInfo)
    ... //dosomething
  }
}
function generatorScopeUrl(url, type) {
  if(!url) return false;
  let scopeType = 'snsapi_base';
  if(type == 'info){
    scopeType = 'snsapi_userinfo';
  }
  let state = 'userstate'; //自定义字符串
  let appid = 'yourappid'; //公众号的appid
  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=${scopeType}&state=${state}#wechat_redirect `
}

一般拿到用户信息后,将相关信息渲染到模板中。这样就能给每个用户返回不一样的内容了。
在用户后续的操作中,我们可以进一步完善用户信息(譬如要求用户绑定手机号码),后面如果需要对用户推送通知之类的就可以实现了。
微信网页开发更强大的功能在 JSSDK 中,以后再记录。

相关文章

  • NodeJs开发微信记录(3)--网页授权

    微信公众号提供的与用户互动的功能有限,大部分的业务场景还是需要用户跳转到网页中来实现。同时我们需要获取微信用户信息...

  • 基于Node.js的微信JS-SDK后端接口实现(三)

    微信公众号开发之五微信网页授权 开始之前建议先阅读微信官方文档 微信公众号开发之五微信网页授权 一.网页授权的作用...

  • 微信公众号开发(二)

    微信公众号开发文档 微信网页授权 微信客户端中访问第三方网页,可通过 微信网页授权机制 来获取用户信息。授权机制:...

  • vue + js 实现微信授权登录

    描述点 微信相关开发知识了解 微信网页授权 vue router.beforeEach vuex 授权详解 页面...

  • 微信网页开发@授权

    如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 关于...

  • 微信网页授权基本步骤

    一、首先在微信公众平台配置授权回调地址(“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本...

  • django: 微信网页授权

    微信网页授权基础知识 网页授权的最终目的就是获取微信的用户信息,微信的网页授权方式有两种 snsapi_base:...

  • 微信内置浏览器web开发(登陆 + 支付)

    微信开发技术文档 网页授权——登陆 获取用户信息,需要获取来自微信的授权access_token。获取access...

  • 微信H5中静默登录及非静默登录 @劉䔳

    网页授权回调域名 在微信公众号请求用户授权的前提下,开发者需要在公众平台官网中得“开发-接口权限-网页服务-网页账...

  • 微信开发之微信网页授权

    微信网页授权 所谓的微信网页授权说白了就是 用户微信客户端内访问第三方网页,公众号可以根据网页授权这个机制来获取用...

网友评论

      本文标题:NodeJs开发微信记录(3)--网页授权

      本文链接:https://www.haomeiwen.com/subject/wkiswttx.html