Готовый пример, для отправки СМС через шлюз smspilot
Отправка SMS через smspilot
03.12.2015
Сам код отправки СМС
sms_sander.php (Download)
<? if (!defined('SMSPILOT_APIKEY')) define('SMSPILOT_APIKEY', 'KEEEY!!!'); require_once('smspilot.class.php'); $sms = new SMSPilot( SMSPILOT_APIKEY ); if ($sms->send( '792990000', 'KEEEY!!!', 'Oddler')) { echo 'Сообщение успешно отправлено<br />'; echo 'Цена='.$sms->cost.' кредитов<br />'; echo 'Баланс='.$sms->balance.' кредитов<br />'; } else { echo 'Ошибка! '.$sms->error; } ?>
Класс:
smspilot.class.php (Download)
<?php /* SMS Pilot.Class API/PHP v1.8.5 * SEE: http://www.smspilot.ru/apikey.php Example (send): require_once('smspilot.class.php'); $sms = new SMSPilot( 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ' ); $sms->send( '7908796000', 'Привет, разработчик!'); Example 2 (replace sender + send): require_once('smspilot.class.php'); $sms = new SMSPilot( 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ', 'WINDOWS-1251' ); if ($sms->send('79121234512','Завтра контрольная!', 'SCHOOL_N2')) { echo 'Сообщение успешно отправлено<br />'; echo 'Цена='.$sms->cost.' кредитов<br />'; echo 'Баланс='.$sms->balance.' кредитов<br />'; } else echo 'Ошибка! '.$sms->error; Example 3 (send + get sms status): require_once('smspilot.class.php'); $sms = new SMSPilot( 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ' ); $sms->send('7908796000', 'Novy zakaz http://www.smspilot.ru!'); print_r( $sms->status[0] ); // Array ( [id] => 94 [phone] => 7908796000 [zone] => 2 [status] => 0 ) print_r( $sms->statusByPhone( '7908796000' ) ); // // Array ( [id] => 94 [phone] => 7908796000 [zone] => 2 [status] => 0 ) Example 4: (указываем что наша кодировка Windows-1251, проверяем автозамену 89.. получателя) require_once('smspilot.class.php'); $sms = new SMSPilot('XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ','WINDOWS-1251'); $status = $sms->send('89087964781', 'Сообщение в Windows-1251 кодировке!', '89088038965'); print_r( $status ) Array ( [0] => Array ( [id] => 129 [phone] => 7908796000 [zone] => 2 [status] => 0 ) ) Example 5 (check status): require_once('smspilot.class.php'); $sms = new SMSPilot( 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ' ); $status = $sms->check( array( 94,95) ); print_r( $status ); Array ( [0] => Array ( [id] => 94 [phone] => 7908796000 [zone] => 2 [status] => 2 ) [1] => Array ( [id] => 95 [phone] => 7908796000 [zone] => 2 [status] => -1 ) ) Example 6 ( balance ): require_once('smspilot.class.php'); $sms = new SMSPilot( 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ' ); echo $sms->balance(); // 23004 */ class SMSPilot { public $api = 'http://smspilot.ru/api.php'; public $apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ'; public $charset = 'UTF-8'; // public $use_ssl = false; //removed in 1.8.3, see $sms->api property public $to; public $text; public $from = false; public $send_datetime = false; // 1.8.4 public $error; public $success; public $status; // new in 1.7 public $info; public $cost; // new in 1.8 public $balance; // new in 1.8 // public $limit; // removed 1.8 public function __construct( $apikey = false, $charset = false, $from = false ) { if ($apikey) $this->apikey = $apikey; else if (defined('SMSPILOT_APIKEY')) $this->apikey = SMSPILOT_APIKEY; if ($charset) $this->charset = $charset; else if (defined('SMSPILOT_CHARSET')) $this->charset = SMSPILOT_CHARSET; if ($from) $this->from = $from; else if (defined('SMSPILOT_FROM')) $this->from = SMSPILOT_FROM; if (defined('SMSPILOT_API')) $this->api = SMSPILOT_API; } // send sms via smspilot.ru public function send( $to = false, $text = false, $from = false, $send_datetime = false ) { if ($to) $this->to = $to; if ( $text ) $this->text = $text; if ( $from ) $this->from = $from; if ( $send_datetime ) $this->send_datetime = $send_datetime; $this->error = false; $this->success = false; $this->status = array(); $text = ($this->charset != 'UTF-8') ? mb_convert_encoding($this->text, 'utf-8', $this->charset ) : $this->text; $result = $this->http_post($this->api, array( 'send' => $text, 'to' => ((is_array($this->to)) ? implode(',', $this->to) : $this->to), 'from' => $this->from, 'send_datetime' => $this->send_datetime, 'apikey' => $this->apikey, )); //echo $result; if ($result) { if (substr($result,0,6) == 'ERROR=') { $this->error = substr($result,6); return false; } elseif (substr($result,0,8) == 'SUCCESS=') { $this->success = substr($result,8,($p = strpos($result,"\n"))-8); if (preg_match('~(\d+)/(\d+)~', $this->success, $matches )) { $this->cost = $matches[1]; // new in 1.8 $this->balance = $matches[2]; // new in 1.8 } $status_csv = substr( $result, $p+1 ); //status $status_csv = explode( "\n", $status_csv ); foreach( $status_csv as $line ) { $s = explode(',', $line); $this->status[] = array( 'id' => $s[0], 'phone' => $s[1], 'zone' => $s[2], 'status' => $s[3] ); } return $this->status; } else { $this->error = 'UNKNOWN RESPONSE'; return false; } } else { $this->error = 'CONNECTION ERROR'; return false; } } // check status by sms id or ids public function check( $ids ) { // new in 1.7 if (is_array($ids)) $ids = implode(',', $ids); $this->error = false; $this->success = false; $this->status = array(); $result = $this->http_post($this->api, array( 'check' => $ids, 'apikey' => $this->apikey )); if ($result) { if (substr($result,0,6) == 'ERROR=') { $this->error = substr($result,6); return false; } else { $status_csv = $result; //status $status_csv = explode( "\n", $status_csv ); foreach( $status_csv as $line ) { $s = explode(',', $line); $this->status[] = array( 'id' => $s[0], 'phone' => $s[1], 'zone' => $s[2], 'status' => $s[3] ); } return $this->status; } } else { $this->error = 'CONNECTION ERROR'; return false; } } // helper to find status by phone public function statusByPhone( $phone ) { foreach( $this->status as $s ) if ( $s['phone'] == $phone ) return $s; return false; } public function balance( $currency = 'sms' ) { $result = $this->http_post($this->api, array( 'balance' => $currency, 'apikey' => $this->apikey )); if (strlen($result)) { if (substr($result,0,6) == 'ERROR=') { $this->error = substr($result, 6); return false; } else return $this->balance = $result; } else { $this->error = 'CONNECTION ERROR'; return false; } } // apikey info public function info() { $result = $this->http_post( $this->api, array( 'apikey' => $this->apikey )); if ($result) { if (substr($result,0,6) == 'ERROR=') { $this->error = substr($result, 6); return false; } elseif (substr($result,0,8) == 'SUCCESS=') { $s = substr($result,8, ($p = strpos($result,"\n"))-8); $this->success = $s; $lines = explode("\n",substr($result,$p)); $this->info = array(); foreach( $lines as $line ) if ($p = strpos($line,'=')) $this->info[ substr($line,0,$p) ] = substr($line,$p+1); if ($this->charset != 'UTF-8') foreach( $this->info as $k => $v) $this->info[ $k ] = mb_convert_encoding($v,$this->charset,'UTF-8'); if (isset($this->info['balance'])) $this->balance = $this->info['balance']; return true; } else { $this->error = 'UNKNOWN RESPONSE'; return false; } } else { $this->error = 'CONNECTION ERROR'; return false; } } // sockets version HTTP/POST public function http_post( $url, $data ) { $eol = "\r\n"; $post = ''; if (is_array($data)) { foreach( $data as $k => $v) $post .= $k.'='.urlencode($v).'&'; $post = substr($post,0,-1); $content_type = 'application/x-www-form-urlencoded'; } else { $post = $data; if (strpos($post, '<?xml') === 0) $content_type = 'text/xml'; else if (strpos($post, '{') === 0) $content_type = 'application/json'; else $content_type = 'text/html'; } if ((($u = parse_url($url)) === false) || !isset($u['host'])) return false; if (!isset($u['scheme'])) $u['scheme'] = 'http'; $request = 'POST '.(isset($u['path']) ? $u['path'] : '/').((isset($u['query'])) ? '?'.$u['query'] : '' ).' HTTP/1.1'.$eol .'Host: '.$u['host'].$eol .'Content-Type: '.$content_type.$eol .'Content-Length: '.mb_strlen($post, 'latin1').$eol .'Connection: close'.$eol.$eol .$post; $host = ($u['scheme'] == 'https') ? 'ssl://'.$u['host'] : $u['host']; if (isset($u['port'])) $port = $u['port']; else $port = ($u['scheme'] == 'https') ? 443 : 80; $fp = @fsockopen( $host, $port, $errno, $errstr, 10); if ($fp) { $content = ''; $content_length = false; $chunked = false; fwrite($fp, $request); // read headers while ($line = fgets($fp)) { if (preg_match('~Content-Length: (\d+)~i', $line, $matches)) { $content_length = (int) $matches[1]; } else if (preg_match('~Transfer-Encoding: chunked~i', $line)) { $chunked = true; } else if ($line == "\r\n") { break; } } // read content if ($content_length !== false) { $_size = 4096; do { $_data = fread($fp, $_size ); $content .= $_data; $_size = min($content_length-strlen($content), 4096); } while( $_size > 0 ); // $content = fread($fp, $content_length); } else if ($chunked) { while ( $chunk_length = hexdec(trim(fgets($fp))) ) { $chunk = ''; $read_length = 0; while ( $read_length < $chunk_length ) { $chunk .= fread($fp, $chunk_length - $read_length); $read_length = strlen($chunk); } $content .= $chunk; fgets($fp); } } else { while(!feof($fp)) $content .= fread($fp, 4096); } fclose($fp); return $content; } else { return false; } } } ?>