关注微信微信官方账号如何获取用户信息以及OpenID与手机号的绑定。
1.登录微信公众平台设置所需菜单,以绑定微信账号为例。
2.网址填写自己的接口地址或跳转地址。
3.后台界面(php仅供参考)
两个红圈的地址是这个接口的地址,这个可以获取用户的openid,下面这个接口是用户的openid和手机号进行绑定。
请参考下面的官方微信文档。
如果用户在微信客户端访问第三方网页,微信官方账号可以通过微信网页授权机制获取用户的基本信息,进而实现业务逻辑。
网页授权回调域名描述
1.微信微信官方账号请求用户网页授权前,开发者需要在公众平台官网“开发-接口权限-网页服务-网页账号-网页授权获取用户基本信息”的配置选项中修改授权回调域名。请注意,这里填写的是域名(是字符串),不是网址,所以请不要添加http://之类的协议头;
2.授权回调域名的配置规范是全域名,比如需要网页授权的域名是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认证
3.如果微信官方账号登录授权给第三方开发者进行管理,则不需要进行任何设置,第三方可以替换微信官方账号实现网页授权。
两种网页授权范围的区别说明
1.以snsapi_base为作用域发起的网页授权用于获取进入页面的用户的openid,并且是静默授权,自动跳转到回调页面。用户感知到的是直接进入回拨页面(往往是业务页面)。
2.以snsapi_userinfo为范围发起的网页授权用于获取用户的基本信息。但这种授权需要用户手动同意,而且既然用户已经同意,授权后就可以获取用户的基本信息,不用担心。
3.用户管理界面中的“获取用户基本信息界面”是指用户只有在与微信官方账号进行消息交互或关注后事件推送后,才能根据用户的OpenID获取用户基本信息。这个接口,包括其他微信接口,都需要用户(即openid)关注微信官方账号,才能调用成功。
关于网页授权access_token和普通access_token的区别
1.微信网页授权是通过OAuth2.0机制实现的。用户对微信官方账号进行授权后,微信官方账号可以获得网页授权独有的接口调用凭证(网页授权access_token),可以通过网页授权access_token进行授权后的接口调用,比如获取用户的基本信息;
2.其他微信接口,普通的access_token调用需要通过基础支持中的“get access_token”接口获取。
关于UnionID机制
1.请注意,获取用户基本信息的网页授权也遵循UnionID机制。即开发者如果需要统一多个微信官方账号中的用户账号,或者微信官方账号与移动应用之间的用户账号,需要先去微信开放平台(open.weixin.qq.com)绑定微信官方账号,才能使用UnionID机制满足上述要求。
2.unionid机制的作用解释:如果开发者拥有多个移动应用、网站应用和公众账号,则可以通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一个用户在同一个微信开放平台下的不同应用(移动应用、网站应用和公众账号)都有相同的UnionID。
关于特殊场景下的静音授权
1.如上所述,对于以snsapi_base为范围的网页授权,用户是默默不知情的;
2.对于已经关注微信官方账号的用户来说,如果用户从微信官方账号的会话或者自定义菜单进入这个微信官方账号的网页授权页面,即使范围是snsapi_userinfo,也是静默授权,用户并不知情。
具体来说,网页授权过程分为四个步骤:
1.引导用户进入授权页面同意授权并获取代码。
2.网页授权access_token的交换代码(不同于基本支持中的access_token)
3.如有必要,开发者可以刷新网页授权access_token,避免过期。
4.access_token和openid由网页授权获取用户的基本信息(支持UnionID机制)
目录
步骤1:用户同意授权并获得代码。
第二步:用代码换取网页授权access_token。
3步骤3:刷新访问令牌(如有必要)
第四步:拉取用户信息(作用域应该是snsapi_userinfo)
附件:检查授权证书(access_token)是否有效。
步骤1:用户同意授权并获得代码
在保证微信公众号拥有授权范围(scope参数)权限的前提下(服务号获得高级接口后,默认在scope参数中有snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth2/authorize? Appid = Appid & redirect _ uri = redirect _ uri & response _ type = code & scope = scope & state = state # we chat _ redirect如果提示“链接无法访问”,请检查参数是否填写错误,以及您是否拥有scope参数对应的授权范围权限。
特别注意:由于授权操作的安全级别较高,在发起授权请求时,微信会对常规强匹配的授权链接进行检查。如果链接的参数顺序错误,授权页面将无法正常访问。
参考链接(请在微信客户端打开此链接体验):
范围是snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize? appid = wx 520 c15 f 417810387 & redirect _ uri = https://chong . QQ . com/PHP/index . PHP % 3Fd % 3D % 26c % 3D wx adapter % 26m % 3D mobile deal % 26 showwxpaytitle % 3D 1% 26 vb2c tag % 3D 4 _ 2030 _ 5 _ 1194 _ 60 & response _ type = code & scope = SNS API _ base & state = 123 #微信_redirect
范围是snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize? appid = wxf 0 e 81 C3 bee 622d 60 & redirect _ uri = http://NBA . blue web game . com/oauth _ response . PHP & response _ type = code & scope = snsapi _ userinfo & STATE = STATE # we chat _ redirect
特别注意:跳回redirect_uri,要用https链接保证授权代码的安全性。
参数描述
在用户同意授权之后
如果用户同意授权,页面会跳转到redirect_uri/?代码=代码&状态=状态.
代码描述:代码是一个交换access_token的账单。用户授权带上的代码每次都会不一样。密码只能使用一次,5分钟不使用自动失效。
错误返回代码描述如下:
第二步:用代码换取网页授权访问令牌
首先请注意,这里的代码是换来一个特殊的网页授权access_token,和基础支持中的access_token不同(这个access_token是用来调用其他接口的)。微信官方账号可以通过以下接口获取网页授权access_token。如果网页授权的范围是snsapi_base,那么在这一步中,我们得到了网页授权access_token以及openid,snsapi_base风格的网页授权过程到此结束。
特别注意:由于微信官方账号的secret和access_token的安全级别非常高,所以必须只能存储在服务器中,不允许传输到客户端。诸如刷新access_token和通过access_token获取用户信息之类的后续步骤也必须从服务器发起。
请求方法
获取代码后,请求以下链接以获取访问令牌:https://api.weixin.qq.com/sns/oauth2/access_token?. APPID = APPID & SECRET = SECRET & CODE = CODE & grant _ type = authorization _ CODE
参数描述
正确返回的JSON包如下:
{ & # 34;访问令牌& # 34;:"访问令牌& # 34;, & # 34;expires _ in & # 34:7200, & # 34;刷新_令牌& # 34;:"刷新_令牌& # 34;, & # 34;openid & # 34:"OPENID & # 34, & # 34;范围& # 34;:"范围& # 34; } 参数
形容{"错误代码& # 34;:40029,"errmsg & # 34:"无效代码& # 34;}
步骤3:刷新access_token(如果需要)
因为access_token有效期短,所以当access_token超时时,可以用refresh_token刷新。refresh_token的有效期为30天。当refresh_token过期时,用户需要重新授权。
请求方法
在第二步中获得刷新令牌后,请求以下链接以获得访问令牌:https://api.weixin.qq.com/sns/oauth2/refresh_token?. APPID = APPID & grant _ type =刷新令牌& refresh _ token =刷新令牌
正确返回的JSON包如下:
{ & # 34;访问令牌& # 34;:"访问令牌& # 34;, & # 34;expires _ in & # 34:7200, & # 34;刷新_令牌& # 34;:"刷新_令牌& # 34;, & # 34;openid & # 34:"OPENID & # 34, & # 34;范围& # 34;:"范围& # 34; } 参数
形容{"错误代码& # 34;:40029,"errmsg & # 34:"无效代码& # 34;}
第四步:拉取用户信息(作用域为snsapi_userinfo)
如果网页的授权范围是snsapi_userinfo,那么开发者可以通过access_token和openid拉取用户信息。
请求方法
Http:GET(请使用https协议)https://api.weixin.qq.com/sns/userinfo? ACCESS _ TOKEN = ACCESS _ TOKEN & OPENID = OPENID & lang = zh _ CN
参数描述
正确返回的JSON包如下:
{ "openid": "OPENID", "nickname": NICKNAME, "sex": 1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
参数{ & # 34;openid & # 34: "OPENID & # 34, & # 34;昵称& # 34;:昵称, & # 34;性& # 34;:1, & # 34;省& # 34;:"省& # 34;, & # 34;城市& # 34;:"城市& # 34;, & # 34;国家& # 34;:"国家& # 34;, & # 34;headimgurl & # 34:"https://thirdwx . qlogo . cn/mmopen/g3monuztnhkdmzicilib x 6 iafqac 56 vxls ufpb 6n 5 wksyvy 0 chqkkiajsgq 1 dzutogvllrhjberqq4 emsv 84 eavhiaiceqxibjxcfhe/46 & # 34;, & # 34;特权& # 34;:[ "特权1 & # 34;"特权2 & # 34;], & # 34;unionid & # 34: "o6 _ bmasdasdsad 6 _ 2s gvt 7 hmzopfl & # 34; } 参数 | 形容
headimgurl头部模型 | 用户头像,最后一个值代表正方形头像的大小(0,46,64,96,132值可选,0代表640*640正方形头像),用户没有头像时此项为空。如果用户更改头像,原头像网址将失效。
{"错误代码& # 34;:40003,"errmsg & # 34:"无效的openid & # 34}
附件:检查授权证书(access_token)是否有效
请求方法
Http:GET(请使用https协议)https://api.weixin.qq.com/sns/auth?访问令牌=访问令牌&openid=OPENID
参数描述
{ "错误代码& # 34;:0,"errmsg & # 34:"好& # 34;} 出错时JSON返回示例:
{ "errcode":40003,"errmsg":"invalid openid"}