1. 程式人生 > >微信登入介面

微信登入介面

開發須知

1.概念區分

  • 因為接觸到微信開發的知識,必然會接觸 OpenID 與 UnionID 的使用,以下為微信官方文件的的介紹,請注意區分:
  • 在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的 OpenID(加密後的微訊號,每個使用者對每個公眾號的 OpenID 是唯一的。對於不同公眾號,同一使用者的 OpenID 不同)。
  • 公眾號可通過相應介面來根據 OpenID 獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和關注時間。
  • 請注意,如果開發者有在多個公眾號,或在公眾號、移動應用之間統一使用者帳號的需求,需要前往微信開放平臺(open.weixin.qq.com)繫結公眾號後,才可利用 UnionID
     機制來滿足上述需求。
  • 簡單概括來講:
  • OpenID 是普通使用者的標識,對當前開發者帳號唯一。一個 OpenID 對應一個公眾號。
  • UnionID 是使用者統一標識。針對一個 微信開放平臺帳號 下的應用,同一使用者的 UnionID 是唯一的。

2.歸納整理

  • 繞了這個圈,也就是說,微信公眾號開發與微信開發平臺開發是有差別的
  • 想讓同一個微信使用者使用不同平臺(如PC端、app、微信小程式等)的網站登入,需要進行賬號繫結,而這個繫結的賬號不能以 OpenID 區分,而需要用 UnionID 區分。

3.典型問題

  • 附錄一個常見的設計問題,主要在於開發前的知識使用不夠全面,而造成後續拓展的影響,當然,這也是我遇到的問題,希望可以給各位敲個警鐘。
    典型問題

4、微信連結

申請介面流程

1、 微信公眾號介面申請

  • 註冊首先要去微信公眾平臺去註冊帳號 微信公眾平臺

    • 具體註冊帳號,請參考網上教程
    • 必須要求是必須是企業使用者
    • 這一篇是我自己申請的訂閱號,可以參考下申請流程開通個人微信公眾號
  • 繫結運營者微訊號當客戶註冊完之後,把他的帳號密碼拿過來,自己進去先繫結一個自己的微訊號(這樣以便以後直接用自己的帳號就能進行登入。一個微信帳號只能繫結5個微信公眾號管理員)

    • 設定->安全中心->管理員和運營者設定->繫結運營者微訊號
      繫結運營者微訊號
  • 基本配置把微信公眾號的基本資訊拿過來。最主要的還是把appid和appsecret給設定好

    • 開發->基本配置->公眾號開發資訊
      基本配置
  • 公眾號設定

    接著設定微信公眾號和自己網站對接

    • 公眾號設定->功能設定->業務域名js介面安全域名網頁授權域名
      公眾號設定
  • 介面除錯工具除錯介面程式的方法

    • 開發->開發者中心->開發者文件線上介面除錯工具web開發者工具
      介面除錯工具
以上是申請操作
申請成功後獲得微信公眾號測試key
Appid:123456
AppSecret:000000000

2、 微信電腦介面申請

介面申請,必須要先微信公眾平臺註冊申請,然後在去公眾開放平臺註冊申請。
具體可以參考第一步操作。和第三步操作

以上是申請操作
申請成功後獲得微信電腦登入測試key:
Apppid:456789
Appsecret:1000000000

3、 同時申請兩個端,可進行繫結 關聯

