2010-05-30 5 views
1

J'ai mis en place un formulaire Wufoo avec des portions admin qui n'apparaitront que si je suis connecté. J'ai lu le Wufoo API documentation et je peux obtenir l'authentification pour fonctionner, mais quand j'essaie d'accéder au formulaire Après m'être authentifié, il est dit que je dois m'authentifier. Voilà ce que j'ai jusqu'à présent (sous-domaine, forme clé api & id changé)Problème d'authentification avec Wufoo

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$curl1 = curl_init('http://fishbowl.wufoo.com/api/v3/users.xml'); 
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl1, CURLOPT_USERPWD, 'AOI6-LFKL-VM1Q-IEX9:footastic'); 
curl_setopt($curl1, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($curl1, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl1, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($curl1, CURLOPT_USERAGENT, 'Wufoo Sample Code'); 

$response = curl_exec($curl1); 
$resultStatus = curl_getinfo($curl1); 

if($resultStatus['http_code'] == 200) { 
    echo 'success!<br>'; 
} else { 
    echo 'Call Failed '.print_r($resultStatus); 
} 

$curl2 = curl_init("http://fishbowl.wufoo.com/api/v3/forms/w7x1p5/entries.json"); 
curl_setopt($curl2, CURLOPT_HEADER, 0); 
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1); 
$response = curl_exec($curl2); 
curl_close ($curl2); 
echo $response; 

curl_close($curl1); 

?> 

Peu importe si je ferme $curl1 avant ou après que j'appelle $curl2, je reçois le même message sur mon écran:

success!

You must authenticate to get at the goodies.

et je sais que l'API, le sous-domaine et l'ID de formulaire sont tous corrects.

Et une dernière question bonus ... puis-je faire tout cela en utilisant Ajax à la place? - La page sur laquelle je vais afficher le formulaire sera déjà limitée à l'accès administrateur, donc l'exposition de l'API ne devrait pas avoir d'importance.

Répondre

2

Ok, j'ai fait quelques recherches.

Voici la chose, vous devez vous authentifier pour chaque appel que vous voulez faire à l'API. J'ai remarqué que dans l'URL que vous avez utilisé (http://fishbowl.wufoo.com/api/v3/users.xml), vous avez utilisé http mais l'API vous oblige à utiliser https. Vous n'obtiendrez que le message You must authenticate to get at the goodies. si vous tentez d'accéder via le protocole HTTP normal. Pour votre deuxième appel, vous devez vous ré-authentifier à nouveau.

Votre code devrait alors ressembler à:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$curl1 = curl_init('https://fishbowl.wufoo.com/api/v3/users.xml'); 
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl1, CURLOPT_USERPWD, 'AOI6-LFKL-VM1Q-IEX9:footastic'); 
curl_setopt($curl1, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($curl1, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl1, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($curl1, CURLOPT_USERAGENT, 'Wufoo Sample Code'); 

$response = curl_exec($curl1); 
$resultStatus = curl_getinfo($curl1); 

if($resultStatus['http_code'] == 200) { 
    echo 'success!<br>'; 
} else { 
    echo 'Call Failed '.print_r($resultStatus); 
} 

$curl2 = curl_init("https://fishbowl.wufoo.com/api/v3/forms/w7x1p5/entries.json"); 
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl2, CURLOPT_USERPWD, 'AOI6-LFKL-VM1Q-IEX9:footastic'); 
curl_setopt($curl2, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($curl2, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl2, CURLOPT_FOLLOWLOCATION, false); 
curl_setopt($curl2, CURLOPT_USERAGENT, 'Wufoo Sample Code'); 
$response = curl_exec($curl2); 
curl_close ($curl2); 
echo $response; 

curl_close($curl2); 

?> 

En ce qui concerne votre question sur tous ces être fait en AJAX, il est impossible à l'heure actuelle parce que Wufoo ne supporte pas les callbacks JSONP (qui permettent interdomaine des requêtes AJAX). (Si vous ne savez pas de quoi je parle, lisez this other SO question) Cependant, si vous voulez brancher cette fonctionnalité dans AJAX, vous pouvez faire un appel AJAX à votre script PHP sur le serveur local. Le script PHP va faire quelque chose comme ce qui précède, en s'authentifiant avec Wufoo.

+0

Salut sirhc! Merci pour votre réponse, malheureusement, mon hébergeur gratuit a défini le mode sans échec, donc je ne peux pas accéder à des URL sécurisées. Mais votre réponse fonctionne pour moi si j'utilise 'http: //' mais apparemment je ne suis toujours pas autorisé à voir les données de l'administrateur seulement; Cependant, je reçois les données publiques maintenant. Donc, merci! ... Je suppose que je dois aller à la recherche d'un autre site d'hébergement php gratuit qui n'a pas défini le mode sans échec. – Mottie

+0

Hmmm, en fait j'ai vérifié mon service d'hébergement et le mode sans échec est désactivé ... quand j'utilise 'https: //' la page ne termine jamais le chargement. Et si je mets 'CURLOPT_FOLLOWLOCATION' à true, j'obtiens cette erreur:' curl_setopt() [fonction.curl-setopt]: CURLOPT_FOLLOWLOCATION ne peut pas être activé quand dans safe_mode ou un open_basedir est défini dans ... ' – Mottie

+0

Désolé, il y avait un typo ci-dessus où j'ai utilisé '$ curl1' au lieu de' $ curl2'. Cela peut être dû au fait que ces options ne sont pas définies, c'est pourquoi il ne revient pas. :) – sirhc