// 获取access_token
private function getAccessToken($url, $header)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
return curl_exec($curl);
}
// 微信授权登录
function wxAuthLogin()
{
// $param = $this->request->param();
$code = $this->frparam('code',1,'','POST');
$appid = 'appid';
$secret = 'appSecrect';
$url = "https://api.weixin.qq.com/cgi-bin/token?appid=$appid&secret=$secret&grant_type=client_credential";
try {
$header = array('Accept: application/json',);
// 获取access_token
$wx_access_token = json_decode($this->getAccessToken($url, $header), true);
$url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" . $wx_access_token['access_token'];
$data = array('code' => $code); // 请确保$code变量已经定义
$options = array(
'http' => array(
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data)
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$result = json_decode($response, true);
if ($result['errcode'] != 0) {
JsonReturn(["code" => 1, "msg" => '登录失败']);
}else{
$tel = $result['phone_info']['phoneNumber'];
$m = M('member')->find(['tel'=>$w['tel']]);
if($m){
//走登录流程
$update['logintime'] = time();
M('member')->update(array('id'=>$m['id']),$update);
$payload = [
'userId' => $m['id'],
'exp' => time() + 60, // 1小时后过期
'tel' => $tel // 自定义数据
];
$userInfo['name']=$m['username'];
$userInfo['id']=$m['id'];
$userInfo['litpic']=$m['litpic'];
$token =TokenManager::generateToken($payload);
JsonReturn(['code'=>0,'msg'=>'登录成功!','token'=>$token,userInfo=>$userInfo]);
}else{
//新增用户
//$w['username'] = getRandChar(6);
$w['username'] = '微信用户';
$w['tel'] = $tel;
$w['gid'] = 1;
$w['litpic'] = 'https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132';
$w['regtime']=time();
$r = M('member')->add($w);
if($r){
//走登录流程
$payload = [
'userId' => $r['id'],
'exp' => time() + 60, // 1小时后过期
'tel' => $tel // 自定义数据
];
$userInfo['name']=$w['username'];
$userInfo['id']=$r['id'];
$userInfo['litpic']=$w['litpic'];
$token =TokenManager::generateToken($payload);
JsonReturn(['code'=>0,'msg'=>'登录成功!','token'=>$token,userInfo=>$userInfo]);
}
}
}
} catch (Exception $exception) {
return json(["code" => 0, "msg" => $exception->getMessage()]);
}
}