This script allows you to operate a 2-way SMS service and send ringtones, logos * -> and much more directly from your site. * * -> This script does not need any other execution rights like executing sub- * -> programs and should therefore run on almost every server supporting PHP. * * -> For outgoing SMS you will need to have a TrueSenses.com account. * -> For incoming SMS you will need to activate the keyword service for as low as * -> CHF 5.- (Swiss Francs) per keyword and month including unlimited incoming SMS. * * You will need to configure $truesenses_account,$truesenses_password and * $truesenses_origin * * This script is pre-configured to act on incoming SMS messages sent by the * TrueSenses.com SMS-Gateway. It will compare the incoming keyword and send back * the requested content. * * If you ONLY want to use this script to send messages (without 2-way service), * simply modify the MAIN program code to discard the incoming parameters provided * by the gateway: $NUMBER (origin number, international format) and $MESSAGE * * The following message-modes are supported: * * - SMS * - EMS * - EMS Images * - NOKIA Ringtones * - NOKIA Logos * - NOKIA Multipart messages (Picture Message with text) * * * In order to install the 2-way SMS script follow these steps: * * * 1. Open an account on TrueSenses.com * 2. Configure this script with your Account/Password and upload it to your server * 3. Buy some outgoing SMS credits * 4. Go to Configuration / Keyword services and add a keyword * 4.1 Click on the keyword and activate PUSH to forward incoming SMS to this script * example: http://www.[yoursitename].com/truesenses_2way.php * method: select POST method - dont forget to click on "Activated" * 4.2 Activate the keyword by clicking "Activate keyword" * 5. Your service is now up and running * * Send the following SMS to +41-79 381 60 10 or the number given by TrueSenses.com * * yourkeyword SMS * -> You will receive a SMS back to your phone. * * yourkeyword SMSFLASH * -> You will receive a flashing class 0 SMS back to your phone. * * yourkeyword NOKIARINGTONE * -> You will receive a ringtone for your NOKIA phone, downloaded from HTTP-Source. * * yourkeyword NOKIARINGTONEHEX * -> You will receive a ringtone for your NOKIA phone, included as hex-encoded. * * yourkeyword NOKIALOGO * -> You will receive an operator logo for your NOKIA phone, downloaded from HTTP- * -> source. IMPORTANT: configure the mnc and mmc settings first according to the * -> destination provider. Otherwise the logo will not show up. * * yourkeyword NOKIAMULTIPART * -> You will receive a picture message with a text for your NOKIA phone, downloaded * -> from a HTTP-source. * * yourkeyword EMSLOGO * -> You will receive a picture message for your NON-Nokia phone like SonyEricsson * -> and all other vendors who support the EMS-standard on their phones. The image * -> is by default copy protected and cannot be sent to another phone. You can de- * -> activate this by setting protected = "NO". * ************************************************************************************ */ $truesenses_account = "YourAccountName"; // TrueSenses.com Account-Name $truesenses_password = "YourPassword"; // Account-Password $truesenses_origin = "TrueSenses"; // Message-Origin, 11 alpha chars or numeric number $debug = 0; // debug-output 0 = off, 1 = on // // open a http-channel, transmit data and return received buffer function sendToHost($host,$method,$path,$data,$useragent,$poststr) { global $debug; if (empty($method)) { // default GET $method = 'GET'; } $method = strtoupper($method); $fp = fsockopen($host, 80, $errno, $errstr, 30); if (!$fp) { if ($debug == 1) { echo("Could not open connection
$errstr ($errno)
\n"); } } else { if ($method == 'GET') $path .= '?' . $data; fputs($fp, "$method $path HTTP/1.0\r\n"); fputs($fp, "Host: $host\r\n"); fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); if ($method == 'POST') { fputs($fp, "Content-Length: " . strlen($data) . "\r\n"); } else { if (strlen($poststr)>0) { // if something to POST on GET method fputs($fp, "Content-Length: " . strlen($poststr) . "\r\n"); } } if (strlen($useragent)>0) { fputs($fp, "User-Agent: $useragent\r\n"); } else { fputs($fp, "User-Agent: TrueSensesPHP\r\n"); } fputs($fp, "Connection: close\r\n"); fputs($fp, "\r\n"); if ($method == 'POST') { fputs($fp, $data); } else { // GET method if (strlen($poststr)>0) { // if something to POST on GET method fputs($fp, $poststr); } } $buf = ""; $line = ""; $chr = "0"; $contentsize = "0"; // echo("reading response\n"); while ((!feof($fp)) && (strlen($buf)<=100000) && ($chr < 500)) { // read max 100000 bytes or 500 lines $chr = $chr + 1; $line = fgets($fp, 10000); // read one line $buf .= $line; // append to buffer } $contpos = strpos(strtoupper($buf), "CONTENT-TYPE"); if ($contpos > 0) { // echo("FOUND contenttype in ::$buf::
\n"); $buf = substr($buf, $contpos, strlen($buf) - $contpos); // echo("new buffer::$buf::
\n"); // $buf = substr($buf, strpos($buf, "\n") + 1, strlen($buf) - strpos($buf, "\n")); $buf = substr($buf, 27, strlen($buf) - (27 + 1)); // assumes Content-Type: text/html (27 chars) } else { if ($debug == 1) { echo("NO contenttype found in ::$buf::
\n"); } return "ERROR"; } fclose($fp); return $buf; // return the buffer } } // sendToHost // // compose the XML-message ans transfer it to sendToHost function sendXML($destination, $origin, $middle) { global $truesenses_account; global $truesenses_password; $poststring = "\n"; $poststring .= "\n"; $poststring .= "\n"; $poststring .= "\n"; $poststring .= "\n"; $poststring .= "\n"; $poststring .= $middle; // insert middle part here $poststring .= "\n"; $sendresp = sendToHost('www.truesenses.com','get','/cgi-bin/smsgateway.cgi', "FUNCTION=EXTERN_XMLUPLOAD&ACCOUNT=$truesenses_account&PASSWORD=$truesenses_password", "", "$poststring"); return $sendresp; // return response } // sendXML // MAIN program // Look if incoming message contains a space (keyword detected) // // Incoming message will contain the full message (no keyword required) if you // are hosting a dedicated access number on TrueSenses // $pos = strpos ($MESSAGE, " "); if ($pos === false) { // no space in message detected, keyword is message $KEYWORD = "$MESSAGE"; $MSGONLY = "$MESSAGE"; } else { // space detected, extract keyword $KEYWORD = substr($MESSAGE, 0, $pos); $MSGONLY = substr($MESSAGE, ($pos + 1), (strlen($MESSAGE) - ($pos))); } if ($debug == 1) { echo("Keyword::$KEYWORD:: Msgonly::$MSGONLY:: Fullmessage::$MESSAGE::
\n"); } if (strcmp(strtoupper($MSGONLY), "SMS") == 0) { // sends a normal SMS $xmlmsg = "\n"; // add the following line if you want to send long-SMS (spawning over multiple SMS) // $xmlmsg .= "\n"; $xmlmsg .= ""; $xmlmsg .= urlencode("Your keyword was $KEYWORD and your message was $MSGONLY"); // hex-encode the content $xmlmsg .= "\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // SMS reply if (strcmp(strtoupper($MSGONLY), "SMSFLASH") == 0) { // sends a flasing SMS $xmlmsg = "\n"; $xmlmsg .= "\n"; // set msgclass 0 flag // add the following line if you want to send long-SMS (spawning over multiple SMS) // $xmlmsg .= "\n"; $xmlmsg .= ""; $xmlmsg .= urlencode("Your keyword was $KEYWORD and your message was $MSGONLY"); // hex-encode the content $xmlmsg .= "\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // SMS reply if (strcmp(strtoupper($MSGONLY), "NOKIARINGTONE") == 0) { // sends a nokiaringtone - input must be in RTTTL format // // assemble XML message $http_location = "http://www.simmcomm.ch/ringtone.txt"; // location of the ringtone $xmlmsg = "\n"; $xmlmsg .= "$http_location\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // NOKIARINGTONE if (strcmp(strtoupper($MSGONLY), "NOKIARINGTONEHEX") == 0) { // sends a nokiaringtone as hex include - input must be in RTTTL format // // assemble XML message $http_location = urlencode("KnightRider:d=4,o=5,b=125:16e,16p,16f,16e,16e,16p,16e,16e,16f,16e,16e,16e,16d#,16e,16e,16e,16e,16p,16f,16e,16e,16p,16f,16e,16f,16e,16e,16e,16d#,16e,16e,16e,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,16d,16d,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,16d,16d"); // free demo ringtone from the internet $xmlmsg = "\n"; $xmlmsg .= "$http_location\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // NOKIARINGTONEHEX if (strcmp(strtoupper($MSGONLY), "NOKIALOGO") == 0) { // sends a nokialogo - input must be in GIF, JPG or PNG // // parameters: // mcc = MobileCountryCode for destination (example 228 - switzerland) // mnc = MobileNetworkCode for destination (example 01 - swisscom, 02 sunrise, 03 orange) // assemble XML message $http_type = "GIF"; $http_location = "http://www.simmcomm.ch/nokialogo.gif"; // location of the logo $destination_mcc = "228"; // mandatory: MobileCountryCode for destination $destination_mnc = "01"; // mandatory: MobileNetworkCode for destination $xmlmsg = "\n"; $xmlmsg .= "$http_location\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // NOKIALOGO if (strcmp(strtoupper($MSGONLY), "NOKIAMULTIPART") == 0) { // sends a nokiamultipart message (picturemessage) - input must be in GIF, JPG or PNG // // options: // - specify tag if you want to send some text with your image // assemble XML message $http_type = "GIF"; $http_location = "http://www.simmcomm.ch/nokialogo.gif"; // location of the logo $xmlmsg = "\n"; $xmlmsg .= "$http_location\n"; $xmlmsg .= ""; $xmlmsg .= urlencode("Your logo"); // hex-encode the content $xmlmsg .="\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // NOKIAMULTIPART if (strcmp(strtoupper($MSGONLY), "EMSLOGO") == 0) { // sends a logo to NON-nokia, EMS-capable phones like SonyEricsson // // parameters: // autosave = YES/NO (automatically ask user to save image) // protected = YES/NO (disallow re-distribution of image) // width = x (width of image, do not provide parameter for autosizing) // height = y (height of image, do not provide parameter for autosizing) // assemble XML message $http_type = "GIF"; $http_location = "http://www.simmcomm.ch/nokialogo.gif"; // location of the logo $xmlmsg = "\n"; // no newline after tag as it would convert to text-enter %0A in ems and would consume space $xmlmsg .= "$http_location\n"; $xmlmsg .= "\n"; $rcbuf = sendXML($NUMBER, $truesenses_origin, $xmlmsg); if ($debug == 1) { echo("RESPONSE::$rcbuf::\n"); } } // EMSLOGO // send confirmation to TrueSenses.com that we have received the incoming sms echo("OK
\n"); ?>