2010-11-15 6 views
3

Je crée une application web rapide qui doit envoyer un message créé par php à partir du code PHP. cURL est apparemment l'outil pour le travail, mais j'ai du mal à le comprendre assez pour le faire fonctionner.Demande simple GET avec PHP cURL pour envoyer un SMS

La documentation de l'API à laquelle j'ai affaire est here. En particulier, je veux utiliser la notification SMS basée sur GET simple documentée here. La dernière ressource indique que l'API GET est simplement:

http://sms2.cdyne.com/sms.svc/SimpleSMSsend?PhoneNumber={PHONENUMBER}&Message={MESSAGE}&LicenseKey={LICENSEKEY} 

Et en effet, si je tape l'URL suivante dans un navigateur, je reçois les résultats escomptés:

http://sms2.cdyne.com/sms.svc/SimpleSMSsend?PhoneNumber=15362364325&Message=mymessage&LicenseKey=2134234882347139482314987123487 

Je suis maintenant en train de créer le même effet au sein de php. Voici ma tentative:

<html> 
<body> 
<?php 
$num = '13634859126'; 
$message = 'some swanky test message'; 

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://sms2.cdyne.com/sms.svc/SimpleSMSsend?PhoneNumber=".urlencode($num)."&Message=".urlencode($message)."&LicenseKey=2345987342583745349872"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
?> 
</body> 
</html> 

Mes autres pages Web PHP fonctionnent très bien, donc je sais php et apache sont tous mis en place correctement. Mais quand je pointe mon navigateur sur la page ci-dessus, je n'obtiens aucun message sur mon téléphone. Quelqu'un peut-il me montrer ce que je fais mal?

Remarque: tous les nombres sont faussés ... comme vous pourriez l'avoir suspecté.

+0

Exécutez-vous votre serveur localement? Vous pourriez ne pas permettre à Apache la possibilité de se connecter à Internet plus large. –

+0

Avez-vous essayé de brancher cet URI dans un navigateur Web pour voir si cela fonctionne d'abord? – webbiedave

+0

Berryman: quelle est la réponse que vous avez reçue? – ajreal

Répondre

9

Avez-vous vraiment besoin de CURL? Vous utilisez simplement file_get_contents($url) de PHP, qui fera une demande GET et retournera la valeur de la réponse.

+0

Choisi comme réponse parce que cela a fonctionné et c'était facile ... alors merci! Bien que c'était lent. J'imagine qu'il y a encore une façon plus intelligente de faire cela qui n'implique pas d'arrêter jusqu'à ce que le message SMS soit envoyé. Cela implique-t-il un ajax à part entière? – JnBrymn

0

En supposant que vous formez l'URL correctement et comme un commentaire dit vérifier manuellement dans un navigateur, je ne sais pas où vos données va quand il revient alors essayez

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // tell the return not to go to the browser 

    $output = curl_exec($ch); // point the data to a variable 

    print "<br />"; // output the variable 
    print $output; 
    print "<br />"; 

Autres choses à essayer sont

 curl_setopt($ch, CURLOPT_INTERFACE, "93.221.161.69"); // telling the remote system where to send the data back 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); // pretend you are IE/Mozilla in case the remote server expects it 
    curl_setopt($ch, CURLOPT_POST, 1); // setting as a post 
+0

C'est probablement la prochaine étape, mais comme il ne reçoit pas de message texte, le GET n'est probablement même pas exécuté, donc pas de données à revenir. – AndreKR

+0

Pas de sortie à l'écran, pas de message sur mon téléphone. Est-il possible que quelque chose ne va pas avec mon code ci-dessus? Je ne comprends pas assez PHP à ce stade pour savoir à quoi s'attendre. – JnBrymn

1

S'il n'y a pas de sortie de retour, le cURL échoue probablement. Vérifiez le code d'erreur de la ressource renvoyée pour déterminer la cause de l'erreur.

$result=curl_exec($ch); 
$curlerrno = curl_errno($ch); 
curl_close($ch); 
print $curlerrno; 

La liste des codes d'erreur: libcurl-errors

Je conseille d'utiliser les paramètres de délai d'attente cURL trop:

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5); 
curl_setopt($ch,CURLOPT_TIMEOUT,5);