NodeJs開發(fā)微信記錄(3)--網(wǎng)頁(yè)授權(quán)

微信公眾號(hào)提供的與用戶互動(dòng)的功能有限伤塌,大部分的業(yè)務(wù)場(chǎng)景還是需要用戶跳轉(zhuǎn)到網(wǎng)頁(yè)中來實(shí)現(xiàn)。同時(shí)我們需要獲取微信用戶信息,這時(shí)候我們繞不開的一個(gè)重要的點(diǎn)就是微信網(wǎng)頁(yè)開發(fā)。根據(jù)官方文檔罕邀,網(wǎng)頁(yè)開發(fā)有幾個(gè)步驟:

步驟1--設(shè)置域名

設(shè)置回調(diào)域名,登錄公眾號(hào)后 养距,進(jìn)入 ‘開發(fā)-接口權(quán)限’ 诉探,下拉找到‘網(wǎng)頁(yè)授權(quán)’,修改設(shè)置域名(純域名棍厌,不帶http或https等協(xié)議頭)肾胯。域名需要ICP備案,填寫之后需要下載驗(yàn)證文件耘纱。把文件放到項(xiàng)目根目錄敬肚,路由設(shè)置該路徑為靜態(tài)文件。我使用的路由規(guī)則是 '/:file'束析,判斷為 txt文件名直接返回文件艳馒。如果同目錄下有其他不希望暴露的文件則需要更細(xì)致的判斷。

步驟2--邏輯實(shí)現(xiàn)

網(wǎng)頁(yè)授權(quán)有兩種形式
snsapi_base -- 獲取基本信息员寇,僅需要識(shí)別用戶的話鹰溜,通過這個(gè)就能拿到用戶的 openid。如果綁定了開放平臺(tái)的話丁恭,還會(huì)返回一個(gè) unionId。這種授權(quán)是不需要用戶同意的(省去一些信任成本)
snsapi_userinfo -- 獲取用戶詳細(xì)信息斋日,包括用戶性別牲览、昵稱、地區(qū)恶守、性別第献、微信頭像等。如果需要的話選這種兔港,需要用戶確認(rèn)登錄庸毫。
相關(guān)代碼長(zhǎng)這樣(koa2框架的寫法):

'use strict'
const rp = require('request-promise')
let scopePage = async (ctx, next)=>{
  if(!ctx.query.code && !ctx.query.state) {
    //首次進(jìn)入,需要跳轉(zhuǎn)到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) {
    //用戶同意授權(quán)
    let code = ctx.query.code; 
    let appid = 'yourappid'; //公眾號(hào)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'; //公眾號(hào)的appid
  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=${scopeType}&state=${state}#wechat_redirect `
}

一般拿到用戶信息后衫樊,將相關(guān)信息渲染到模板中飒赃。這樣就能給每個(gè)用戶返回不一樣的內(nèi)容了利花。
在用戶后續(xù)的操作中,我們可以進(jìn)一步完善用戶信息(譬如要求用戶綁定手機(jī)號(hào)碼)载佳,后面如果需要對(duì)用戶推送通知之類的就可以實(shí)現(xiàn)了炒事。
微信網(wǎng)頁(yè)開發(fā)更強(qiáng)大的功能在 JSSDK 中,以后再記錄蔫慧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挠乳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姑躲,更是在濱河造成了極大的恐慌睡扬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黍析,死亡現(xiàn)場(chǎng)離奇詭異卖怜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)橄仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門韧涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侮繁,你說我怎么就攤上這事虑粥。” “怎么了宪哩?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵娩贷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我锁孟,道長(zhǎng)彬祖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任品抽,我火速辦了婚禮储笑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圆恤。我一直安慰自己突倍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布盆昙。 她就那樣靜靜地躺著羽历,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淡喜。 梳的紋絲不亂的頭發(fā)上秕磷,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音炼团,去河邊找鬼澎嚣。 笑死疏尿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的币叹。 我是一名探鬼主播润歉,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼颈抚!你這毒婦竟也來了踩衩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤贩汉,失蹤者是張志新(化名)和其女友劉穎驱富,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匹舞,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褐鸥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赐稽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫榕。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姊舵,靈堂內(nèi)的尸體忽然破棺而出晰绎,到底是詐尸還是另有隱情,我是刑警寧澤括丁,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布荞下,位于F島的核電站,受9級(jí)特大地震影響史飞,放射性物質(zhì)發(fā)生泄漏尖昏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一构资、第九天 我趴在偏房一處隱蔽的房頂上張望抽诉。 院中可真熱鬧,春花似錦吐绵、人聲如沸掸鹅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至葵姥,卻和暖如春荷鼠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榔幸。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工允乐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矮嫉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓牍疏,卻偏偏與公主長(zhǎng)得像蠢笋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳞陨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容