Задать вопрос
  • Авторизация на сайте через Одноклассники: getCurrentUser не отдаёт email?

    @ericcox Автор вопроса
    Тестирую на себе, почта точно есть
    Вот код:
    $params = array(
    				'code' => $_GET['code'],
    				'redirect_uri' => $this->okAuthFile,
    				'grant_type' => 'authorization_code',
    				'client_id' => $this->okAppId,
    				'client_secret' => $this->okSecretCode,
    				'scope' => 'GET_EMAIL',
    			);
    		    $url = 'http://api.odnoklassniki.ru/oauth/token.do';
    
    			$curl = curl_init();
    			curl_setopt($curl, CURLOPT_URL, $url);
    			curl_setopt($curl, CURLOPT_POST, 1);
    			curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
    			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    			curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    			$result = curl_exec($curl);
    			curl_close($curl);
    			$tokenInfo = json_decode($result, true);
    
    			if (isset($tokenInfo['access_token'])) {
    				if(1){ // Работает
    					$sign = md5("application_key={$this->okPublicKey}format=jsonmethod=users.getCurrentUser".md5("{$tokenInfo['access_token']}{$this->okSecretCode}"));
    					$params = array(
    						'method'          => 'users.getCurrentUser',
    						'access_token'    => $tokenInfo['access_token'],
    						'application_key' => $this->okPublicKey,
    						'format'          => 'json',
    						'sig'             => $sign,
    					);
    					$userOk = json_decode(file_get_contents('http://api.odnoklassniki.ru/fb.do?'.urldecode(http_build_query($params))), true);
    					print_r($userOk);
                                            // в том числе has_email = 1
    				}
    
    				if(0){ // Не работает
    					$sign = md5("application_key={$this->okPublicKey}fields=emailformat=jsonmethod=users.getCurrentUser".md5("{$tokenInfo['access_token']}{$this->okSecretCode}"));
    					$params = array(
    						'method'          => 'users.getCurrentUser',
    						'access_token'    => $tokenInfo['access_token'],
    						'application_key' => $this->okPublicKey,
    						'format'          => 'json',
    						'sig'             => $sign,
    						'fields'          => 'email',
    					);
    					$userOk = json_decode(file_get_contents('http://api.odnoklassniki.ru/fb.do?'.urldecode(http_build_query($params))), true);
    					print_r($userOk); //Выдает только uid
    				}
    			}