Yahoo php sdk getContacts () fonctionne par intermittence

J'utilise le Yahoo! Social SDK pour permettre à un utilisateur d'autoriser, puis obtenir une liste de ses contacts. J'ai configuré l'application pour permettre la lecture des données de contact et cela est vérifié lors de l'authentification.

enter image description here

L'authentification fonctionne parce que je peux le profil en utilisant getProfile() sur chaque chargement de page. Le getContacts() est le problème mais 95% du temps, il retourne false, ce qui n'est pas correct.

Est-ce que je fais quelque chose de mal avec les jetons de requête qui signifie que getContacts() n'a pas l'autorisation correcte pour s'exécuter correctement ou Yahoo a-t-il un problème de cache étrange avec cette requête? C'est encore plus difficile avec le manque de documentation de leur api et PHP, y at-il une autre nouvelle bibliothèque que je peux utiliser pour y parvenir? Je sais que c'est possible parce que je peux utiliser une version fonctionnelle sur la page web "AirBnb Invite a friend".

Ceci est le code que j'utilise, il est écrit en utilisant CodeIgniter, ce qui explique la syntaxe.

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");
    }
}
0
Mais je ne stocke que pendant 5 minutes dans les tests et cela ne fonctionne que pour la première fois, y at-il un long jeton dans Yahoo?
ajouté l'auteur Dan, source
Apparaît que vous essayez d'obtenir des contacts et le jeton stocké dans la session a probablement expiré. Vous devriez toujours vérifier par jeton expiré et demander un nouveau quand cela arrive (ou utiliser refresh_token ). De toute façon, aviez-vous envisagé d'utiliser des importateurs de contacts externes, comme OpenInviter ou CloudSponge ?
ajouté l'auteur Rael Gugelmin Cunha, source

1 Réponses

Enfin trouvé le problème après une longue recherche, presque certain qu'il y aura d'autres avec le même problème car il n'y a pas d'erreur de sortie.

Le problème était Curl dans la bibliothèque dépassant le temps d'exécution de 10 secondes, si cela arrive, il y a juste des délais et le script se termine. Il y avait des erreurs dans mon error_log mais rien à l'écran.

Si vous augmentez les délais d'attente aux lignes 65 et 66 dans YahooCurl.class.php , cela résout le problème.

  /**
   * 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);
0
ajouté