<?php
class wx{
private $appid = '';
private $secret = '';
private $re_url = '';
private $state = 'state';
private $access_token = '';
private $openid = '';
public function __construct()
{
}
public function get_code()
{
$this->get_state();
$url = 'https://open.weixin.qq.com/connect/qrconnect?appid='.$this->appid.'&redirect_uri='.urlencode($this->re_url).'&response_type=code&scope=snsapi_login&state='.$_SESSION[$this->state].'#wechat_redirect';
header('Location: '.$url);
}
public function get_info($code,$state){
$this->get_access_token($code,$state);
$userinfo = $this->get_user_info();
return $userinfo;
}
public function get_access_token($code,$state)
{
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appid.'&secret='.$this->secret.'&code='.$code.'&grant_type=authorization_code';
$result = json_decode($this->_curl_get_content($token_url),true);
$this->access_token = $result['access_token'];
$this->openid = $result['openid'];
}
public function get_user_info()
{
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$this->access_token.'&openid='.$this->openid;
$info = json_decode($this->_curl_get_content($url), TRUE);
$info1['name'] = $info['nickname'];
$info1['sex'] = $info['sex'];
$info1['img'] = $info['headimgurl'];
$info1['openid'] = $info['openid'];
$info1['unid'] = $info['unionid'];
return $info1;
}
private function _curl_get_content($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
private function get_state() {
$str = str_shuffle('qazxswedcvfrtgbnhyujmkiol123456789') . time();
$_SESSION['state'] = md5(md5($str));
}
private function is_state($state) {
if($state!==$_SESSION[$this->state]){
exit('随机数检验失败,疑似csrf攻击');
}
}
}