之前做了个自定义菜单的click事件,但是订阅号升级为服务号,相应的有了网页的基础授权(需要认证的服务号)
其中使用到了自定义菜单接口:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html
网页授权获取用户基本信息接口:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
一、在接口处获取网页授权,并填写你的域名或ip(域名不需要协议 http://www.baidu.com而是www.baidu.com)
二、在自定义菜单出的url写入“第一步:用户同意授权,获取code”的url,并将redirect_uri写成你的VIEW时间点击后需要跳转的路径,如下:
{
"button": [
{
"type": "click",
"name": "图文获取",
"key": "图文"
},
{
"type": "view",
"name": "授权获取",
"url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0738856156f7323c&redirect_uri=http://www.你的网址.com&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}
]
}
三、在请求成功后返回code并用来获取openid
通过code获取openid的参数如上,即在入口文件中为:
/**
* @desc 向微信接口发送请求
**/
function getJson($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
-------------------------------------------------------------------------------------我是分割线-------------------------------------------------------------------------------------------------
但是有些时候需要页面重定向出下面的效果:
这时候就需要页面重定向:
①判断是否有$_GET['code'],若则将页面重定向到网页授权页面
$now_url ='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];//获取当前url
$judge = preg_match("/stat/" ,$now_url);//正则判断是否网页授权url
if(!$_SESSION['nowUrl'] && !$judge){ //搜索到oauth2这个词不存在时,证明这个url不是经过处理的
$_SESSION['nowUrl'] = $now_url; //生成session用于判断
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx50090139912065bd&redirect_uri=http://xxx&response_type=code&scope=snsapi_base&stat";
header("Location:$url");
}
② 经过①,页面已重定向到网页授权页面,如果你不在微信打开就会出现:请在微信客户端打开链接,如果在微信打开则如下操作:
if($_SESSION['nowUrl']){
$url = $_SESSION['nowUrl'];
unset($_SESSION['nowUrl']);
header("Location:$url"); //销毁session后跳转回去
}
这样我们就做好了微信网页授权(可避免在微信外打开)-\-\