通过微信授权接口,获取用户微信账户信息
获取微信用户信息的接口
在微信开放平台中,提供了一个接口来获取用户的基本信息,这个接口是通过授权码(code)来实现的。然而,由于安全原因,微信官方已经优化了这个接口,使得需要通过`encryptedData、iv和openid`来获取用户信息。
步骤一:获取授权码
首先,我们需要让用户在微信中授权我们的应用,这样我们才能获得一个授权码(code)。授权码是临时的,有效期为10分钟。我们可以通过以下方式获取授权码:
```pythonimport requests 微信开放平台的APPID和SECRETappid = 'your_appid'
secret = 'your_secret'
用户同意授权后,我们会得到一个codecode = 'user_code'
获取tokenurl = f' = requests.get(url)
if response.status_code ==200:
token = response.json()['access_token']
else:
print('获取token失败')
```
步骤二:获取用户信息
通过授权码,我们可以获得一个`openid`,这个`openid`是唯一的,可以用来标识微信用户。我们还需要使用`encryptedData`和`iv`来获取用户信息。
```python 使用token获取用户信息url = f' = requests.get(url)
if response.status_code ==200:
user_info = response.json()
else:
print('获取用户信息失败')
```
步骤三:解密encryptedData
`encryptedData`是微信对用户信息进行加密后的数据,我们需要使用`iv`来解密它。
```pythonimport base64 解密encryptedDatadef decrypt(encrypted_data, iv):
使用AES-128-CBC算法解密 from Crypto.Cipher import AES cipher = AES.new(key=b'x00x01x02x03x04x05x06x07', mode=AES.MODE_CBC, IV=iv)
decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data))
return decrypted_data 使用token获取用户信息url = f' = requests.get(url)
if response.status_code ==200:
user_info = response.json()
else:
print('获取用户信息失败')
解密encryptedDataiv = base64.b64decode(user_info['iv'])
encrypted_data = base64.b64decode(user_info['encryptedData'])
decrypted_data = decrypt(encrypted_data, iv)
```
步骤四:处理解密后的数据
最后,我们需要将解密后的数据进行处理,得到我们想要的用户信息。
```python 处理解密后的数据def process_decrypted_data(decrypted_data):
使用json.loads()函数将字符串转换为字典 from json import loads user_info = loads(decrypted_data.decode('utf-8'))
return user_info 使用token获取用户信息url = f' = requests.get(url)
if response.status_code ==200:
user_info = response.json()
else:
print('获取用户信息失败')
解密encryptedDataiv = base64.b64decode(user_info['iv'])
encrypted_data = base64.b64decode(user_info['encryptedData'])
decrypted_data = decrypt(encrypted_data, iv)
处理解密后的数据user_info = process_decrypted_data(decrypted_data)
print(user_info)
```
总结
通过上述步骤,我们可以获取微信用户的基本信息,包括`openid、nickName、gender、language、city、province和country`等。需要注意的是,`encryptedData`和`iv`是临时的,有效期为10分钟,所以我们需要在10分钟内完成所有操作。
参考
* 微信开放平台文档: 微信开放平台API文档: