| 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);	}	}?>
 |