php编写的发送SMS消息的类 可以下载打包文件
这是一个用php编写的发送SMS消息的类,他可以连接SMS服务器,完成用户验证,并发送SMS信息到用户手机中<html>
<head>
<title>SMS Web Sender Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h2>SMS Web Sender DEMO!</h2>
<?php
if ($action != "submit") {
?>
<i>Any username or password you enter here will not be stored
in any way (although we're not using SSL either)</i>
<p><i>Also, as you can see most of these are UK sites, not all
of them will support international numbers!</i></p>
<form method="post" action="demo.php">
<table width="600" border="0" cellspacing="0" cellpadding="4">
<tr>
<td align="right"><b>Site</b></td>
<td>
<select name="site">
<option value="txtuk_net">txtuk.net (no login)</option>
<option value="mtnsms_com">mtnsms.com</option>
<option value="lycos_co_uk">lycos.co.uk</option>
<option value="excite_co_uk">excite.co.uk</option>
<option value="uboot_com">uboot.com</option>
<option value="genie_co_uk">genie.co.uk</option>
</select>
</td>
</tr>
<tr>
<td align="right"><b>User</b></td>
<td>
<input type="text" name="user">
</td>
</tr>
<tr>
<td align="right"><b>Password</b></td>
<td>
<input type="password" name="pass">
</td>
</tr>
<tr>
<td valign="top" align="right"><b>Number</b></td>
<td>
<input type="text" name="number">
(eg. +447123123123)</td>
</tr>
<tr>
<td valign="top" align="right"><b>Message</b></td>
<td>
<textarea name="message" cols="40" rows="8"></textarea>
</td>
</tr>
<tr>
<td align="right"><b>Debug</b></td>
<td>
<input type="checkbox" name="debug" value="yes">
</td>
</tr>
<tr>
<td align="right"> </td>
<td> </td>
</tr>
<tr>
<td align="right"> </td>
<td>
<input type="hidden" name="action" value="submit">
<input type="submit" name="Submit" value="Send!">
</td>
</tr>
</table>
</form>
<?php
} else {
// contains the site details
include("sites.php");
// contains main class
include("class.sms_web_sender.php");
if (empty($number) || empty($site) || empty($message)) {
die("Make sure number, site and message are not empty");
}
if (!empty($debug) && $debug == "yes") {
$debug = true;
} else {
$debug = false;
}
// signature bit of text that's required by some
// sites like MTNSMS.com, you can leave as is
$signature = "*";
// create instance of sms web sender the one
// optional argument will determine if
// debug is turned on or not
$sms = new sms_web_sender($debug);
// add accounts
// 1st argument: username
// 2nd argument: password
// 3rd argument: server
// 4th argument: weight (this is only useful when
// shuffling the logins, the higher
// the weight, the more likely it'll
// be placed near the top of the list)
// default if left blank: 1
$sms->add_login("$user", "$pass", "$site");
// add Proxy Server details if required
// I haven't tested this myself, feature of jm_sms
//$sms->setProxyServer("proxyserver");
//$sms->setProxyPort(81);
//$sms->setProxyUser("proxyusername");
//$sms->setProxyPass("proxypassword");
//$sms->setProxy(true);
// passes the number, signature and message in an array
$result = $sms->send_sms(array("number"=>$number, "signature"=>$signature, "message"=>$message));
if ($result) {
echo "<h2>Sent!</h2>";
} else {
echo "<h2>Could not send :(</h2>";
echo "<p><a href=\"javascript:history.back()\">Go Back</a></p>";
}
}
?>
</body>
</html>
<?php
if (!defined("_SITES_INCLUDED")) {
define("_SITES_INCLUDED", 1);
}
define("CLASS_NAME", "sms_web_sender");
/**************************************
each class needs to have these functions
+ login()
+ logout()
+ send_sms()
***************************************/
class sms_global
{
// takes a +44 international style number and returns a UK style number
// eg. +447977777777 becomes 07977777777
// used for some sites which don't accept the international format (genie.co.uk - 8/12/01)
function uk_num_format($number)
{
return preg_replace("/\\+{2}(+)/", "0$1", $number);
}
// get rid of the + sign in the number
function strip_plus_sign($number)
{
return str_replace("+", "", $number);
}
// return the country code from a number
function country_code($number)
{
if (preg_match("/^\\+({2})+/", $number, $matches)) {
return $matches;
} else {
return false;
}
}
// return the value of a hidden html form field
function hidden_field_val($html, $field_name)
{
if (preg_match('/type="?hidden"? name="?'.$field_name.'"? value="?([^"]+)"?/i', $html, $matches)) {
return $matches;
}
}
}
/********************************************************************************************************
*****************
* LYCOS.CO.UK *
*****************
********************************************************************************************************/
class lycos_co_uk extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server= "sms.lycos.co.uk";
var $server_login= "login.lycos.co.uk";
var $server_logout= "login.lycos.co.uk";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $login_script = "/bin/membership/len_login?StatusCookie=OK";
var $login_command = "member_name=[]&service=lycos&redirect=http%3A%2F%2Fsms.lycos.co.uk%2Fmobile%2F&target_url=&fail_url=&format=&password=[]&product=SMS&x=20&y=10";
// check for this URL
var $success_url = "/bin/membership/len_cookie";
// next URL
var $next_url = "/mobile/message_center/message_center.jsp";
// message delivered url
var $message_delivered_url = "/mobile/message_center/message_delivered.jsp";
//-------------------------
// SEND SMS
// vars - [] [] [] []
//-------------------------
// check for success string
var $success_string = "SMS message sent to:";
// check for quota string
var $quota_exceeded_string = "You tried to send";
// send command
var $send_command = "myaction=send×tamp=[]&buddy=No+buddies&recsource=receiver&receiver=[]&format=sms&body=[]&phrase=--+Select+a+phrase+--";
// send URL
var $send_script = "/mobile/message_center/message_center.jsp";
// message
var $send_message = "[]";
// logout URL
var $logout_script = "/bin/membership/len_logout?redirect=http:%2F%2Fsms.lycos.co.uk%2Fmobile";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function lycos_co_uk()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "body";
$this->fail= "<b>ERROR:</b> The password supplied for";
$this->fail= "Incorrect password for user: []";
$this->fail= "body";
$this->fail= "<b>ERROR:</b> There is no member";
$this->fail= "User name not found: []";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
if (isset($this->server_login)) {
$sms_obj->set_server($this->server_login);
}
// grab login string
$command = $this->login_command;
$command = str_replace("[]", urlencode($sms_obj->get_username()), $command);
$command = str_replace("[]", $sms_obj->get_password(), $command);
$result = $sms_obj->post_url($this->login_script, $command);
$redirect_url = $sms_obj->parse_redirect($result);
// check for incorrect login details
if (is_array($this->fail)) {
for ($x=0; $x < count($this->fail); $x++) {
$check_in = ($this->fail[$x] == "body") ? $result : $redirect_url;
if (strstr($check_in, $this->fail[$x]) != "") {
$sms_obj->debug(str_replace("[]", $sms_obj->get_username(), $this->fail[$x]));
return false;
}
}
}
$sms_obj->set_cur_url("http://".$sms_obj->get_server().$redirect_url);
if (strstr($redirect_url, $this->success_url)) {
$sms_obj->debug("Redirect URL matches Success URL: ".$this->success_url);
// switch to main server at this point (incase login servers were used)
$sms_obj->set_server($this->server);
$sms_obj->set_cur_url("http://".$sms_obj->get_server().$this->next_url);
}
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// has to have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($number), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($number), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message), $command);
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->message_delivered_url)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
if (strstr($result, $this->quota_exceeded_string)) {
$sms_obj->debug("Quota for current user [".$sms_obj->get_username()."] exceeded.");
}
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
$sms_obj->debug("Logging out...");
if (isset($this->server_logout)) {
$sms_obj->set_server($this->server_logout);
}
$sms_obj->get_url($this->logout_script);
return true;
}
}
/********************************************************************************************************
*****************
* MTNSMS.COM *
*****************
********************************************************************************************************/
class mtnsms_com extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server= "www.mtnsms.com";
var $server_logout= "www.mtnsms.com";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $login_script = "/session.asp";
var $login_command = "username=[]&password=[]&email=&joinusclick=no&returl=&x=40&y=43";
// check for this URL
var $success_url = "/members/contacts/contacts.asp";
// next URL
var $next_url = "/sms/xsms.asp";
//-------------------------
// SEND SMS
// vars - [] [] [] []
//-------------------------
// check for success string
var $success_string = "your message sent to";
// check for success url
var $message_delivered_url = "/sms/msgSent.asp";
// check for quota string
var $quota_exceeded_string = "Daily message quota exceeded";
// send command
var $send_command = "smsToCTs=&smsToNumbers=[]&smsMessage=[]&smsSig=1&smsSigDyna=[]&msgCL=138&lenSSig=4&lenLSig=3&lenSysSig=11";
// send URL
var $send_script = "/sms/xsms.asp";
// message
var $send_message = "[]";
// logout URL
var $logout_script = "/logout.asp";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function mtnsms_com()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "URL";
$this->fail= "/registration/";
$this->fail= "User name not found: []";
$this->fail= "URL";
$this->fail= "err=204";
$this->fail= "Incorrect password for user: []";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
if (isset($this->server_login)) {
$sms_obj->set_server($this->server_login);
}
// grab login string
$command = $this->login_command;
$command = str_replace("[]", urlencode($sms_obj->get_username()), $command);
$command = str_replace("[]", $sms_obj->get_password(), $command);
$result = $sms_obj->post_url($this->login_script, $command);
$redirect_url = $sms_obj->parse_redirect($result);
// check for incorrect login details
if (is_array($this->fail)) {
for ($x=0; $x < count($this->fail); $x++) {
$check_in = ($this->fail[$x] == "body") ? $result : $redirect_url;
if (strstr($check_in, $this->fail[$x]) != "") {
$sms_obj->debug(str_replace("[]", $sms_obj->get_username(), $this->fail[$x]));
return false;
}
}
}
$result = $sms_obj->get_url($redirect_url);
if (strstr($redirect_url, $this->success_url)) {
$sms_obj->debug("Redirect URL matches Success URL: ".$this->success_url);
// switch to main server at this point (incase login servers were used)
$sms_obj->set_server($this->server);
$sms_obj->get_url($this->next_url);
}
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// should have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($number), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($number), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message."\n"), $command);
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->message_delivered_url)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
if (strstr($result, $this->quota_exceeded_string)) {
$sms_obj->debug("Quota for current user [".$sms_obj->get_username()."] exceeded.");
}
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
$sms_obj->debug("Logging out...");
if (isset($this->server_logout)) {
$sms_obj->set_server($this->server_logout);
}
$sms_obj->get_url($this->logout_script);
return true;
}
}
/********************************************************************************************************
*****************
* TXTUK.NET *
*****************
********************************************************************************************************/
class txtuk_net extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server = "www.txtuk.net";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $login_script = "/sendtxtmsg.php";
//-------------------------
// SEND SMS
// vars - [] [] [] []
//-------------------------
// check for success string
var $success_string = "Message Sent to";
// send command
var $send_command ="back=default&tnumber=[]&message=[]";
// send URL
var $send_script = "/action_sendtxtmsg.php";
// message
var $send_message = "[]";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function txtuk_net()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "body";
$this->fail= "Message not authorised";
$this->fail= "Problems sending!";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
$result = $sms_obj->get_url($this->login_script);
$sms_obj->parse_redirect($result);
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// has to have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($number), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($number), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message), $command);
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->success_string)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
return true;
}
}
/********************************************************************************************************
*****************
* GENIE.CO.UK *
*****************
********************************************************************************************************/
class genie_co_uk extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server= "www.genie.co.uk";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $pre_login_script = "/";
var $login_script = "/login/doLogin";
var $login_command = "username=[]&password=[]&x=9&y=9";
//-------------------------
// SEND SMS
// vars - [] [] [] []
//-------------------------
// check for success string
var $success_string = "has been sent";
// check for quota string
var $quota_exceeded_string = "You tried to send";
// send command
var $send_command = "RECIPIENT=[]&ABNUMBER=&left=103&SUBJECT=&check=0&MESSAGE=[]&action=Send";
// send URL
var $send_script = "/public/gmail/smsconfirm.html";
// message
var $send_message = "[]";
// logout URL
var $logout_script = "/logout/";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function genie_co_uk()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "body";
$this->fail= "User Name and/or Password you entered";
$this->fail= "Incorrect user/pass for user: []";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
/** NOT NECESSARY! ********
***************************
$result = $sms_obj->get_url($this->pre_login_script);
$redirect_url = $sms_obj->parse_redirect($result);
$sms_obj->get_url($redirect_url);
if (isset($this->server_login)) {
$sms_obj->set_server($this->server_login);
}
*/
// grab login string
$command = $this->login_command;
$command = str_replace("[]", urlencode($sms_obj->get_username()), $command);
$command = str_replace("[]", $sms_obj->get_password(), $command);
$result = $sms_obj->post_url($this->login_script, $command);
$redirect_url = $sms_obj->parse_redirect($result);
// check for incorrect login details
if (is_array($this->fail)) {
for ($x=0; $x < count($this->fail); $x++) {
$check_in = ($this->fail[$x] == "body") ? $result : $redirect_url;
if (strstr($check_in, $this->fail[$x]) != "") {
$sms_obj->debug(str_replace("[]", $sms_obj->get_username(), $this->fail[$x]));
return false;
}
}
}
if (!$redirect_url) {
return false;
}
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// has to have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($this->uk_num_format($number)), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($this->uk_num_format($number)), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message), $command);
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->success_string)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
if (strstr($result, $this->quota_exceeded_string)) {
$sms_obj->debug("Quota for current user [".$sms_obj->get_username()."] exceeded.");
}
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
$sms_obj->debug("Logging out...");
if (isset($this->server_logout)) {
$sms_obj->set_server($this->server_logout);
}
$sms_obj->get_url($this->logout_script);
return true;
}
}
/********************************************************************************************************
*****************
* UBOOT.COM *
*****************
********************************************************************************************************/
class uboot_com extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server= "www.uboot.com";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $login_script = "/cgi-bin/login.fcgi/uk/login";
var $login_command = "unickname=[]&password=[]&x=80&y=4";
//-------------------------
// SEND SMS
// vars - [] [] [] []
//-------------------------
// check for success string
var $success_string = "transmit_done.gif";
// check for quota string
var $quota_exceeded_string = "You tried to send";
// send command
var $send_command = "p=csn&a=formaction&messageclass=Uboot%3A%3AMessages%3A%3ASMS&abook=addressbook&unickname=&unumber=&netw=&mobileno=[]&smsno=[]&date=&time=&num=0&body=[]&send.x=43&send.y=6";
// send URL
var $send_script = "/cgi-bin/ubox.fcgi";
// message
var $send_message = "[]";
// logout URL
var $logout_script = "/cgi-bin/login.fcgi/uk/dologout";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function uboot_com()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "body";
$this->fail= "entered is not valid";
$this->fail= "Incorrect telephone number entered";
$this->fail= "body";
$this->fail= "doesn't exist";
$this->fail= "User name not found: []";
$this->fail= "body";
$this->fail= "password you entered does not match";
$this->fail= "Incorrect password for user: []";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
// grab login string
$command = $this->login_command;
$command = str_replace("[]", urlencode($sms_obj->get_username()), $command);
$command = str_replace("[]", $sms_obj->get_password(), $command);
$result = $sms_obj->post_url($this->login_script, $command);
$redirect_url = $sms_obj->parse_redirect($result);
// check for incorrect login details
if (is_array($this->fail)) {
for ($x=0; $x < count($this->fail); $x++) {
$check_in = ($this->fail[$x] == "body") ? $result : $redirect_url;
if (strstr($check_in, $this->fail[$x]) != "") {
$sms_obj->debug(str_replace("[]", $sms_obj->get_username(), $this->fail[$x]));
return false;
}
}
}
if (!$redirect_url) {
return false;
}
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// has to have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($this->strip_plus_sign($number)), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($this->strip_plus_sign($number)), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message), $command);
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->success_string)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
if (strstr($result, $this->quota_exceeded_string)) {
$sms_obj->debug("Quota for current user [".$sms_obj->get_username()."] exceeded.");
}
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
$sms_obj->debug("Logging out...");
if (isset($this->server_logout)) {
$sms_obj->set_server($this->server_logout);
}
$sms_obj->get_url($this->logout_script);
return true;
}
}
/********************************************************************************************************
*****************
* EXCITE.CO.UK*
*****************
********************************************************************************************************/
class excite_co_uk extends sms_global
{
//-------------------------
// SERVER DETAILS
//-------------------------
var $server = "www.excite.co.uk";
var $server_prelogin = "reg.excite.co.uk";
var $server_login = "reg.excite.com";
var $server_logout = "reg.excite.com";
//-------------------------
// LOGIN
// vars - [] []
//-------------------------
var $prelogin_script = "/mps/login?pname=pfp&brand=uk_excite&targeturl=http://www.excite.co.uk/";
var $login_script = "/mps/loginreq?pname=pfp&brand=uk_excite&targeturl=http://www.excite.co.uk/&uid=";
var $login_command = "acctname=[]&passwd=[]&snonce=[]&stime=[]×kew=none&crep=none&jerror=none&gofer=Sign+in";
//-------------------------
// SEND SMS
// vars - [] [] [] [] []
//-------------------------
// check for success string
var $success_string = "Has Been Sent To";
// check for quota string
var $quota_exceeded_string = "Quota Exceeded";
// send command
var $send_command = "partial_address=[]&message=[]&country_code=[]";
// send URL
var $send_script = "/mobile/sms/sent/";
// message
var $send_message = "[]";
// logout URL
var $logout_script = "/mps/signout_val?easyvalue=easy&completevalue=complete&signout_opt=complete&pname=pfp&brand=uk_excite&targeturl=http%3A%2F%2Fwww.excite.co.uk%2F";
// failure checks
var $fail = array();
/**************************
constructor
***************************/
function excite_co_uk()
{
//-------------------------
// FAILED LOGINS CLUES
// vars - []
//-------------------------
$this->fail= "body";
$this->fail= "cannot recall your password";
$this->fail= "Incorrect username/password for user: []";
}
/**************************
login
***************************/
function login(&$sms_obj)
{
$sms_obj->set_server($this->server_prelogin);
$result = $sms_obj->get_url($this->prelogin_script);
$redirect_url = $sms_obj->parse_redirect($result);
$sms_obj->set_server($this->server_login);
// grab login string
$command = $this->login_command;
$command = str_replace("[]", urlencode($sms_obj->get_username()), $command);
$command = str_replace("[]", $sms_obj->get_password(), $command);
$command = str_replace("[]", urlencode($this->hidden_field_val($result, "snonce")), $command);
$command = str_replace("[]", urlencode($this->hidden_field_val($result, "stime")), $command);
$result = $sms_obj->post_url($this->login_script, $command);
$redirect_url = $sms_obj->parse_redirect($result);
// check for incorrect login details
if (is_array($this->fail)) {
for ($x=0; $x < count($this->fail); $x++) {
$check_in = ($this->fail[$x] == "body") ? $result : $redirect_url;
if (strstr($check_in, $this->fail[$x]) != "") {
$sms_obj->debug(str_replace("[]", $sms_obj->get_username(), $this->fail[$x]));
return false;
}
}
}
if (!$redirect_url) {
return false;
}
$sms_obj->set_cur_url("http://reg.excite.co.uk/mps/login?pname=pfp&brand=uk_excite&targeturl=http://www.excite.co.uk/");
$sms_obj->clear_cookies();
$result = $sms_obj->get_url($redirect_url);
$redirect_url = $sms_obj->parse_redirect($result);
//$sms_obj->set_cur_url("http://reg.excite.co.uk/mps/login?pname=pfp&brand=uk_excite&targeturl=http://www.excite.co.uk/");
//$result = $sms_obj->get_url($redirect_url);
$sms_obj->set_server($this->server);
return true;
}
/**************************
send sms
***************************/
function send_sms($options, &$sms_obj)
{
// has to have $message, $signature, $number
extract($options);
if (!$sms_obj->login()) {
$sms_obj->debug("Unable to log in");
return false;
}
$tmp_message = $this->send_message;
$tmp_message = str_replace("[]", time(), $message);
$tmp_message = str_replace("[]", urlencode($this->strip_plus_sign($number)), $message);
$tmp_message = str_replace("[]", urlencode($signature), $message);
$tmp_message = str_replace("[]", urlencode($message), $message);
$message = $tmp_message;
$command = $this->send_command;
$command = str_replace("[]", urlencode($this->strip_plus_sign($number)), $command);
$command = str_replace("[]", urlencode($signature), $command);
$command = str_replace("[]", urlencode($message), $command);
$command = str_replace("[]", urlencode($this->country_code($number)), $command);
// too quick? didn't think they'd check it, nice feature,
// but seems limit is only enforced on the confirmation page
$sms_obj->debug("Sleep for 20 seconds (otherwise Excite will complain you're too quick :)");
sleep(20);
$sms_obj->set_cur_url("http://www.excite.co.uk/mobile/sms/confirm/");
$result = $sms_obj->post_url($this->send_script, $command);
if (strstr($result, $this->success_string)) {
$sms_obj->debug("SMS Message Sent Successfully");
return true;
} else {
$sms_obj->debug("SMS Send Failed");
// echo $result;
if (strstr($result, $this->quota_exceeded_string)) {
$sms_obj->debug("Quota for current user [".$sms_obj->get_username()."] exceeded.");
}
return false;
}
}
/**************************
logout
***************************/
function logout(&$sms_obj)
{
$sms_obj->debug("Logging out...");
if (isset($this->server_logout)) {
$sms_obj->set_server($this->server_logout);
}
$sms_obj->get_url($this->logout_script);
return true;
}
}
?>
<?php
if (!defined("_SITES_INCLUDED")) {
include("sites.php");
}
class sms_web_sender {
var $server;
var $server_obj;
var $cookies = array();
var $login = array();
var $cur_url;
var $do_debug = false;
var $proxy_server;
var $proxy_port;
var $proxy_user;
var $proxy_pass;
var $proxy = false;
/**********************
* SET/GET FUNCTIONS
***********************/
function get_server() {
return $this->server;
}
function set_server($server) {
return $this->server = $server;
}
function get_cur_url() {
return $this->cur_url;
}
function set_cur_url($cur_url) {
return $this->cur_url = $cur_url;
}
function get_debug() {
return $this->do_debug;
}
function set_debug($debug) {
return $this->do_debug = $debug;
}
function get_proxy_server() {
return $this->proxy_server;
}
function set_proxy_server($proxy_server) {
return $this->proxy_server = $proxy_server;
}
function get_proxy_port() {
return $this->proxy_port;
}
function set_proxy_port($proxy_port) {
return $this->proxy_port = $proxy_port;
}
function get_proxy_user() {
return $this->proxy_user;
}
function set_proxy_user($proxy_user) {
return $this->proxy_user = $proxy_user;
}
function get_proxy_pass() {
return $this->proxy_pass;
}
function set_proxy_pass($proxy_pass) {
return $this->proxy_pass = $proxy_pass;
}
function get_proxy() {
return $this->proxy;
}
function set_proxy($proxy) {
return $this->proxy = $proxy;
}
/**********************
* CONSTRUCTOR
* sets initial username, password, debug, and server
***********************/
// $server name will determine which class to use
function sms_web_sender($debug=false, $username="", $password="", $server="")
{
if ($debug) {
$this->set_debug(true);
}
if (!empty($server)) {
$this->add_login($username, $password, $server);
}
}
/**********************
* SET SITE
***********************/
function set_site($site)
{
if (class_exists($site)) {
set_time_limit(60);
$this->clear_cookies();
$this->debug($site." class being used");
$this->server_obj = new $site;
$this->set_server($this->server_obj->server);
$this->set_cur_url($this->get_server());
return true;
} else {
$this->debug($site." class Not Found!");
if (!$this->next_login()) {
$this->debug("No more servers: Exiting..");
exit;
}
return false;
}
}
/**********************
* ADD LOGIN
***********************/
function add_login($username, $password, $server, $weight=1)
{
$this->login[] = array($username, $password, $server, $weight, count($this->login));
return true;
}
/**********************
* SHUFFLE LOGINS
***********************/
function shuffle_logins()
{
$tmp_array = array();
$shuffled = array();
// create new array holding biased amount
// of each login (based on weight)
foreach ($this->login as $val) {
for ($x=1; $x<=$val; $x++) {
$tmp_array[] = $val;
}
}
// loop through logins randomly picking out
// login details to put in the new array
while (count($shuffled) < count($this->login)) {
mt_srand((double) microtime() * 1000000);
$rand_pick = mt_rand(0, count($tmp_array));
if ($rand_pick > 0) $rand_pick--;
$remove_id = $tmp_array[$rand_pick];
$shuffled[] = $tmp_array[$rand_pick];
foreach ($tmp_array as $key=>$val) {
if ($val == $remove_id) {
unset($tmp_array[$key]);
}
}
// reset the keys
$tmp_array = array_values($tmp_array);
}
// replace our logins array with our shuffled array
$this->login = $shuffled;
return true;
}
/**********************
* GET USERNAME
***********************/
function get_username()
{
return $this->login;
}
/**********************
* GET PASSWORD
***********************/
function get_password()
{
return $this->login;
}
/**********************
* GET SITE
***********************/
function get_site()
{
return $this->login;
}
/**********************
* NEXT LOGIN
***********************/
function next_login()
{
if (next($this->login)) {
$this->debug("Advancing to next user.");
return $this->set_site($this->get_site());
} else {
$this->debug("No more configured users.");
return false;
}
}
/**********************
* DEBUG OUTPUT
***********************/
function debug($line)
{
if ($this->do_debug) {
echo "- $line<br>\n";
flush();
}
return true;
}
/**********************
* GET COOKIES
***********************/
function get_cookies()
{
$cookies = implode("; ", $this->cookies);
$this->debug("Using cookies: ".$cookies);
return $cookies;
}
/**********************
* PROCESS COOKIE
***********************/
function process_cookie($cookie)
{
// sample cookie
// NAME=VALUE; path=/;domain=.mydomain.com;expires=Wednesday, 31-Dec-2010 12:10:00 GMT;
$cookie_valid = true;
$cookie = trim($cookie);
if (substr($cookie, -1) == ";") $cookie = substr($cookie, 0, -1);
$cookie = explode(";", $cookie, 2);
$cookie_attributes = trim($cookie);
$cookie_name_val = explode("=", $cookie, 2);
$cookie_name = trim($cookie_name_val);
$cookie_val = trim($cookie_name_val);
if ($cookie_val == "") {
$cookie_valid = false;
}
if (preg_match("/expires=*({1,2}[- ]+[- ]{4})/i", $cookie_attributes, $matches)) {
if (strtotime($matches) < time()) {
$this->debug("(-) Expired: ".implode(";", $cookie));
$cookie_valid = false;
}
}
if (!$cookie_valid) {
return false;
} else {
$this->cookies["$cookie_name"] = "$cookie_name=$cookie_val";
$this->debug("(+) Set-Cookie: ".implode(";", $cookie));
return true;
}
}
/**********************
* SET COOKIES
***********************/
function set_cookies($cookie)
{
return $this->process_cookie($cookie);
}
/**********************
* CLEAR COOKIES
***********************/
function clear_cookies()
{
$this->cookies = array();
return true;
}
/**********************
* POST URL
***********************/
function post_url($url, $formdata, $showme=false)
{
$full_url = "http://".$this->get_server().$url;
$this->debug(" URL: ".$full_url);
$data ="POST ".$url." HTTP/1.1\r\n";
$data .= $this->generate_http_header();
$data .= "Content-Type: application/x-www-form-urlencoded\r\n";
$data .= "Content-Length: ".strlen($formdata)."\r\n\r\n";
$data .= $formdata;
do {
$errno = 0;
$fp = @fsockopen(($this->get_proxy() ? $this->get_proxy_server() : $this->get_server()), ($this->get_proxy() ? $this->get_proxy_port() : 80), $errno, $errstr, 30);
if ($errno) {
$this->debug("Retrying Failed POST (".$errno."): ".$errstr);
sleep(1);
}
} while($errno);
// shows HTTP POST request
if ($showme) die($data);
$result = "";
fputs($fp, $data);
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
$this->set_cur_url("http://".$this->get_server().$url);
return $result;
}
/**********************
* GET URL
***********************/
function get_url($url, $showme=false)
{
$full_url = "http://".$this->get_server().$url;
$this->debug(" URL: ".$full_url);
$data ="GET ".$url." HTTP/1.1\r\n";
$data .= $this->generate_http_header()."\r\n";
do {
$errno = 0;
$fp = @fsockopen(($this->get_proxy() ? $this->get_proxy_server() : $this->get_server()), ($this->get_proxy() ? $this->get_proxy_port() : 80), $errno, $errstr, 30);
if ($errno) {
$this->debug("Retrying Failed GET (".$errno."): ".$errstr);
sleep(1);
}
} while($errno);
// shows HTTP GET request
if ($showme) die($data);
$result = "";
fputs ($fp, $data);
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
$this->set_cur_url("http://".$this->get_server().$url);
return $result;
}
/**********************
* GENERATE HTTP HEADERS
***********************/
function generate_http_header()
{
$data= "Referer: ".$this->get_cur_url()."\r\n";
//$data .= "User-Agent: Mozilla/4.72 (X11; U; Linux 2.2.14-5.0 i586)\r\n";
$data .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:0.9.4) Gecko/20011019 Netscape6/6.2\r\n";
$data .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\n";
// line below enabled will not let us search through returned html (as it'll be compressed and appear garbled)
//$data .= "Accept-Encoding: gzip\r\n";
$data .= "Accept-Language: en-gb\r\n";
$data .= "Accept-Charset: iso-8859-1,*,utf-8\r\n";
$data .= "Cookie: ".$this->get_cookies()."\r\n";
$data .= "Host: ".$this->get_server()."\r\n";
$data .= "Cache-Control: max-age=259200\r\n";
$data .= "Connection: close\r\n";
if ($this->get_proxy())
$data .= "Proxy-Authorization: Basic ".base64_encode($this->get_proxy_user().":".$this->get_proxy_pass())."\r\n";
return $data;
}
/**********************
* PARSE REDIRECT
***********************/
function parse_redirect($http_header)
{
$header_parts = explode("\r\n", $http_header);
while(list($key, $val) = each($header_parts)) {
if (substr($val, 0, 10) == "Location: ") {
$location = substr($val, 10);
} else if (preg_match("/^Set-Cookie: /i", substr($val, 0, 12))) {
$this->set_cookies(substr($val, 12));
}
}
if (!empty($location) && substr($location, 0, 7) == "http://") {
$location = substr($location, 7);
if (!strstr($location, "/")) {
$this->set_server($location);
} else {
$this->set_server(substr($location, 0, strpos($location, "/")));
}
if (substr_count($location, "/") == 0) {
$location = "/";
} else {
$location = substr($location, strpos($location, "/"));
}
}
if (!empty($location)) {
$location = trim($location);
$location = ($location != "/") ? "/".$location : $location;
$this->debug("Found HTTP Redirect To: ".$location);
return $location;
} else {
return false;
}
}
/**********************
* LOGIN
***********************/
function login()
{
$result = $this->server_obj->login($this);
if (!$result && $this->next_login()) {
return $this->login();
} else {
return $result;
}
}
/**********************
* SEND SMS
***********************/
function send_sms($options)
{
if (!is_object($this->server_obj)) {
$this->set_site($this->get_site());
}
$this->set_cur_url("http://".$this->get_server()."/");
$result = $this->server_obj->send_sms($options, $this);
if (!$result && $this->next_login()) {
return $this->send_sms($options);
} else {
return $result;
}
}
/**********************
* LOGOUT
* not necessary for most stuff
***********************/
function logout()
{
return $this->server_obj->logout($this);
}
}
?>
<?php
/*
$Date: 2001/12/09 03:51:55 $
$Revision: 1.2 $
-------------------------------------------------
SMS WEB SENDER 0.1 (08-DEC-2001)
Keyvan Minoukadeh - keyvan@k1m.com
http://www.k1m.com/
-------------------------------------------------
This is an example file showing you how to use
the class...
*/
// contains the site details
include("sites.php");
// contains main class
include("class.sms_web_sender.php");
// your mobile number in international format (+###########)
$number = "+447123123123";
// signature bit of text that's required by some
// sites like MTNSMS.com, you can leave as is
$signature = "*";
// main body of the message
$message = "This is a test message";
// create instance of sms web sender the one
// optional argument will determine if
// debug is turned on or not
$sms = new sms_web_sender(true);
// add accounts
// 1st argument: username
// 2nd argument: password
// 3rd argument: server
// 4th argument: weight (this is only useful when
// shuffling the logins, the higher
// the weight, the more likely it'll
// be placed near the top of the list)
// default if left blank: 1
$sms->add_login("user", "pass", "uboot_com", 1);
$sms->add_login("user", "pass", "genie_co_uk", 1);
$sms->add_login("user", "pass", "lycos_co_uk", 10);
$sms->add_login("user", "pass", "mtnsms_com", 1);
$sms->add_login("user", "pass", "excite_co_uk", 5);
$sms->add_login("", "", "txtuk_net", 1);
// shuffle logins
$sms->shuffle_logins();
// add Proxy Server details if required
// I haven't tested this myself, feature of jm_sms
//$sms->setProxyServer("proxyserver");
//$sms->setProxyPort(81);
//$sms->setProxyUser("proxyusername");
//$sms->setProxyPass("proxypassword");
//$sms->setProxy(true);
// passes the number, signature and message in an array
$sms->send_sms(array("number"=>$number, "signature"=>$signature, "message"=>$message));
?>
页:
[1]