网页授权获得用户基本信息

如果用户在微信中(Web 微信除外)访问第三方网页,网页的开发者可以通过此接口 获取当前用户身份信息。利用用户信息,可以实现用户来源统计、帐号绑定、用户身份鉴权 等功能。 OAuth2.0 鉴权 关于 OAuth2.0 的详细介绍,可以参考 OAuth2.0 协议标准 第三方开发者进行微信 OAuth2.0 要符合以下条件: a.拥有一个微信公众账号,并获取到 appid、secret b.微信后台配置跳转域名以及授权 scope 类型(请联系对接的商务同事)。 跳转域名配置规范为全域名: 比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面 http://www.qq.com/music.html、http://www.qq.com/login.html 都可以进行 OAuth2.0 鉴权。但 http://pay.qq.com、http://music.qq.com、http://qq.com 无法进行 OAuth2.0 鉴权。 授权流程 微信目前支持 Authorization code 授权模式,主要流程分为三步: 1、获取 code 2、通过 code 换取网页授权 accesstoken, 此 access_token 与基础支持的 access_token 不同。 3、通过 accesstoken 换取用户基本信息 流程图:实现方式: 第一步:引导需要授权的用户到如下页面地址,获取 CODE 地址说明 在确保微信公众账号拥有授权作用域(scope 参数)的权限的前提下,使用微信 客户端打开以下链接(严格按照以下格式): https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redir ect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wecha t_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有 scope 参数对 应的授权作用域权限。 参考链接(请在微信客户端中打开此链接体验) Scope 为 snsapi_base https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f41 7810387&redirect_uri=http%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd% 3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D 4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wecha t_redirectScope 为 snsapi_userinfo https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3be e622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_respons e.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_red irect

参数说明 参数 是否必 须 说明 appid 是 应用唯一标识 redirect_uri 是 重定向地址 response_type 是 填 code scope 是 应用授权作用域,只能选择一个 snsapi_base (不弹出授权页面,直接跳转,这个只能拿到用户openid) snsapi_userinfo (弹出授权页面,这个可以通过 openid 拿到昵称、性别、所在 地) state 否 重定向后会带上 state 参数,开发者可以填写任意参数值

wechat_redirect 否

直接在微信打开链接,可以不填此参数。做页面 302 重定向时 候,必须带此参数。 获得用户授权结果如果用户同意授权,页面将跳转至 redirecturi/?code=CODE&state=STATE。若用户禁止授 权,则重定向后不会带上 code 参数,仅会带上 state 参数 redirect_uri?state=STATE code 说明 : code 作为换取 access_token 的票据,每次用户授权带上的 code 将不一样,code 只能使用一 次,5 分钟未被使用自动过期。 通过 code 换取 access_token 请求方法 获取 code 后,请求以下链接获取 access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=COD E&grant_type=authorization_code 参数说明 参数 是否必须 说明 appid 是 应用唯一标识 secret 是 应用密钥 code 是 填写第一步获取的 code 参数 grant_type 是 填 authorization_code 返回说明 正确的返回: { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" } 参数 说明 access_token 接口调用凭证,注意:此 access_token 与基础支持的 access_token 不同 expires_in access_token 接口调用凭证超时时间,单位(秒) refresh_token 用户刷新 access_token openid 用户唯一标识scope 用户授权的作用域 错误返回样例: {"errcode":40029,"errmsg":"invalid code"} 刷新 access_token 由于 access_token 拥有较短的有效期,当 access_token 超时后,可以使用 refresh_token 进行 刷新,refresh_token 拥有较长的有效期(7 天、30 天、60 天、90 天),当 refresh_token 失 效的后,需要用户重新授权。 请求方法 获取第二步的 refresh_token 后,请求以下链接获取 access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant type=refresh_token&refresh_token=REFRESH_TOKEN 参数说明 参数 是否必须 说明 appid 是 应用唯一标识 grant_type 是 填 refresh_token refresh_token 是 填写通过 access_token 获取到的 refresh_token 参数 返回说明 正确的返回: { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" } 参数说明 参数 说明 access_token 接口调用凭证 expires_in access_token 接口调用凭证超时时间,单位(秒) refresh_token 用户刷新 access_token openid 授权用户唯一标识 scope 用户授权的作用域,使用逗号(,)分隔 错误返回样例: {"errcode":40029,"errmsg":"invalid code"} 通过 access_token 拉取用户信息(仅限 scope= snsapi_userinfo): http:GET https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN?acce ss_token=ACCESS_TOKEN&openid=OPENID 参数说明 参数 是否必须 说明 access_token 是 调用凭证 openid 是 普通用户的标识,对当前开发者账号唯一 返回说明 正确的 Json 返回: { "openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE" "city":"CITY", "country":"COUNTRY", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ] } 参数 说明 openid 普通用户的标识,对当前开发者账号唯一nickname 普通用户昵称 sex 普通用户个人资料填写的省份 province 用户授权的作用域,使用逗号(,)分隔 city 普通用户个人资料填写的城市 country 国家,如中国为CN privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) 错误返回样例: {"errcode":40003,"errmsg":" invalid openid "}