第一步:调起微信授权页面
public function wxLogin(){
//1.调起授权页面
$appid=self::APPID;
$redirect_uri=urldecode("http://微信后台配置的js安全 域名/Index/getWxinfo.html"); //微信后台配置的回调地址
$url_sq="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid
."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
echo "<script>";
echo " window.location.href = '$url_sq' ";
echo "</script>";
}
第二步:用户同意授权后,跳转到$redirect_uri指向的方法
public function getWxinfo(){
$appid=self::APPID;
$secret=self::APPSCRIPT;
$code=$_GET['code']; //微信回传的参数
$state=$_GET['state']; //微信回传的参数
$url_getAStoken="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid
."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
$result_astoken = $this->curl_file_get_contents($url_getAStoken);
$aa=json_decode($result_astoken, true); //返回结果转成数组
//拉取用户信息,获取access_token
$access_token=$aa['access_token'];
//如果access_token失效,重新拉取
$openId=$aa['openid'];
//带着参数,请求获取用户信息的接口
$url_getInfo="https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openId."&lang=zh_CN";
$bb=$this->curl_file_get_contents($url_getInfo);
$wx_info=json_decode($bb, true);
unset($wx_info['privilege']);
$cc=M("ly_user")->where(array("openid"=>$wx_info['openid']))->find();
if(empty($cc)){
$wx_info['nickname']=$this->removeEmoji($wx_info['nickname']); //处理微信名
$saveid=M("ly_user")->add($wx_info); //保存到数据库
$userinfo['uId']=$saveid;
}else{
$userinfo['uId']=$cc['id'];
}
$userinfo['open_id']=$wx_info['openid'];
session("front_user",$userinfo); //保存登录信息到session
$this->redirect(U('Index/index')); //跳转页面
}
//通过正则去掉用户名的emoji表情,否则存入数据库报错
public function removeEmoji($nickname)
{
$nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
$nickname = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
$nickname = str_replace(array('"', '\''), '', $nickname);
return addslashes(trim($nickname));
}