Gå til innhold

[Løst]SMS fra nettside (keyteq.no). PHP kode ligger i post.


Anbefalte innlegg

Hei.

Prøver å sette opp SMS funksjon på min nettside. Men jeg får en feilmelding når jeg trykker på send knappen. Har skjønt at det er noe galt i "function httpRequest", men jeg sliter med å forstå koden bak. Noen som kan hjelpe meg?

 

Men jeg får denne feilmeldingen:

"Warning: fsockopen() expects parameter 2 to be long, string given in /home/wXXXXXX/www/sms/sendsms.php on line 19

Response:

 

()"

 

sendsms.html

<html>
<body>
  <h1>SMS</h1>
  <form method=post action='sendsms.php'>
  <table border=0>
  <tr>
 <td>Til</td>
 <td><input type='text' name='recipient'></td>
  </tr>
  <tr>
 <td>Melding</td>
 <td><textarea rows=4 cols=40 name='message'></textarea></td>
  </tr>
  <tr>
 <td> </td>
 <td><input type=submit name=submit value=Send></td>
  </tr>
  </table>
  </form>
</body>
</html>

 

sendsms.php

<?php

########################################################
# Login informasjon til SMS Gateway
########################################################

$bbg_user = "bruker1";
$bbg_password = "passord1";
$bbg_url = "http://keyteq.no/sms/sendsms.php?";
$bbg_alias = "BBG";

########################################################
# Funksjon brukes for å sende sms melding
########################################################
function httpRequest($url){
$pattern = "/http...([0-9a-zA-Z-.]*).([0-9]*).(.*)/";
preg_match($pattern,$url,$args);
$in = "";
$fp = fsockopen("$args[1]", $args[2], $errno, $errstr, 30);
if (!$fp) {
   return("$errstr ($errno)");
} else {
	$out = "GET /$args[3] HTTP/1.1\r\n";
	$out .= "Host: $args[1]:$args[2]\r\n";
	$out .= "User-agent: Ozeki PHP client\r\n";
	$out .= "Accept: */*\r\n";
	$out .= "Connection: Close\r\n\r\n";

	fwrite($fp, $out);
	while (!feof($fp)) {
	   $in.=fgets($fp, 128);
	}
}
fclose($fp);
return($in);
}



function bbgSend($phone, $msg, $debug=false){
  global $bbg_user,$bbg_password,$bbg_url,$bbg_alias;

  $url = 'user='.$bbg_user;
  $url.= '&pass='.$bbg_password;
  $url.= '&number='.urlencode($phone);
  $url.= '&message='.urlencode($msg);
  $url.= '&alias='.$bbg_alias;

  $urltouse =  $bbg_url.$url;
  if ($debug) { echo "Request: <br>$urltouse<br><br>"; }

  //Open the URL to send the message
  $response = httpRequest($urltouse);
  if ($debug) {
	   echo "Response: <br><pre>".
	   str_replace(array("<",">"),array("<",">"),$response).
	   "</pre><br>"; }

  return($response);
}

########################################################
# Henter data fra sendsms.html
########################################################

$phonenum = $_POST['recipient'];
$message = $_POST['message'];
$debug = true;

bbgSend($phonenum,$message,$debug);

?>

Endret av eikum
Lenke til kommentar
Videoannonse
Annonse

Forkast all den koden, den er elendig.

Hvorfor bruker du fsockopen i steden for f.eks. cURL?

Regexen som brukes til å dele opp addressen vil neppe virke.

Hva er "str_replace(array("<",">"),array("<",">"),$response)" godt for?

"$fp = fsockopen("$args[1]", $args[2], $errno, $errstr, 30);"

