Yahoo php sdk getContacts() периодически работает

Я использую Yahoo! Социальный SDK, позволяющий пользователю авторизоваться, а затем получить список своих контактов. Я настроил приложение, чтобы разрешить чтение контактных данных, и это проверяется при аутентификации.

введите здесь описание изображения

Аутентификация работает, потому что я могу использовать профиль, используя getProfile() при каждой загрузке страницы. getContacts() - это проблема, хотя в 95% случаев он возвращает false, что неверно.

Я делаю что-то не так с токенами запроса, что означает, что getContacts() не имеет правильного разрешения для успешного запуска, или у Yahoo есть какая-то странная проблема с кэшированием этого запроса? Это еще сложнее с явным отсутствием документации от них относительно их API и php, есть ли другая новая библиотека, которую я могу использовать для достижения этой цели? Я знаю, что это возможно, потому что я могу использовать рабочую версию на веб-странице «Пригласить друга AirBnb».

Это код, который я использую, он написан с использованием CodeIgniter, поэтому синтаксис поясняется.

public function yahoo() {

    $oauthapp = new YahooOAuthApplication(DEV_OAUTH_CONSUMER_KEY, DEV_OAUTH_CONSUMER_SECRET, DEV_OAUTH_APP_ID, DEV_OAUTH_DOMAIN);

    if($this->session->userdata('yahoo_oauth_access_token')){

        $oauthapp->token = YahooOAuthAccessToken::from_string($this->session->userdata('yahoo_oauth_access_token'));

        $profile = $oauthapp->getProfile();
        $contacts = $oauthapp->getContacts(0, 1000);

        if($profile)
           print_r($profile);
        else
            echo "No profile / error";

        if($contacts)
           print_r($contacts);
        else
            echo "No contacts / error";

    }
    elseif(!$this->input->get()) {

        $request_token = $oauthapp->getRequestToken(DEV_OAUTH_DOMAIN);
        $this->session->set_userdata('request_token', json_encode($request_token));
        $redirect_url = $oauthapp->getAuthorizationUrl($request_token);

        redirect($redirect_url);
    }
    else {

        $request_token = json_decode($this->session->userdata('request_token'));
        $oauthapp->token = $oauthapp->getAccessToken($request_token, $this->input->get('oauth_verifier'));

        $this->session->set_userdata('yahoo_oauth_access_token', $oauthapp->token->to_string());

        redirect("/index/yahoo");
    }
}

person Dan    schedule 18.06.2015    source источник
comment
Похоже, что вы пытаетесь получить контакты, а срок действия токена, хранящегося в сеансе, вероятно, истек. Вы всегда должны проверять токен с истекшим сроком действия и запрашивать новый, когда это происходит (или использовать refresh_token). В любом случае, если вы рассматривали возможность использования внешних средств импорта контактов, таких как OpenInviter или CloudSponge?   -  person Rael Gugelmin Cunha    schedule 18.06.2015
comment
Но я храню его всего 5 минут или около того при тестировании, и он работает только в первый раз, есть ли длинный токен в Yahoo?   -  person Dan    schedule 19.06.2015


Ответы (1)


Наконец-то нашел проблему после долгого поиска, почти наверняка будут другие с такой же проблемой, так как у нее нет вывода ошибок.

Проблема заключалась в том, что Curl в библиотеке превышал время выполнения 10 секунд, если это произойдет, просто истечет время ожидания, и скрипт завершится. В моем error_log были ошибки, но на экране ничего не было.

Если вы увеличите время ожидания в строке 65 и 66 в YahooCurl.class.php, это устранит проблему.

  /**
   * Fetches an HTTP resource
   *
   * @param string $url    The request url
   * @param string $params The request parameters
   * @param string $header The request http headers
   * @param string $method The request HTTP method (GET, POST, PUT, DELETE, HEAD)
   * @param string $post   The request body
   *
   * @return string Response body from the server
   */
  public static function fetch($url, $params, $headers = array(), $method = self::GET, $post = null, $options = array())
  {
    $options = array_merge(array(
      'timeout'         => '10',
      'connect_timeout' => '10',
      'compression'     => true,
      'debug'           => true,
      'log'             => sys_get_temp_dir().'/curl_debug.log',
    ), $options);
person Dan    schedule 19.06.2015