<?php
class Sms {
private $AccountSid;
private $AccountToken;
private $AppId;
private $SubAccountSid;
private $SubAccountToken;
private $ServerIP;
private $ServerPort;
private $SoftVersion;
private $Batch; private $BodyType = "xml" private $enabeLog = true; private $Filename="../log.txt"; private $Handle;
function __construct($config)
{ $this->Batch = date("YmdHis");
$this->ServerIP = $config['serverIP'];
$this->ServerPort = $config['serverPort'];
$this->SoftVersion = $config['softVersion'];
$this->SubAccountSid = $config['accountSid'];
$this->SubAccountToken = $config['accountToken'];
$this->AppId = $config['appId'];
$this->Handle = fopen($this->Filename, 'a');
}
function setAccount($AccountSid,$AccountToken)
{
$this->AccountSid = $AccountSid;
$this->AccountToken = $AccountToken;
}
function setSubAccount($SubAccountSid,$SubAccountToken){
$this->SubAccountSid = $SubAccountSid;
$this->SubAccountToken = $SubAccountToken;
}
function setAppId($AppId){
$this->AppId = $AppId;
}
function showlog($log){
if($this->enabeLog){
fwrite($this->Handle,$log."\n");
}
}
function curl_post($url,$data,$header,$post=1)
{
$ch = curl_init();
$res= curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, $post);
if($post)
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result = curl_exec ($ch);
if($result == FALSE){
if($this->BodyType=='json'){
$result = "{\"statusCode\":\"172001\",\"statusMsg\":\"网络错误\"}";
} else {
$result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>";
}
}
curl_close($ch);
return $result;
}
function createSubAccount($friendlyName)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','friendlyName':'$friendlyName'}";
}else{
$body="<SubAccount>
<appId>$this->AppId</appId>
<friendlyName>$friendlyName</friendlyName>
</SubAccount>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SubAccounts?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function getSubAccounts($startNo,$offset)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
$body="
<SubAccount>
<appId>$this->AppId</appId>
<startNo>$startNo</startNo>
<offset>$offset</offset>
</SubAccount>";
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','startNo':'$startNo','offset':'$offset'}";
}else{
$body="
<SubAccount>
<appId>$this->AppId</appId>
<startNo>$startNo</startNo>
<offset>$offset</offset>
</SubAccount>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/GetSubAccounts?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function querySubAccount($friendlyName)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','friendlyName':'$friendlyName'}";
}else{
$body="
<SubAccount>
<appId>$this->AppId</appId>
<friendlyName>$friendlyName</friendlyName>
</SubAccount>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/QuerySubAccountByName?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function sendTemplateSMS($to,$datas,$tempId)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$data="";
for($i=0;$i<count($datas);$i++){
$data = $data. "'".$datas[$i]."',";
}
$body= "{'to':'$to','templateId':'$tempId','appId':'$this->AppId','datas':[".$data."]}";
}else{
$data="";
for($i=0;$i<count($datas);$i++){
$data = $data. "<data>".$datas[$i]."</data>";
}
$body="<TemplateSMS>
<to>$to</to>
<appId>$this->AppId</appId>
<templateId>$tempId</templateId>
<datas>".$data."</datas>
</TemplateSMS>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
if($datas->statusCode==0){
if($this->BodyType=="json"){
$datas->TemplateSMS =$datas->templateSMS;
unset($datas->templateSMS);
}
}
return $datas;
}
function landingCall($to,$mediaName,$mediaTxt,$displayNum,$playTimes,$respUrl,$userData,$maxCallTime,$speed,$volume,$pitch,$bgsound)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'playTimes':'$playTimes','mediaTxt':'$mediaTxt','mediaName':'$mediaName','to':'$to','appId':'$this->AppId','displayNum':'$displayNum','respUrl':'$respUrl',
'userData':'$userData','maxCallTime':'$maxCallTime','speed':'$speed','volume':'$volume','pitch':'$pitch','bgsound':'$bgsound'}";
}else{
$body="<LandingCall>
<to>$to</to>
<mediaName>$mediaName</mediaName>
<mediaTxt>$mediaTxt</mediaTxt>
<appId>$this->AppId</appId>
<displayNum>$displayNum</displayNum>
<playTimes>$playTimes</playTimes>
<respUrl>$respUrl</respUrl>
<userData>$userData</userData>
<maxCallTime>$maxCallTime</maxCallTime>
<speed>$speed</speed>
<volume>$volume</volume>
<pitch>$pitch</pitch>
<bgsound>$bgsound</bgsound>
</LandingCall>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/Calls/LandingCalls?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function voiceVerify($verifyCode,$playTimes,$to,$displayNum,$respUrl,$lang,$userData)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','verifyCode':'$verifyCode','playTimes':'$playTimes','to':'$to','respUrl':'$respUrl','displayNum':'$displayNum',
'lang':'$lang','userData':'$userData'}";
}else{
$body="<VoiceVerify>
<appId>$this->AppId</appId>
<verifyCode>$verifyCode</verifyCode>
<playTimes>$playTimes</playTimes>
<to>$to</to>
<respUrl>$respUrl</respUrl>
<displayNum>$displayNum</displayNum>
<lang>$lang</lang>
<userData>$userData</userData>
</VoiceVerify>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/Calls/VoiceVerify?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
/**
* IVR外呼
* @param number 待呼叫号码,为Dial节点的属性
* @param userdata 用户数据,在<startservice>通知中返回,只允许填写数字字符,为Dial节点的属性
* @param record 是否录音,可填项为true和false,默认值为false不录音,为Dial节点的属性
*/
function ivrDial($number,$userdata,$record)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
$body=" <Request>
<Appid>$this->AppId</Appid>
<Dial number='$number' userdata='$userdata' record='$record'></Dial>
</Request>";
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/ivr/dial?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/xml","Content-Type:application/xml;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
$datas = simplexml_load_string(trim($result," \t\n\r"));
return $datas;
}
function billRecords($date,$keywords)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','date':'$date','keywords':'$keywords'}";
}else{
$body="<BillRecords>
<appId>$this->AppId</appId>
<date>$date</date>
<keywords>$keywords</keywords>
</BillRecords>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/BillRecords?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function queryAccountInfo()
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/AccountInfo?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,"",$header,0);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function QuerySMSTemplate($templateId)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'appId':'$this->AppId','templateId':'$templateId'}";
}else{
$body="<Request>
<appId>$this->AppId</appId>
<templateId>$templateId</templateId>
</Request>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/QuerySMSTemplate?sig=$sig";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function QueryCallState($callid,$action)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
if($this->BodyType=="json"){
$body= "{'Appid':'$this->AppId','QueryCallState':{'callid':'$callid','action':'$action'}}";
}else{
$body="<Request>
<Appid>$this->AppId</Appid>
<QueryCallState callid ='$callid' action='$action'/>
</Request>";
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/ivr/call?sig=$sig&callid=$callid";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function CallResult($callSid)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/CallResult?sig=$sig&callsid=$callSid";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");
$result = $this->curl_post($url,"",$header,0);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function MediaFileUpload($filename,$body)
{
$auth=$this->accAuth();
if($auth!=""){
return $auth;
}
$this->showlog("request body = ".$body);
$sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));
$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/Calls/MediaFileUpload?sig=$sig&appid=$this->AppId&filename=$filename";
$this->showlog("request url = ".$url);
$authen = base64_encode($this->AccountSid . ":" . $this->Batch);
$header = array("Accept:application/$this->BodyType","Content-Type:application/octet-stream","Authorization:$authen");
$result = $this->curl_post($url,$body,$header);
$this->showlog("response body = ".$result);
if($this->BodyType=="json") $datas=json_decode($result);
}else{ $datas = simplexml_load_string(trim($result," \t\n\r"));
}
return $datas;
}
function subAuth()
{
if($this->ServerIP==""){
$data = new stdClass();
$data->statusCode = '172004';
$data->statusMsg = 'serverIP为空';
return $data;
}
if($this->ServerPort<=0){
$data = new stdClass();
$data->statusCode = '172005';
$data->statusMsg = '端口错误(小于等于0)';
return $data;
}
if($this->SoftVersion==""){
$data = new stdClass();
$data->statusCode = '172013';
$data->statusMsg = '版本号为空';
return $data;
}
if($this->SubAccountSid==""){
$data = new stdClass();
$data->statusCode = '172008';
$data->statusMsg = '子帐号为空';
return $data;
}
if($this->SubAccountToken==""){
$data = new stdClass();
$data->statusCode = '172009';
$data->statusMsg = '子帐号令牌为空';
return $data;
}
if($this->AppId==""){
$data = new stdClass();
$data->statusCode = '172012';
$data->statusMsg = '应用ID为空';
return $data;
}
}
function accAuth()
{
if($this->ServerIP==""){
$data = new stdClass();
$data->statusCode = '172004';
$data->statusMsg = 'serverIP为空';
return $data;
}
if($this->ServerPort<=0){
$data = new stdClass();
$data->statusCode = '172005';
$data->statusMsg = '端口错误(小于等于0)';
return $data;
}
if($this->SoftVersion==""){
$data = new stdClass();
$data->statusCode = '172013';
$data->statusMsg = '版本号为空';
return $data;
}
if($this->AccountSid==""){
$data = new stdClass();
$data->statusCode = '172006';
$data->statusMsg = '主帐号为空';
return $data;
}
if($this->AccountToken==""){
$data = new stdClass();
$data->statusCode = '172007';
$data->statusMsg = '主帐号令牌为空';
return $data;
}
if($this->AppId==""){
$data = new stdClass();
$data->statusCode = '172012';
$data->statusMsg = '应用ID为空';
return $data;
}
}
}
?>