收藏
回答

微信小程序登录,拿Access Token后拿unionid,总是提示40001错误,是怎么回事?

access_token =get_fuwuhao_access_code_token(appid, secret)
# 获取用户信息
user_info_url = f"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN"
user_info_response = requests.get(user_info_url)
user_info = user_info_response.json()
print("user_info=", user_info)

供调用的get_fuwuhao_access_code_token(appid, secret)函数:
def get_fuwuhao_access_code_token(appid, secret):
    global access_token_cache
    current_time = int(time.time())
    # 检查access_token是否过期
    if access_token_cache['access_token'] and access_token_cache['expires_time'] > current_time:
        return access_token_cache['access_token']
    # Access Token已过期,重新请求
    url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"
    response = requests.get(url)
    data = response.json()
    if "access_token" in data:
        access_token_cache['access_token'] = data['access_token']
        # Token的有效期为7200秒
        access_token_cache['expires_time'] = current_time + data['expires_in'] - 200  # 提前200秒请求
        print("Access Token:为什么会有两次???", access_token_cache['access_token'])
        return access_token_cache['access_token']
    else:
        print(f"Error getting access token: {data}")
        return None

输出:
Access Token:为什么会有两次??? 85_hnWbFNovs2Ka8igUyTXVGSU2*****XsDKdzztBsGLZfADANSG
user_info= {'errcode': 40001, 'errmsg': 'invalid credential, access_token is invalid or not latest, rid: 6711f741-3aa94e06-51bc0419'}
老是报这个40001的错误,说access_token无效或不是最新的。我想拿登录小程序的用户的unionid,是哪里有问题吗?能帮我改改吗?谢谢
回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    2024-10-18

    你好,提供下返回的rid

    2024-10-18
    有用 1
    回复 4
  • A阿乐
    A阿乐
    2024-10-18
    谢谢回复,只是没看懂啊。红框里的内容,也看不懂。 然后我的 40001错误,是get_fuwuhao_access_code_token(appid, secret)函数里,哪一句写错了吗?谢谢
    


    2024-10-18
    有用
    回复 1
    • 风清雾散云开见日出
      风清雾散云开见日出
      2024-10-18
      你这个获取用户信息是在小程序的webview中调用公众号的H5网页吗
      2024-10-18
      回复
  • 风清雾散云开见日出
    风清雾散云开见日出
    2024-10-18

    你确定没这个是微信小程序登录并获取用户信息,

    2024-10-18
    有用
    回复 4
    • A阿乐
      A阿乐
      2024-10-18
      # 获取用户信息
          user_info_url = f"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN"
          user_info_response = requests.get(user_info_url)
          user_info = user_info_response.json()

          print("in denglu_get_wechat_session_for_unionId,  user_info=", user_info)
      我也用的这个url,获取unionid,不知道为何老过期
      2024-10-18
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2024-10-19回复A阿乐
      你如何确定你的这个token是最后刷新的那个token
      2024-10-19
      回复
    • A阿乐
      A阿乐
      2024-10-19回复风清雾散云开见日出
      谢谢回复,chatgpt给我的代码,只判断是否大于当前时间,似乎确实有些不妥。那要怎么办呢?把所有的 access_token_cache 都存数据库,然后按照过期时间排序,取最新的那个,可行吗?谢谢
      2024-10-19
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2024-10-19回复A阿乐
      最简单的方法就是把token存在数据库中,每次获取token就更新下,然后从数据库中读取这个token判断是否超时过期,没过期就使用,过期就通过api获取
      2024-10-19
      回复
  • 路人
    路人
    2024-10-18

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

    2024-10-18
    有用
    回复
登录 后发表内容