| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 | 
							- <?php 
 
- /**
 
-  * 短信平台API接口类
 
-  */
 
- class smsapi {
 
- 	public $userid;
 
- 	public $statuscode;
 
- 	private $productid, $sms_key, $smsapi_url;
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 初始化接口类
 
- 	 * @param int $userid 用户id
 
- 	 * @param int $productid 产品id
 
- 	 * @param string $sms_key 密钥
 
- 	 */
 
- 	public function __construct($userid = '', $productid = '', $sms_key = '') {
 
- 		$this->smsapi_url = 'http://sms.phpip.com/api.php?';
 
- 		$this->userid = $userid;
 
- 		$this->productid = $productid;
 
- 		$this->sms_key = $sms_key;
 
- 	}
 
- 		
 
- 	/**
 
- 	 * 
 
- 	 * 获取短信产品列表信息
 
- 	 */
 
- 	public function get_price() {
 
- 		$this->param = array('op'=>'sms_get_productlist');
 
- 		$res = $this->pc_file_get_contents();
 
- 		
 
- 		return !empty($res) ? json_decode($res, 1) : array();	
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 获取短信产品购买地址
 
- 	 */
 
- 	public function get_buyurl($productid = 0) {
 
- 		return 'http://sms.phpip.com/index.php?m=sms_service&c=center&a=buy&sms_pid='.$this->productid.'&productid='.$productid;
 
- 	}
 
- 	public function show_qf_url() {
 
- 		return $this->smsapi_url.'op=sms_qf_url&sms_uid='.$this->userid.'&sms_pid='.$this->productid.'&sms_key='.$this->sms_key;
 
- 	}
 
- 	/**
 
- 	 * 获取短信剩余条数和限制短信发送ip
 
- 	 */
 
- 	public function get_smsinfo() {
 
- 		$this->param = array('op'=>'sms_get_info');
 
- 		$res = $this->pc_file_get_contents();
 
- 		return !empty($res) ? json_decode($res, 1) : array();	
 
- 	}	
 
- 	/**
 
- 	 * 获取充值记录
 
- 	 */
 
- 	public function get_buyhistory() {
 
- 		$this->param = array('op'=>'sms_get_paylist');
 
- 		$res = $this->pc_file_get_contents();
 
- 		return !empty($res) ? json_decode($res, 1) : array();			
 
- 	}
 
- 	/**
 
- 	 * 获取消费记录
 
- 	 * @param int $page 页码
 
- 	 */
 
- 	public function get_payhistory($page=1) {
 
- 		$this->param = array('op'=>'sms_get_report','page'=>$page);
 
- 		$res = $this->pc_file_get_contents();
 
- 		return !empty($res) ? json_decode($res, 1) : array();		
 
- 	}
 
- 	/**
 
- 	 * 获取短信api帮助
 
- 	 */
 
- 	public function get_sms_help() {
 
- 		$this->param = array('op'=>'sms_help','page'=>$page);
 
- 		$res = $this->pc_file_get_contents();
 
- 		return !empty($res) ? json_decode($res, 1) : array();		
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 批量发送短信
 
- 	 * @param array $mobile 手机号码
 
- 	 * @param string $content 短信内容
 
- 	 * @param datetime $send_time 发送时间
 
- 	 * @param string $charset 短信字符类型 gbk / utf-8
 
- 	 * @param string $id_code 唯一值 、可用于验证码
 
- 	 */
 
- 	public function send_sms($mobile='', $content='', $send_time='', $charset='gbk',$id_code = '',$tplid = '',$return_code = 0) {
 
- 		//短信发送状态
 
- 		$status = $this->_sms_status();
 
- 		if(is_array($mobile)){
 
- 			$mobile = implode(",", $mobile);
 
- 		}
 
- 		$content = safe_replace($content);
 
- 		if(strtolower($charset)=='utf-8') {
 
- 			$send_content = iconv('utf-8','gbk',$content);//官网IS GBK
 
- 		}else{
 
- 			$send_content = $content;
 
- 		}
 
- 		$send_time = strtotime($send_time);
 
- 	
 
- 		$data = array(
 
- 						'sms_pid' => $this->productid,
 
- 						'sms_passwd' => $this->sms_key,
 
- 						'sms_uid' => $this->userid,
 
- 						'charset' => CHARSET,
 
- 						'send_txt' => urlencode($send_content),
 
- 						'mobile' => $mobile,
 
- 						'send_time' => $send_time,
 
- 						'tplid' => $tplid,
 
- 					);
 
- 		$post = '';
 
- 		foreach($data as $k=>$v) {
 
- 			$post .= $k.'='.$v.'&';
 
- 		}
 
- 		$smsapi_senturl = $this->smsapi_url.'op=sms_service_new';
 
- 		$return = $this->_post($smsapi_senturl, 0, $post);
 
- 		$arr = explode('#',$return);
 
- 		$this->statuscode = $arr[0];
 
- 		//增加到本地数据库
 
- 		$sms_report_db = pc_base::load_model('sms_report_model');
 
- 		$send_userid = param::get_cookie('_userid') ? intval(param::get_cookie('_userid')) : 0;
 
- 		$ip = ip();
 
- 		
 
- 		$new_content = $content;
 
- 		if(isset($this->statuscode)) {
 
-  			$sms_report_db->insert(array('mobile'=>$mobile,'posttime'=>SYS_TIME,'id_code'=>$id_code,'send_userid'=>$send_userid,'status'=>$this->statuscode,'msg'=>$new_content,'return_id'=>$return,'ip'=>$ip));
 
- 		} else {
 
- 		$sms_report_db->insert(array('mobile'=>$mobile,'posttime'=>SYS_TIME,'send_userid'=>$send_userid,'status'=>'-2','msg'=>$new_content,'ip'=>$ip));
 
- 		}
 
- 		if($this->statuscode==0) {
 
- 			$barr = explode(':',$arr[1]);
 
- 			if($barr[0]=='KEY') {
 
- 				return '短信已提交,请等待审批!审批时间为:9:00-18:00。 法定假日不审批!如需帮助,请联系phpcms.cn官网!';
 
- 			}
 
- 		}
 
- 		//end
 
- 		if($return_code) {
 
- 			return $arr[0];
 
- 		} else {
 
- 			return isset($status[$arr[0]]) ? $status[$arr[0]] : $arr[0];
 
- 		}
 
- 	}
 
- 		
 
- 	/**
 
- 	 * 
 
- 	 * 获取远程内容
 
- 	 * @param $timeout 超时时间
 
- 	 */
 
- 	public function pc_file_get_contents($timeout=30) {
 
- 		
 
- 		$this->setting = array(
 
- 							'sms_uid'=>$this->userid,
 
- 							'sms_pid'=>$this->productid,
 
- 							'sms_passwd'=>$this->sms_key,	
 
- 							);
 
- 									
 
- 		$this->param = array_merge($this->param, $this->setting);
 
- 		
 
- 		$url = $this->smsapi_url.http_build_query($this->param);
 
- 		$stream = stream_context_create(array('http' => array('timeout' => $timeout)));
 
- 		return @file_get_contents($url, 0, $stream);
 
- 	}
 
- 	
 
- 	/**
 
- 	 *  post数据
 
- 	 *  @param string $url		post的url
 
- 	 *  @param int $limit		返回的数据的长度
 
- 	 *  @param string $post		post数据,字符串形式username='dalarge'&password='123456'
 
- 	 *  @param string $cookie	模拟 cookie,字符串形式username='dalarge'&password='123456'
 
- 	 *  @param string $ip		ip地址
 
- 	 *  @param int $timeout		连接超时时间
 
- 	 *  @param bool $block		是否为阻塞模式
 
- 	 *  @return string			返回字符串
 
- 	 */
 
- 	
 
- 	private function _post($url, $limit = 0, $post = '', $cookie = '', $ip = '', $timeout = 30, $block = true) {
 
- 		$return = '';
 
- 		$matches = parse_url($url);
 
- 		$host = $matches['host'];
 
- 		$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
 
- 		$port = !empty($matches['port']) ? $matches['port'] : 80;
 
- 		$siteurl = $this->_get_url();
 
- 		if($post) {
 
- 			$out = "POST $path HTTP/1.1\r\n";
 
- 			$out .= "Accept: */*\r\n";
 
- 			$out .= "Referer: ".$siteurl."\r\n";
 
- 			$out .= "Accept-Language: zh-cn\r\n";
 
- 			$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
 
- 			$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
 
- 			$out .= "Host: $host\r\n" ;
 
- 			$out .= 'Content-Length: '.strlen($post)."\r\n" ;
 
- 			$out .= "Connection: Close\r\n" ;
 
- 			$out .= "Cache-Control: no-cache\r\n" ;
 
- 			$out .= "Cookie: $cookie\r\n\r\n" ;
 
- 			$out .= $post ;
 
- 		} else {
 
- 			$out = "GET $path HTTP/1.1\r\n";
 
- 			$out .= "Accept: */*\r\n";
 
- 			$out .= "Referer: ".$siteurl."\r\n";
 
- 			$out .= "Accept-Language: zh-cn\r\n";
 
- 			$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
 
- 			$out .= "Host: $host\r\n";
 
- 			$out .= "Connection: Close\r\n";
 
- 			$out .= "Cookie: $cookie\r\n\r\n";
 
- 		}
 
- 		$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
 
- 		if(!$fp) return '';
 
- 	
 
- 		stream_set_blocking($fp, $block);
 
- 		stream_set_timeout($fp, $timeout);
 
- 		@fwrite($fp, $out);
 
- 		$status = stream_get_meta_data($fp);
 
- 	
 
- 		if($status['timed_out']) return '';	
 
- 		while (!feof($fp)) {
 
- 			if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n"))  break;				
 
- 		}
 
- 		
 
- 		$stop = false;
 
- 		while(!feof($fp) && !$stop) {
 
- 			$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
 
- 			$return .= $data;
 
- 			if($limit) {
 
- 				$limit -= strlen($data);
 
- 				$stop = $limit <= 0;
 
- 			}
 
- 		}
 
- 		@fclose($fp);
 
- 		
 
- 		//部分虚拟主机返回数值有误,暂不确定原因,过滤返回数据格式
 
- 		$return_arr = explode("\n", $return);
 
- 		if(isset($return_arr[1])) {
 
- 			$return = trim($return_arr[1]);
 
- 		}
 
- 		unset($return_arr);
 
- 		
 
- 		return $return;
 
- 	}
 
- 	/**
 
- 	 * 获取当前页面完整URL地址
 
- 	 */
 
- 	private function _get_url() {
 
- 		$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
 
- 		$php_self = $_SERVER['PHP_SELF'] ? $this->_safe_replace($_SERVER['PHP_SELF']) : $this->_safe_replace($_SERVER['SCRIPT_NAME']);
 
- 		$path_info = isset($_SERVER['PATH_INFO']) ? $this->_safe_replace($_SERVER['PATH_INFO']) : '';
 
- 		$relate_url = isset($_SERVER['REQUEST_URI']) ? $this->_safe_replace($_SERVER['REQUEST_URI']) : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$this->_safe_replace($_SERVER['QUERY_STRING']) : $path_info);
 
- 		return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 安全过滤函数
 
- 	 *
 
- 	 * @param $string
 
- 	 * @return string
 
- 	 */
 
- 	private function _safe_replace($string) {
 
- 		$string = str_replace('%20','',$string);
 
- 		$string = str_replace('%27','',$string);
 
- 		$string = str_replace('%2527','',$string);
 
- 		$string = str_replace('*','',$string);
 
- 		$string = str_replace('"','"',$string);
 
- 		$string = str_replace("'",'',$string);
 
- 		$string = str_replace('"','',$string);
 
- 		$string = str_replace(';','',$string);
 
- 		$string = str_replace('<','<',$string);
 
- 		$string = str_replace('>','>',$string);
 
- 		$string = str_replace("{",'',$string);
 
- 		$string = str_replace('}','',$string);
 
- 		$string = str_replace('\\','',$string);
 
- 		return $string;
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 
 
- 	 * 接口短信状态
 
- 	 */
 
- 	private function _sms_status() {
 
- 		pc_base::load_app_func('global','sms');
 
- 		return sms_status(0,1);
 
- 	}
 
- 	
 
- }
 
- ?>
 
 
  |