PHP实现微信开放平台扫码登录(源码)
1、首先到微信官网开放平台申请获取到appid和APPSECRET,前台显示页面如下:
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=utf-8">
</head>
<body>
<spanid="login_container"></span>
<scriptsrc="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
<script>
varobj=newWxLogin({
id:"login_container",
appid:"wxed782be999f86e0e",
scope:"snsapi_login",
redirect_uri:encodeURIComponent("http://"+window.location.host+"/login.php"),
state:Math.ceil(Math.random()*1000),
style:"black",
href:""});
</script>
</body>
</html>
2、PHP处理代码页面
/*
require_once('weixin.class.php');
$weixin=newclass_weixin();
*/
define('APPID',"wx19ba77624e083e08");
define('APPSECRET',"c1a56a5c4247dd44c320c9719c5ceb90");
classclass_weixin
{
var$appid=APPID;
var$appsecret=APPSECRET;
//构造函数,获取AccessToken
publicfunction__construct($appid=NULL,$appsecret=NULL)
{
if($appid&&$appsecret){
$this->appid=$appid;
$this->appsecret=$appsecret;
}
//扫码登录不需要该AccessToken,语义理解需要
//1.本地写入
$res=file_get_contents('access_token.json');
$result=json_decode($res,true);
$this->expires_time=$result["expires_time"];
$this->access_token=$result["access_token"];
if(time()>($this->expires_time+3600)){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
$res=$this->http_request($url);
$result=json_decode($res,true);
$this->access_token=$result["access_token"];
$this->expires_time=time();
file_put_contents('access_token.json','{"access_token":"'.$this->access_token.'","expires_time":'.$this->expires_time.'}');
}
}
/*
*PART1网站应用
*/
/*
header("Content-type:text/html;charset=utf-8");
require_once('wxopen.class.php');
$weixin=newclass_weixin();
if(!isset($_GET["code"])){
$redirect_url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$jumpurl=$weixin->qrconnect($redirect_url,"snsapi_login","123");
Header("Location:$jumpurl");
}else{
$oauth2_info=$weixin->oauth2_access_token($_GET["code"]);
$userinfo=$weixin->oauth2_get_user_info($oauth2_info['access_token'],$oauth2_info['openid']);
var_dump($userinfo);
}
*/
//生成扫码登录的URL
publicfunctionqrconnect($redirect_url,$scope,$state=NULL)
{
$url="https://open.weixin.qq.com/connect/qrconnect?appid=".$this->appid."&redirect_uri=".urlencode($redirect_url)."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
return$url;
}
//生成OAuth2的AccessToken
publicfunctionoauth2_access_token($code)
{
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code";
$res=$this->http_request($url);
returnjson_decode($res,true);
}
//获取用户基本信息(OAuth2授权的AccessToken获取未关注用户,AccessToken为临时获取)
publicfunctionoauth2_get_user_info($access_token,$openid)
{
$url="https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$res=$this->http_request($url);
returnjson_decode($res,true);
}