如果只是需要微信公眾號端登入的話,可以不用設定的很麻煩。如果需要兩種方式登入的話,就需要去微信開放平臺進行繫結

  • 如果需要在微信開放平臺上面操作,請先在微信公眾平臺上申請一個帳號(參考:1、 微信公眾號介面申請

  • 先進行帳號繫結

    • 帳號中心->基本資料開發者資質
      帳號繫結
  • 在進行介面繫結申請,當然這個申請完之後,以後的微信登入他都會返回一個特定的微信單獨帳號的一個碼(簡稱uid)

    • 微信公眾號:管理中心->公眾帳號
    • 微信電腦登入:網站應用->建立網站應用(建立完之後要設定授權回撥域:www.xxx.com
      介面繫結
  • 繫結成功之後,獲取他的APPIDAPPSECRET,每次登入都是需要獲取這個不一樣的id
    獲取他的APPID和APPSECRET

以上就是申請流程。
下面可就操作,如何用php程式和他對接
上面的配置一定要配置好
公眾號設定:
業務域名:www.meetes.top
JS介面安全域名:www.meetes.top
網頁授權域名:www.meetes.top

微信公眾號登入:
Appid:123456
AppSecret:000000000

微信電腦掃碼登入:
Appid:456789
AppSecret:100000000

程式業務流程

我CSDN裡有幾篇是關於這個的,想了解更多的,可以去我的CSDN裡看看

微信網頁授權登入

大概思路流程是這樣的:通過程式連結->從微信那邊授權->獲取微信那邊返回的使用者資訊->然後進行組裝->組裝好插入到我們的資料庫當中就行了

  • 通過OAuth2.0方式彈出授權頁面獲得使用者基本資訊(什麼是OAuth2.0?

    • 簡要概述什麼是OAuth2.0:

    • OAuth是一個開放協議,允許使用者讓第三方應用以安全且標準的方式獲取該使用者在某一網站、移動或桌面應用上儲存的私密的資源(如使用者個人資訊、照片、視訊、聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。

    • OAuth 2.0是OAuth協議的下一版本,但不向後相容OAuth 1.0。 OAuth 2.0關注客戶端開發者的簡易性,同時為Web應用,桌面應用和手機,和起居室裝置提供專門的認證流程。
    • OAuth允許使用者提供一個令牌,而不是使用者名稱和密碼來訪問他們存放在特定服務提供者的資料。每一個令牌授權一個特定的網站(例如,視訊編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相簿中的視訊)。這樣,OAuth允許使用者授權第三方網站訪問他們儲存在另外的服務提供者上的資訊,而不需要分享他們的訪問許可或他們資料的所有內容。
  • 獲得微信公眾平臺關注使用者的基本資訊,包括暱稱、頭像、性別、國家、省份、城市、語言。

第一步:使用者同意授權,獲取code

  • 在確保微信公眾賬號擁有授權作用域(scope引數)的許可權的前提下(服務號獲得高階介面後,預設帶有scope引數中的snsapi_base和snsapi_userinfo),

  • 引導關注者開啟如下頁面:

1
2
https://open.weixin.qq.com/connect/oauth2/authorize?appid= `APPID` &redirect_uri= `REDIRECT_URI` &response_type=code&scope=SCOPE&state=STATE#wechat_redirect 
(若提示“該連結無法訪問”,請檢查引數是否填寫錯誤,是否擁有scope引數對應的授權作用域許可權。)
  • 引數說明:
    引數說明
  • 使用者同意授權後
    • 如果使用者同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。若使用者禁止授權,則重定向後不會帶上code引數,僅會帶上state引數redirect_uri?state=STATE
    • code說明 : code作為換取access_token的票據,每次使用者授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。
  • 將該連結回覆給關注使用者,使用者點選後,彈出應用授權介面
    授權介面

第二步:通過code換取網頁授權access_token

  • 首先請注意,這裡通過code換取的網頁授權access_token,與基礎支援中的access_token不同。公眾號可通過下述介面來獲取網頁授權access_token。

  • 如果網頁授權的作用域為snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。

  • 獲取code後,請求以下連結獲取,請求方法:GET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
access_token:  https://api.weixin.qq.com/sns/oauth2/access_token?appid= `APPID` &secret=SECRET&code= `CODE` &grant_type=authorization_code

``` 

* 引數說明
  ![引數說明](/images/categories/wechat/2018/03/0320_04.png)

* 返回說明

```JS
正確時返回的JSON資料包如下:
{

  "access_token":"ACCESS_TOKEN",

   "expires_in":7200,

  "refresh_token":"REFRESH_TOKEN",

   "openid":"OPENID",

   "scope":"SCOPE"

}
  • 返回引數說明
    返回引數說明

  • 錯誤時微信會返回JSON資料包如下(示例為Code無效錯誤):

    • {“errcode”:40029,”errmsg”:”invalid code”}

第三步:重新整理access_token(如果需要)(一般是不會用到這一步的)(忽略)

  • 由於access_token擁有較短的有效期,當access_token超時後,可以使用refresh_token進行重新整理,refresh_token擁有較長的有效期(7天、30天、60天、90天),當refresh_token失效的後,需要使用者重新授權。

  • 請求方法:GET

  • 獲取第二步的refresh_token後,請求以下連結獲取access_token:

1
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid= `APPID` &grant_type=refresh_token&refresh_token= `REFRESH_TOKEN`
  • 引數說明:
    引數說明

  • 返回說明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
正確時返回的JSON資料包如下:
{

  "access_token":"ACCESS_TOKEN",

   "expires_in":7200,

  "refresh_token":"REFRESH_TOKEN",

   "openid":"OPENID",

   "scope":"SCOPE"

}
  • 返回引數說明
    返回引數說明

  • 錯誤時微信會返回JSON資料包如下(示例為Code無效錯誤):

    • {“errcode”:40029,”errmsg”:”invalid code”}

第四步:拉取使用者資訊(需scope為snsapi_userinfo)

  • 如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取使用者資訊了。
  • http:GET(請使用https協議)
1
https://api.weixin.qq.com/sns/userinfo?access_token= `ACCESS_TOKEN` &openid= `OPENID` &lang=zh_CN
  • 引數說明
    引數說明

  • 返回說明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
正確時返回的JSON資料包如下:
{

   "openid":" OPENID",

   " nickname": NICKNAME,

   "sex":"1",

   "province":"PROVINCE"

   "city":"CITY",

   "country":"COUNTRY",

    "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",

     "privilege":[

     "PRIVILEGE1"

     "PRIVILEGE2"

    ],

    "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"

}
  • 返回引數說明
    返回引數說明

  • 錯誤時微信會返回JSON資料包如下(示例為openid無效):

    • {“errcode”:40003,”errmsg”:”invalid openid “}