首先,我建議各位列印一份微信官方的「
網頁授權擷取使用者基本資訊」文檔,但是不要閱讀它。燒掉它,這有重要的象征意義。

一個位于微信内置浏覽器内的網頁要擷取使用者基本資訊,首先要擷取任意一個使用者對其應用的所謂「openid」(其實應該叫「private id」,因為同一個使用者在每個應用裡的這個 ID 都不一樣)。這個可以通過隻能擷取到「openid」的
snsapi_base
授權得到。然後,将使用者重定向于以下位址:
url_fmt = '''
https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}
&redirect_uri={redirect_uri}?userid={userid}
&response_type={response_type}&scope={scope}&state={state}
'''.replace('\n', '')
scope
當然是
snsapi_userinfo
,其它參數自己填。
redirect_uri
最好通過
urllib.parse.quote
編碼一下,雖然好像不編碼也可以用。利用
url_fmt.format_map
或者
url_fmt.format
方法把參數填進去,重定向之後,微信就會彈出授權提示頁面了。
記住,一定要用我這裡給出的格式,不要按标準 URL 參數處理方法使用
urllib.parse.urlencode
方法構造參數部分,因為這個微信授權 URL 裡的參數順序是重要的。具體規則不清楚,大概是
appid
一定要在
redirect_uri
前邊,
scope
和
response_type
一定要在其後邊。反正你按我這裡給出的格式填就對了。
很奇怪為什麼不能使用标準 URL 參數處理函數麼?那我還告訴你,給微信接口傳 JSON 時,标準 JSON Unicode 轉義
\uXXXX
是無效的。