Batch = date("YmdHis"); $this->ServerIP = $ServerIP; $this->ServerPort = $ServerPort; $this->SoftVersion = $SoftVersion; $this->Handle = fopen($this->Filename, 'a'); } /** * 设置主帐号 * * @param AccountSid 主帐号 * @param AccountToken 主帐号Token */ function setAccount($AccountSid, $AccountToken) { $this->AccountSid = $AccountSid; $this->AccountToken = $AccountToken; } /** * 设置子帐号 * * @param SubAccountSid 子帐号 * @param SubAccountToken 子帐号Token * @param VoIPAccount VoIP帐号 * @param VoIPPassword VoIP密码 */ function setSubAccount($SubAccountSid, $SubAccountToken, $VoIPAccount, $VoIPPassword) { $this->SubAccountSid = $SubAccountSid; $this->SubAccountToken = $SubAccountToken; $this->VoIPAccount = $VoIPAccount; $this->VoIPPassword = $VoIPPassword; } /** * 设置应用ID * * @param AppId 应用ID */ function setAppId($AppId) { $this->AppId = $AppId; } /** * 打印日志 * * @param log 日志内容 */ function showlog($log) { if ($this->enabeLog) { fwrite($this->Handle, $log . "\n"); } } /** * 发起HTTPS请求 */ function curl_post($url, $data, $header, $post = 1) { //初始化curl $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 = "172001网络错误"; } } curl_close($ch); return $result; } /** * 创建子帐号 * * @param friendlyName 子帐号名称 */ function createSubAccount($friendlyName) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 if ($this->BodyType == "json") { $body = "{'appId':'$this->AppId','friendlyName':'$friendlyName'}"; } else { $body = " $this->AppId $friendlyName "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SubAccounts?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐号Id + 英文冒号 + 时间戳 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 获取子帐号 * * @param startNo 开始的序号,默认从0开始 * @param offset 一次查询的最大条数,最小是1条,最大是100条 */ function getSubAccounts($startNo, $offset) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 $body = " $this->AppId $startNo $offset "; if ($this->BodyType == "json") { $body = "{'appId':'$this->AppId','startNo':'$startNo','offset':'$offset'}"; } else { $body = " $this->AppId $startNo $offset "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/GetSubAccounts?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 子帐号信息查询 * * @param friendlyName 子帐号名称 */ function querySubAccount($friendlyName) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 if ($this->BodyType == "json") { $body = "{'appId':'$this->AppId','friendlyName':'$friendlyName'}"; } else { $body = " $this->AppId $friendlyName "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/QuerySubAccountByName?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 发送模板短信 * * @param to 短信接收彿手机号码集合,用英文逗号分开 * @param datas 内容数据 * @param $tempId 模板Id */ 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 . "" . $datas[$i] . ""; } $body = " $to $this->AppId $tempId " . $data . " "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } //重新装填数据 if ($datas->statusCode == 0) { if ($this->BodyType == "json") { $datas->TemplateSMS = $datas->templateSMS; unset($datas->templateSMS); } } return $datas; } /** * 双向回呼 * * @param from 主叫电话号码 * @param to 被叫电话号码 * @param customerSerNum 被叫侧显示的客服号码 * @param fromSerNum 主叫侧显示的号码 * @param promptTone 自定义回拨提示音 * @param userData 第三方私有数据 * @param maxCallTime 最大通话时长 * @param hangupCdrUrl 实时话单通知地址 * @param alwaysPlay 是否一直播放提示音 * @param terminalDtmf 用于终止播放promptTone参数定义的提示音 * @param needBothCdr 是否给主被叫发送话单 * @param needRecord 是否录音 * @param countDownTime 设置倒计时时间 * @param countDownPrompt 倒计时时间到后播放的提示音 */ function callBack($from, $to, $customerSerNum, $fromSerNum, $promptTone, $alwaysPlay, $terminalDtmf, $userData, $maxCallTime, $hangupCdrUrl, $needBothCdr, $needRecord, $countDownTime, $countDownPrompt) { //子帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->subAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 if ($this->BodyType == "json") { $body = "{'from':'$from','to':'$to','customerSerNum':'$customerSerNum','fromSerNum':'$fromSerNum','promptTone':'$promptTone','userData':'$userData','maxCallTime':'$maxCallTime','hangupCdrUrl':'$hangupCdrUrl', 'alwaysPlay':'$alwaysPlay','terminalDtmf':'$terminalDtmf','needBothCdr':'$needBothCdr', 'needRecord':'$needRecord','countDownTime':'$$countDownTime','countDownPrompt':'$countDownPrompt'}"; } else { $body = " $from $to $customerSerNum $fromSerNum $promptTone $userData $maxCallTime $hangupCdrUrl $alwaysPlay $terminalDtmf $needBothCdr $needRecord $countDownTime $countDownPrompt "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->SubAccountSid . $this->SubAccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/SubAccounts/$this->SubAccountSid/Calls/Callback?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:子帐号Id + 英文冒号 + 时间戳 $authen = base64_encode($this->SubAccountSid . ":" . $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 外呼通知 * * @param to 被叫号码 * @param mediaName 语音文件名称,格式 wav。与mediaTxt不能同时为空。当不为空时mediaTxt属性失效。 * @param mediaTxt 文本内容 * @param displayNum 显示的主叫号码 * @param playTimes 循环播放次数,1-3次,默认播放1次。 * @param respUrl 外呼通知状态通知回调地址,云通讯平台将向该Url地址发送呼叫结果通知。 * @param userData 用户私有数据 * @param maxCallTime 最大通话时长 * @param speed 发音速度 * @param volume 音量 * @param pitch 音调 * @param bgsound 背景音编号 */ 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 = " $to $mediaName $mediaTxt $this->AppId $displayNum $playTimes $respUrl $userData $maxCallTime $speed $volume $pitch $bgsound "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/Calls/LandingCalls?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 语音验证码 * * @param verifyCode 验证码内容,为数字和英文字母,不区分大小写,长度4-8位 * @param playTimes 播放次数,1-3次 * @param to 接收号码 * @param displayNum 显示的主叫号码 * @param respUrl 语音验证码状态通知回调地址,云通讯平台将向该Url地址发送呼叫结果通知 * @param lang 语言类型 * @param userData 第三方私有数据 */ 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 = " $this->AppId $verifyCode $playTimes $to $respUrl $displayNum $lang $userData "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/Calls/VoiceVerify?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * IVR外呼 * * @param number 待呼叫号码,为Dial节点的属性 * @param userdata 用户数据,在通知中返回,只允许填写数字字符,为Dial节点的属性 * @param record 是否录音,可填项为true和false,默认值为false不录音,为Dial节点的属性 */ function ivrDial($number, $userdata, $record) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 $body = " $this->AppId "; $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/ivr/dial?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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")); // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 话单下载 * * @param date day 代表前一天的数据(从00:00 – 23:59) * @param keywords 客户的查询条件,由客户自行定义并提供给云通讯平台。默认不填忽略此参数 */ 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 = " $this->AppId $date $keywords "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/BillRecords?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 主帐号信息查询 */ function queryAccountInfo() { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/AccountInfo?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 短信模板查询 * * @param date templateId 模板ID */ function QuerySMSTemplate($templateId) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 if ($this->BodyType == "json") { $body = "{'appId':'$this->AppId','templateId':'$templateId'}"; } else { $body = " $this->AppId $templateId "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/QuerySMSTemplate?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 取消回拨 * * @param callSid 一个由32个字符组成的电话唯一标识符 * @param type 0: 任意时间都可以挂断电话;1 :被叫应答前可以挂断电话,其他时段返回错误代码;2: 主叫应答前可以挂断电话,其他时段返回错误代码;默认值为0。 */ function CallCancel($callSid, $type) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->subAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 if ($this->BodyType == "json") { $body = "{'appId':'$this->AppId','callSid':'$callSid','type':'$type'}"; } else { $body = " $this->AppId $callSid $type "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->SubAccountSid . $this->SubAccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/SubAccounts/$this->SubAccountSid/Calls/CallCancel?sig=$sig"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $authen = base64_encode($this->SubAccountSid . ":" . $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 呼叫状态查询 * * @param callid 呼叫Id * @param action 查询结果通知的回调url地址 */ 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 = " $this->AppId "; } $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/ivr/call?sig=$sig&callid=$callid"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 呼叫结果查询 * * @param callSid 呼叫Id */ function CallResult($callSid) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $url = "https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/CallResult?sig=$sig&callsid=$callSid"; $this->showlog("request url = " . $url); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 语音文件上传 * * @param filename 文件名 * @param body 二进制串 */ function MediaFileUpload($filename, $body) { //主帐号鉴权信息验证,对必选参数进行判空。 $auth = $this->accAuth(); if ($auth != "") { return $auth; } // 拼接请求包体 $this->showlog("request body = " . $body); // 大写的sig参数 $sig = strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch)); // 生成请求URL $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); // 生成授权:主帐户Id + 英文冒号 + 时间戳。 $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") {//JSON格式 $datas = json_decode($result); } else { //xml格式 $datas = simplexml_load_string(trim($result, " \t\n\r")); } // if($datas == FALSE){ // $datas = new stdClass(); // $datas->statusCode = '172003'; // $datas->statusMsg = '返回包体错误'; // } return $datas; } /** * 子帐号鉴权 */ function subAuth() { if ($this->ServerIP == "") { $data = new stdClass(); $data->statusCode = '172004'; $data->statusMsg = 'IP为空'; 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 = 'IP为空'; 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; } } } ?>