准备
首先你要有一个公众号,类型为服务号,还有一个外网可访问的域名(如果要映射公网服务器,需备案)。获取openid需要的公众号的 appid 和 secret(登录微信公众平台,在【开发】——>【基本配置】中的开发者ID(AppID)和 开发者密码(AppSecret)就是)。其次是设置网页授权域名(登陆微信公众平台,在【设置】——>【公众号设置】——>【功能设置】——>网页授权域名中按步骤操作并设置就好),这个域名就是你获取openid的web项目发布的域名,这里注意服务器请一定跑在80端口。
参考代码
function getOpenID(){ header("Content-Type: text/html;charset=utf-8"); $appid = 'appid'; $appsecret = 'secret'; $code = $_GET['code']; //第一步:取得openid $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"; $oauth2 = $this->http_curl($oauth2Url); //accestoken $access_token = $oauth2["access_token"]; //openid $openid = $oauth2['openid']; //第二步:根据全局access_token和openid查询用户信息 $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $userinfo = $this->http_curl($get_user_info_url); return $openid; } public function getCode(){ //基本配置 $appid='appid'; $redirect_uri=urlencode("https://www.xxxx.com/Home/Test/getOpenID"); $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect"; header("location:".$url); } function http_curl($url){ //用curl传参 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //关闭ssl验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch,CURLOPT_HEADER, 0); $output = curl_exec($ch); curl_close($ch); return json_decode($output, true); }
这个就是请求完微信后 微信重定向后访问的格式
https://www.xxxxxx.com/Home/Test/getOpenID?code=071jdyFa1c9Z1A0eaaGa1Y4K9W3jdyFf&state=123
备注
网页授权域名设置如果与提交的回调地址的域名不对应,微信是无法回调到的。
单纯的获取openid使用的授权方式是静态授权,不需要经过用户许可的(用户看不到授权的过程),而想要获取用户的头像昵称等信息是另一种授权(用户端会弹出授权窗口)。
授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为:www.qq.com,
配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行鉴权。
但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行鉴权。
这里我们填写我自己论坛的一个域名为 www.weixintuo.com。
可能是配置错误
如
错误配置:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&scope=snsapi_userinfo&response_type=code&state=STATE#wechat_redirect
正确的配置:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
原因就是scope的位置不一样!!!
当 scope 为 snsapi_base的时候没有影响。但是scope为snsapi_userinfo 就会提示 scope参数错误或没有scope权限
全局返回码说明如下:
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Global_Return_Code.html
关于网页授权回调域名的说明
此篇文章由DurkBlue发布,撰文不易,转载请注明来处