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