微信公共號的開發和傳統的web項目開發的主要區別是用戶登陸受權,並且用戶和第三方服務器的交互都通過了微信服務器。git
詳細說明就是,用戶發送請求,微信服務器接收請求,而後轉發給第三方服務器,第三方服務器處理請求,將相應數據發給微信服務器,微信服務器將數據轉發給用戶。web
須要說明的是,這個流程是針對用戶與公衆號進行交互時的流程。通常場景下,微信掃描二維碼打開連接,或者用戶分享連接,用微信打開時,都是啓動了微信自帶的瀏覽器,這個時候微信服務器會對訪問的網址進行檢測,可是並無對網站的內容進行處理,原封不動的展現給用戶了(目前是這樣的)。api
首先有幾個比較重要的概念:瀏覽器
- 公衆號的appID和
- 公衆號的全局惟一接口調用憑據access_token:這個能夠理解爲第三方服務器和微信服務器交互的憑據,通俗的說就是門禁卡(有過時時間,過時後須要從新申請)。這個的好處是能夠避免每次和微信服務器交互時發送appID和appsecret而形成風險。
- 用戶的openid:這個某個微信用戶惟一標識,可是僅僅針對對當前公衆號。一個微信用戶有無數個openid,對每個公衆號都有一個openid。
目前碰到的比較複雜的問題是獲取用戶的基本信息。若是獲取微信用戶的基本信息呢?服務器
- 開發者到公衆平臺官網中「開發-接口權限-網頁服務-網頁帳號-網頁受權獲取用戶基本信息」的配置選項中,修改受權回調域名配置(即下面請求中的redirect_uri的域名)。這裏填寫的是域名(是一個字符串),而不是URL,所以請勿加 http:// 等協議頭。
- 獲取code,引導用戶打開以下頁面https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ,其中scope有兩個值snsapi_base(靜默受權用戶無感知,只能獲取用戶的openid)和snsapi_userinfo(彈出窗口讓用戶確認,若是用戶已經關注,也是靜默受權)。用戶點擊贊成,頁面將跳轉至的redirect_uri回調域名,同時攜帶參數code。
- 獲取access_token和用戶的openid,這個access_token和以前說的 全局惟一接口調用憑據access_token 不是一個,只是剛好參數名相同而已。須要發送請求至https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,這樣就能夠獲取到access_token和openid。
- 獲取用戶信息,發送請求至https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN,這樣就能夠獲取到用戶信息。
這樣就能夠獲取用戶信息了。微信
假如已經獲取到了用戶的openid,那麼經過下面的請求能夠直接獲取到用戶的基本信息:app
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN測試
注意這個access_token是公衆號的全局惟一接口調用憑據。網站
項目地址以下:https://gitee.com/colin220/weixin_public_platform.gitspa
公司的項目也是一個微信公衆號項目,在用戶訪問首頁時候就會獲取用戶信息。在本地調試的時候,受權回調域名是一個問題,如何跳到本地localhost:8080是個問題,所以作了一個公用的回調頁面,將這個頁面放在測試服務器,在這個回調頁面上再一次跳轉,跳轉到localhost:8080/index的頁面。
在獲取code的那個步驟中,其實有一個state參數,能夠經過這個參數將本地的ip傳進去,而後再跳轉到本地ip上。
參考文檔:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432