根据微信授权文档结合当前需求
(php有回复功能的页面 在微信内部打开,回复时要求获取用户信息并保存,使用微信用户信息资料)
做了分类判断(呼出类与静默类)
1.在php页面进行配置(分类判断操作的php页面,还是自己的页面)
php页面(index.php)
//微信授权
$backurl = base64_encode("http://****.com/wechat_oauth_save.php?id=".$post_id);//回掉页面
$oauth_url = "https://****.com/oauth.php?scope=snsapi_userinfo&backurl=".$backurl;//分类判断
php分类判断(oauth.php) scope,与backurl
<?php
ini_set("display_errors",'Off');
error_reporting(0);
//配置微信公众好appid和appsecret
define("APPID","wx6***bc");
define("APPSECRET","983***d9ddb9");
$backurl=$_GET['backurl'];
$scope=isset($_GET['scope'])?$_GET['scope']:'snsapi_base';
//snsapi_base无提示,snsapi_userinfo有提示
if($scope=="snsapi_base")
{
$redirect_uri="http://****/oauth_back_snsapi_base.php?backurl=".$backurl;
}else
{
$redirect_uri="http://****k/oauth_back_snsapi_userinfo.php?backurl=".$backurl;
}
//微信接口
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=123#wechat_redirect";
header("Location: {$url}");
?>
2.请求微信接口获取数据
oauth_back_snsapi_base.php(静默获取)
<?php
define("APPID","wx***bc");
define("APPSECRET","983****db9");
include_once('/o*****h/memcache/memcache.php');//memcache配置
$code=$_GET['code'];//微信获取的code
$backurl=base64_decode($_GET['backurl']);
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code={$code}&grant_type=authorization_code";
$token_info=json_decode(curl($url),true);//获取openid
$openid=$token_info['openid'];
//user_info?
$access_token=curl("http://******/weixin/callback/get_access_token.php?from=ci123");
$url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid;
$uinfo=json_decode(curl($url),true);
//print_r($uinfo);exit;
M::Set('wx_'.$openid,$uinfo,3600);
$arr=parse_url($backurl);
$query=$arr['query'];
$backurl=str_replace('?'.$query,'',$backurl);
$backurl.="?op=".$openid."&".$query;
header("Location: {$backurl}");
function curl($url,$data=null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
?>
oauth_back_snsapi_userinfo.php 弹出框获取用户信息
<?php
//ini_set("display_errors",'On');
//error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors",'Off');
error_reporting(0);
define("APPID","wx6*****deabc");
define("APPSECRET","983****d9ddb9");
include_once('*****/memcache/memcache.php');
$code =$_GET['code'];//回掉带来的code
$backurl = base64_decode(trim($_GET['backurl']));
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code={$code}&grant_type=authorization_code";
$token_info=json_decode(curl($url),true);
$access_token=$token_info['access_token'];
$openid=$token_info['openid'];
$url="https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN";
$uinfo=json_decode(curl($url),true);
M::Set('wx_'.$openid,$uinfo,3600);
$arr=parse_url($backurl);
$query=$arr['query'];
$backurl=str_replace('?'.$query,'',$backurl);
$backurl.="?op=".$openid."&".$query;
header("Location: {$backurl}");//返回页面
function curl($url,$data=null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
?>
3.保存用户信息
wechat_oauth_save.php
<?php
session_start();
include_once('/***/m/inc/global.php');
include_once('/***/class_xmlrpc.php');
include_once('/****/memcache.php');
...
$openid=$_GET['op'];//授权用户的openid
$user_info = M::Get('wx_'.$openid);
$unionid = $user_info['unionid'];
$backurl = 'http://**/share_view.php?id='.$_GET['id']."#reply_content";//授权后重定向的网页
...
echo "<script>window.location.href='".$backurl."'</script>";//返回用户浏览页面