zoukankan      html  css  js  c++  java
  • 微信 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

     声明:是已认证的服务号

    这个问题已解决!!

    前置说明

    网页授权获取用户基本信息:两种 scope 域

    https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=ok#wechat_redirect

    snsapi_base 不需要用户点同意,直接跳转到授权后的页面,只能用于获取openid,不能获取用户基本信息

    snsapi_userinfo 会征求用户同意,授权后,可以获取用户基本信息

    为了方便大家理解,把接口返回的数据展示下吧

    {

        "access_token":"YNTxefBAfNW565Q4MAI..................j-hLNzin9Vq6BnvcvJ8NKHdBSRhkLjHQliLiNQc",

        "expires_in":7200,

        "refresh_token":"EYmfmvUg0PGtOWiLpb..................T8O2UyKL95_Da23fLV-nYFDgnt14Ljl_x_zCMY",

        "openid":"oYbGRs8MmU6bESxXcX2Z0rFRivjQ",

        "scope":"snsapi_base"

    }

    {

        "access_token":"IdFXvRMq3J6vXUcZ0iQ..................G1xbkGJEnbnSKQ4G0nyQ5vmNSKF4a4DzGu64",

        "expires_in":7200,

        "refresh_token":"J8ot4JWphxwvyAY3I9r..................krET6P-8dot_-_tQfFoLUQI3EI-NT-I-degNRGumA",

        "openid":"oYbGRs8MmU6bESxXcX2Z0rFRivjQ",

        "scope":"snsapi_userinfo"

    }

    问题再现

    1  首次使用 scope=snsapi_base 进行网页授权

    2  拿到 code 后调用接口 https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code

    3  根据上一步获取的 openid 和 access_token 调用接口 https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN 获取用户基本信息

    4  获取失败:返回 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

    失败原因

    scope=snsapi_base 时,只能用于获取openid,不能获取用户的基本信息(获取用户信息,需要用户同意。scope=snspai_base 授权时,并没有征求用户同意授权这一操作)

    问题来了

    (有时候成功,有时候失败)

    为什么有的时候(或者另外一个公众号),按上面的步骤,能成功获取到用户的基本信息?

    “48001,api unauthorized”之所以让很多人迷惑不解,就在于这个问题

    先直接上解决方式,再说原因

    使用 scope=snsapi_userinfo 进行一次网页授权,步骤跟上面【问题再现】一样,成功获取到用户的微信基本信息。

    再使用 scope=snsapi_base 重复一遍【问题再现】,这次成功了!!!

    原因

    上面的实验其实已经说明原因了,怕有些人一下子理解不了,所以

    第一次使用 scope=snsapi_base,这是不需要经过用户同意的授权,不能获取用户的基本信息

    第二次使用 scope=snsapi_userinfo,这是需要用户点击同意的授权,能获取到用户的基本信息

    使用 scope=snsapi_userinfo,用户同意授权后,在一定时间内,不需要用户的同意,也可以获取用户基本信息(此时使用 scope=snsapi_base 也能获取到用户基本信息:甚至参数openid的值随便填都没关系,可以是空格,但不能为空)

    注意

    使用 scope=snsapi_userinfo,用户同意授权后,access_token 的有效期是7200秒(两小时)。

    access_token 失效后,可以使用 refresh_token 调用接口 https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1} 重新获取 access_token(有效期7200秒)

    (终于知道 refresh_token 是干嘛用的了吧)

    refresh_token 的有效期是30天,即用户同意授权后,在30天内,不再需要用户同意授权,就可以获取用户基本信息

  • 相关阅读:
    Unity文件操作路径
    自定义协议封装包头、包体
    完全卸载删除gitlab
    shell脚本报错:syntax error: unexpected end of file
    Shell脚本创建的文件夹末尾有两个问号怎么回事?
    您与此网站之间建立的连接并非完全安全
    linux 查看磁盘文件大小
    mysql连接问题
    Linux查看当前开放的端口
    本地Linux备份服务器[Client]定期备份云服务器[Server]上的文件(下)
  • 原文地址:https://www.cnblogs.com/gaosf/p/11206060.html
Copyright © 2011-2022 走看看