點(diǎn)擊訪問原文
您還可以加入全棧技術(shù)交流群(QQ群號:254842154)
問題
今天同事在調(diào)試微信公眾號網(wǎng)頁授權(quán)時(shí)号阿,發(fā)現(xiàn)一個(gè)非常詭異的問題迁沫。當(dāng)scope為snsapi_base時(shí)芦瘾,可以正常授權(quán),當(dāng)scope為snsapi_userinfo時(shí)集畅,無法授權(quán)近弟,出現(xiàn)空白頁面。
解決過程
首先可以排除接口權(quán)限的問題挺智,因?yàn)?code>snsapi_base和snsapi_userinfo
需要的權(quán)限是一樣的祷愉。也可以排除是微信sdk的問題,所以還是從自身找問題。通過后臺(tái)調(diào)試二鳄,把授權(quán)頁面的地址打印出來是這樣子的:
//把下面url中的scope=snsapi_userinfo 改為 scope=snsapi_base可以正常授權(quán)
https://open.weixin.qq.com/connect/oauth2/authorize?appId=wx87cf9295e2eeba97&redirect_uri=http%3A%2F%2Fapi.fellowplus.com%2Fexam%2F&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect
對比官網(wǎng)wiki文章迫摔,同事肉眼對比鏈接沒有發(fā)現(xiàn)任何問題。后來我表示不服泥从,決定肉眼再觀察一遍句占,終于發(fā)現(xiàn) appId
中的字母I
應(yīng)該是小寫的。改成小寫后測試通過躯嫉。OMG纱烘,又是linux的大小寫問題。
非常簡單的一個(gè)低級錯(cuò)誤祈餐,一方面暴露了我們自己的不嚴(yán)謹(jǐn)擂啥,沒有嚴(yán)格按照微信官方的wiki來做,忽略了url參數(shù)中的大小寫問題帆阳;另外一方面哺壶,也反映出微信的不厚道,同樣都是大寫的字母I
蜒谤,為什么snsapi_base
的授權(quán)模式是可以的山宾,而snsapi_userinfo
不行呢,我猜可能是前者在獲取appid
這個(gè)參數(shù)時(shí)鳍徽,會(huì)統(tǒng)一轉(zhuǎn)換成小寫资锰,而snsapi_userinfo
時(shí)沒有做這個(gè)操作。導(dǎo)致微信授權(quán)服務(wù)接收不到appid
這個(gè)參數(shù)阶祭。此時(shí)绷杜,微信應(yīng)該報(bào)一個(gè)類似于獲取appid失敗
這樣的錯(cuò)誤的,可是并沒有濒募,而是停留在授權(quán)頁面無法跳轉(zhuǎn)到用戶的redirect_uri
鞭盟,用戶看到的表現(xiàn)就是空白頁面。微信這樣做可能是出于安全考慮吧瑰剃。
假如在網(wǎng)頁授權(quán)時(shí)有類似的空白頁出現(xiàn)齿诉,可以從我剛剛提供的思路去查看,是否有類似的大小寫問題培他。
其他問題
在做網(wǎng)頁授權(quán)時(shí)鹃两,經(jīng)常會(huì)遇到的一個(gè)其他問題是提示:redirect_uri參數(shù)錯(cuò)誤
。出現(xiàn)這個(gè)問題的原因通常都是沒有在接口權(quán)限表中修改OAuth2.0網(wǎng)頁授權(quán)的授權(quán)回調(diào)頁面域名舀凛,或者填寫在域名前面多加了http
或者https
工具
在開發(fā)微信公眾號時(shí)俊扳,可以申請測試號來體驗(yàn),它擁有大部分高級權(quán)限(除微信支付之外)猛遍。在公眾號處于申請階段馋记,用這個(gè)測試號來開發(fā)是非常棒的号坡!
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
另外,給大家推薦一個(gè)github上非常實(shí)用的微信公眾號開發(fā)sdk梯醒,它對微信公眾號的sdk做了二次封裝宽堆,包括緩存access_token等處理,目前有php版本的茸习。https://github.com/dodgepudding/wechat-php-sdk