PHP实现vivo小游戏授权登录
private $app_id='小游戏的AppId';
private $app_secret='小游戏的AppSecret';
#通过code获取access_token
public function get_access_token($code){
$param['timestamp'] = floor(microtime(true)*1000);//毫秒
$param['nonce'] = md5(uniqid());
$param['client_id'] = $this->app_id;
$param['code'] = $code;
$param['grant_type'] = 'authorization_code';
$signStr = $this->getSign($param);
$sign = md5($signStr.$this->app_secret);
$url = "https://passport.vivo.com.cn/oauth/2.0/access_token?$signStr&sign=$sign";
//CURL也好,file_get_contents也好,能访问到就行
$contents=file_get_contents($url);
return json_decode($contents,true);
}
#获取排序加密前的字符串
public function getSign($param){
ksort($param);
$hash_data ='';
foreach($param as $k=>$v){
if($hash_data != ''){ $hash_data .= '&'; }
$hash_data .= $k.'='.urlencode($v);
}
return $hash_data;
}
public function get_user_info($access_token){
$param['client_id'] = $this->app_id;
$param['access_token'] = $access_token;
$param['nonce'] = md5(uniqid());
$param['timestamp'] = floor(microtime(true)*1000);//毫秒
$signStr = $this->getSign($param);
$sign = md5($signStr.$this->app_secret);
$param['sign']=$sign;
$url = "https://passport.vivo.com.cn/oauth/2.0/resource?$signStr&sign=$sign";
$contents=file_get_contents($url);
return json_decode($contents,true);
}
public function index(){
$code=input('code');
#通过code获取access_token
$response= $this->get_access_token($code);
if (empty($response['state']) || $response['state']!=200) {
return error(300, '状态码:'.$response['state']);
}
#通过access_token获取用户信息
$info=$this->get_user_info($response['access_token']);
if (empty($info['state']) || $info['state']!=200) {
return error(301, '状态码:'.$info['state']);
}
$openid = $info['openid'];#openid
$avatar = $info['avatar'];#头像链接
$nickname = $info['nickname'];#vivo账号的昵称
#todo 继续其他业务
}







网友评论