首先,我建议各位打印一份微信官方的「网页授权获取用户基本信息」文档,但是不要阅读它。烧掉它,这有重要的象征意义。
一个位于微信内置浏览器内的网页要获取用户基本信息,首先要获取任意一个用户对其应用的所谓「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
是无效的。