ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python实现微信公众平台网页授权登录获取用户基本信息

2022-04-22 10:01:24  阅读:196  来源: 互联网

标签:openid 网页 get python 微信 access url token https


from urllib import parse
import requests

获取access_token

appid = "wxa77a00333cd8d99a"
secret = "6f61xxxxxxxxxx"
get_access_token_url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"

access_token = requests.get(get_access_token_url).json().get("access_token")

获取微信服务器ip列表

get_server_ip_list_url = f"https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token={access_token}"
server_ip_list = requests.get(get_server_ip_list_url).json()
print("server_ip_list:", server_ip_list["ip_list"])

获取微信callback IP地址

callback_url = f"https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={access_token}"
callback_ip = requests.get(callback_url).json()
print("callback_ip_list:", callback_ip["ip_list"])

查询rid信息

rid_url = f"https://api.weixin.qq.com/cgi-bin/openapi/rid/get?access_token={access_token}"
rid_ret = requests.post(rid_url, data={"rid": "6260f2e7-2caa4faa-752c531"})
print(rid_ret.text)

scope = "snsapi_userinfo"
scope = "snsapi_base"
redirect_uri = parse.quote("http://192.168.110.10:8000")
url = f"https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={redirect_uri}&response_type=code&scope={scope}&state=STATE#wechat_redirect"
print(url)

import json
from flask import Flask, request

app = Flask(__name__)


@app.route(rule="/")
def index():
    ### 1. 获取code
    code = request.args.get("code")
    state = request.args.get("state")
    print(code, state)

    ### 2. 通过code换取网页授权access_token和用户openid
    """
    获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    """
    url = f"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code"
    access_token_openid_dict = requests.get(url).json()
    print(access_token_openid_dict)
    access_token = access_token_openid_dict["access_token"]
    refresh_token = access_token_openid_dict["refresh_token"]
    openid = access_token_openid_dict["openid"]

    ### 3. 刷新access_token(如果需要)
    """
    获取第二步的refresh_token后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
    """
    url = f"https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={appid}&grant_type=refresh_token&refresh_token={refresh_token}"
    ret = requests.get(url).json()
    print(ret)

    ##3 4. 拉取用户信息(需scope为 snsapi_userinfo)
    """
    http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
    """
    url = f"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN"
    ret = requests.get(url).text
    import json
    ret = json.loads(ret)
    print(ret)
    data = json.loads(ret.text.encode("ISO-8859-1").decode("utf-8"))  # 解决微信编码不一致问题
    print(data)

    ### 附:检验授权凭证(access_token)是否有效
    """
    http:GET(请使用https协议) https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
    """
    url = f"https://api.weixin.qq.com/sns/auth?access_token={access_token}&openid={openid}"
    ret2 = requests.get(url).json()
    print(ret2)

    return ret


if __name__ == '__main__':
    app.run(host="192.168.110.10", port="8000", debug=True)

标签:openid,网页,get,python,微信,access,url,token,https
来源: https://www.cnblogs.com/mayanan/p/16177596.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有