Hvorfor er det apostrof (") rundt $args[1]?

 

PS: Les feilmeldingen, den forteller deg hva som er galt.

Lenke til kommentar

Jupp, det der er veldig dårlig.

 

Først burde du teste om du faktisk får resultat fra regexen med if (preg_match(...))

 

$bbg_url = "http://keyteq.no/sms/sendsms.php?";
$pattern = "/http...([0-9a-zA-Z-.]*).([0-9]*).(.*)/";

Og regexen din ser ut til å feile da .([0-9]*) prøver å fange fra denne delen: "/sms/..." og med * som betyr 0 eller mer vil dette gi en tom tekststreng eller null som $args[2] (ikke testet).

 

Edit: ganske -> veldig.

Endret av OIS
Lenke til kommentar

Hvis allow_url_fopen er på kan dette gjøres så enkelt som

$result = file_get_contents(sprintf('http://keyteq.no/sms/sendsms.php?user=%s&pass=%s&number=%s&message=%s&alias=%s', urlencode($user), urlencode($pass), urlencode($number), urlencode($message), urlencode($alias)));

Ellers så kan, som jeg tidligere har nevnt, f.eks. cURL benyttes, eller man kan koble til direkte med sockets.

Lenke til kommentar
  • 2 uker senere...
Hvis allow_url_fopen er på kan dette gjøres så enkelt som

$result = file_get_contents(sprintf('http://keyteq.no/sms/sendsms.php?user=%s&pass=%s&number=%s&message=%s&alias=%s', urlencode($user), urlencode($pass), urlencode($number), urlencode($message), urlencode($alias)));

Ellers så kan, som jeg tidligere har nevnt, f.eks. cURL benyttes, eller man kan koble til direkte med sockets.

Fant ut en løsning :)

Endret av eikum
Lenke til kommentar

Sånn ble scriptet :) Jeg ente opp med å konfe litt slev, slik at koden ble forstålig for alle!

 

<?php
// Brukernavn og passord til keyteq.no
$username = "brukernavn"; 
$password = "passord"; 
$path = "/sms/sendsms.php"; 
$connected = FALSE; 
$message = $_POST['melding']; 
$number = $_POST['tlf'];
$alias = "2001";
$date = date('d-m-Y');

// encodes meldingen
$message = urlencode($message); 

// Request string mot keyteq
$smsurl = 
"$path?user=$username&pass=$password&number=$number&message=$message&alias=$alias"; 

// Kobler til serveren 
$array_servers = array("keyteq.no"); 
foreach($array_servers as $server) 
{ 
 // Setter opp adressen vi ønsker å koble til 
 $connecturl = "http://$server".$smsurl; 
 if($content_array = file($connecturl))  
{ 
 $connected = TRUE; 
$content = implode("", $content_array); 
// Sjekker feilmeldinger fra keyteq.no 
 if (eregi("3",$content))  
  echo "$date: Feil! Sjekk om du har tastet riktig mobil nummer!"; 
 elseif (eregi("1",$content))  
  echo "$date: Kunne ikke sende melding!"; 
 elseif (eregi("200",$content))  
  echo "$date: Meldingen ble sendt! </br>Tlf: +47 $number </br> Melding: $message"; 

break; // breaks foreach loop 
} 
} 


if($connected == FALSE)  
{   
 // Om man ikke får koblet opp til serveren, keyteq
 echo "Kunne ikke koble til keyteq serveren. Kontakt keyteq for status."; 
} 
?>

Endret av eikum
Lenke til kommentar
  • 2 uker senere...

Hei

 

Mitt navn er Alexander Sundli-Härdig, og jeg er daglig leder i Keyteq AS.

 

Hvis noen trenger hjelp til integrasjon mot KeySMS, så har vi ferdig kildekode som vi gjerne deler ut til alle våre kunder. I tillegg, har vi utviklere som kan hjelpe til og svare på de fleste spørsmål som har med KeySMS integrasjon å gjøre.

 

Du når vår supportavdeling ved å sende e-post til [email protected]. Hvis du ønsker mer dokumentasjon, du også sjekke ut http://www.keyteq.no/kundesenter/keysms

 

Mvh

Alexander

Lenke til kommentar

Det var det vi sendte en mail å spurte om, men fikk bare en .txt fil der det ikke sto så veldig godt forklart. Eller var vell mer slik at man ikke fikk et ferdig produkt, så vi måtte søke litt rundt på nettet før vi fant en løsning som fikk dette til, etter en del endringer selvsagt.

 

Men denne koden fungerer utmerket, hvor sikker den er, aner jeg ikke.. Men gjør nytten sin i hver fall :)

 

*la med filen som vi fikk*

keysms_api.txt

Endret av eikum
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...