微信公众号开发和网站并不太一样,主要需要使用到公众号的相关接口。因此,在开发完成没有对接公众号前,咱们可能会遇到一些错误或者说传统意义上的BUG。
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
今天第二秀为大家简单介绍一下,微信公众号开发的常见错误之一:Scope 参数错误或没有 Scope 权限。
其实出现这样的情况,比较大的可能性是权限不够。毕竟像微信公众号之初,很多订阅号还能够实现商城等更高级的功能,而现如今呢?
网上也有很多人说是因为服务号没有认证,或者是没设置网页授权域名,其实是不对。如果是没有权限或者没有认证或者是微信后台没有设置网页授权域名通常会报redirect_uri参数错误,当然订阅号和未认证服务号确实是没有权限哦。
SO,解决方案呢,最方便的就是换成微信服务号,并且申请认证。
那么,如果在微信开放平台申请的网站应用在用户授权登录获取用户信息的时候遇到Scope参数错误或没有Scope权限怎么解决:
1、登录微信开放平台(https://open.weixin.qq.com),管理中心->网站应用->查看应用详情:
(1)查看微信登录接口权限是否已获得;
(2)查看授权回调域名是否是你当前使用的域名。
2、查看代码第一步请求code的时候,使用的scope是不是调用了公众号的接口scope,公众号在进行网页授权的时候scope有两种,即snsapi_base和snsapi_userinfo
注意,在开放平台的应用,构建微信OAuth2.0授权登录的时候,scope为snsapi_login,其他地方跟公众号授权登录一模一样。详见官方文档。代码如下:
//微信开放平台获取用户信息
public function _userInfoAuth($redirect_url){
//1.准备scope为snsapi_login网页授权页面
$redirecturl = urlencode($redirect_url);
$snsapi_userInfo_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->_appid.'&redirect_uri='.$redirecturl.'&response_type=code&scope=snsapi_login&state=YQJ#wechat_redirect';
//2.用户手动同意授权,同意之后,获取code
//页面跳转至redirect_uri/?code=CODE&state=STATE
$code = $_GET['code'];
if( !isset($code) ){
header('Location:'.$snsapi_userInfo_url);
}
//3.通过code换取网页授权access_token
$curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->_appid.'&secret='.$this->_appsecret.'&code='.$code.'&grant_type=authorization_code';
$content = $this->_request($curl);
$result = json_decode($content);
//4.通过access_token和openid拉取用户信息
$webAccess_token = $result->access_token;
$openid = $result->openid;
$userInfourl = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$webAccess_token.'&openid='.$openid.'&lang=zh_CN ';
$recontent = $this->_request($userInfourl);
$userInfo = json_decode($recontent,true);
return $userInfo;
本文由第二秀网络编辑网络搜集整理并修改,如有文字或描述错误,请大家指正。