<?php
/**
* 短信发送类
*/
class Sms{
public $config;
/**
* 发送短信
* @param int $phone 手机号码
* @param int $content 正文 带 %s替换
* @param int $code 验证码
* @param int $code_limit 验证码位数
* @return array
*
* @example
* $content='验证码:%s';
* $result=$this->sms->send(15918721789,$content,$code);
* var_dump($result,$content,$code);
*/
public function send($phone,&$content,&$code,$code_limit=6){
//生成验证码
$code=$this->generateMsgAuthCode($code_limit);
//正文
$content = sprintf($content, $code);
//默认只有玄武
//return array("result"=>true,"info"=>'');
return $this->xuanWuSms($phone,$content);
}
/**
* 玄武科技短信接口
* @param int $phone 手机号码
* @param int $content 正文
* @return array
*/
public function xuanWuSms($phone,$content){
$msm_url = 'http://xxxx/cgi-bin/sendsms?';
$msm_account = $this->config['xuanwu']['account'];
$msm_pwd = $this->config['xuanwu']['pwd'];
$url=$msm_url."username=".$msm_account."&password=";
$url.=$msm_pwd."&to=".$phone."&text=".urlencode(iconv('utf-8', 'gb2312', $content))."&subid=&msgtype=1";
$send=$this->__httpGet($url);
if ($send===false){
$retrun=array("result"=>false,"info"=>"接口请求失败!");
return $retrun;
}
$result=false;
$info="";
switch ($send){
case "0" :
$result=true;
$info="发送成功!";
break;
case "-2" :
$info="发送参数填定不正确!";
break;
case "-3" :
$info="用户载入延迟!";
break;
case "-6" :
$info="密码错误!";
break;
case "-7" :
$info="用户不存在!";
break;
case "-11" :
$info="发送号码数理大于最大发送数量";
break;
case "-12" :
$info="余额不足";
break;
case "-99" :
$info="内部处理错误";
break;
default:
$result=false;
$info="其他错误".(string)$result;
break;
}
return array("result"=>$result,"info"=>$info);
}
/**
* 生成验证码
*/
public function generateMsgAuthCode($limit) {
$rand_array = range(0, 9);
shuffle($rand_array); //调用现成的数组随机排列函数
return implode('', array_slice($rand_array, 0, $limit)); //截取前$limit个
}
/**
* GET 请求
* @param string $url
*/
private function __httpGet($url) {
$oCurl = curl_init();
if (stripos($url, "https://") !== FALSE) {
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if (intval($aStatus["http_code"]) == 200) {
return $sContent;
} else {
return false;
}
}
}