| <?php | 
|   | 
| /** | 
|  * 2016/1/8 容联云通讯拓展 @喵了个咪<wenzhenxi@vip.qq.com> | 
|  * 支持容联云通讯所有PHPSDK可用内容 | 
|  */ | 
| class SMS_Lite { | 
|   | 
|     //主帐号 | 
|     private $accountSid = ''; | 
|   | 
|     //主帐号Token | 
|     private $accountToken = ''; | 
|   | 
|     //应用Id | 
|     private $appId = ''; | 
|   | 
|     //REST版本号 | 
|     private $softVersion = '2013-12-26'; | 
|   | 
|     //请求端口 | 
|     private $serverPort = '8883'; | 
|   | 
|     //请求地址,格式如下,不需要写https:// | 
|     private $serverIP = 'sandboxapp.cloopen.com'; | 
|   | 
|     //SDK实例 | 
|     private $SMS_SDK_REST; | 
|   | 
|     //DEBUG | 
|     private $debug; | 
|   | 
|     /** | 
|      * SMS_Lite 构造方法初始化配置 | 
|      * | 
|      * @param  $cofAddress string 配置文件地址 | 
|      * @param  $debug      bool   是否开启调试模式 | 
|      */ | 
|     public function __construct($cofAddress, $debug = false) { | 
|   | 
|         $this->debug = $debug; | 
|   | 
|         //获得配置项 | 
|         $config = DI()->config->get($cofAddress); | 
|         //配置项是否存在 | 
|         if (!$config) { | 
|             throw new PhalApi_Exception_BadRequest(T('Config There is no')); | 
|         } | 
|         //主帐号是否配置 | 
|         if ($this->getIndex($config, 'accountSid')) { | 
|             $this->accountSid = $config['accountSid']; | 
|         } else { | 
|             throw new PhalApi_Exception_BadRequest(T('accountSid There is no')); | 
|         } | 
|         //主帐号Token是否配置 | 
|         if ($this->getIndex($config, 'accountToken')) { | 
|             $this->accountToken = $config['accountToken']; | 
|         } else { | 
|             throw new PhalApi_Exception_BadRequest(T('accountSid There is no')); | 
|         } | 
|         //应用Id是否配置 | 
|         if ($this->getIndex($config, 'appId')) { | 
|             $this->appId = $config['appId']; | 
|         } else { | 
|             throw new PhalApi_Exception_BadRequest(T('accountSid There is no')); | 
|         } | 
|         //请求端口 | 
|         if ($this->getIndex($config, 'serverPort')) { | 
|             $this->serverPort = $config['serverPort']; | 
|         } | 
|         //请求地址 | 
|         if ($this->getIndex($config, 'serverIP')) { | 
|             $this->serverIP = $config['serverIP']; | 
|         } | 
|   | 
|         //初始化SDK | 
|         $this->SMS_SDK_REST = new SMS_SDK_REST($this->serverIP, $this->serverPort, $this->softVersion); | 
|         //设置主帐号 | 
|         $this->SMS_SDK_REST->setAccount($this->accountSid, $this->accountToken); | 
|         //设置应用ID | 
|         $this->SMS_SDK_REST->setAppId($this->appId); | 
|     } | 
|   | 
|     /** | 
|      * 语音验证码 | 
|      * | 
|      * @param verifyCode 验证码内容,为数字和英文字母,不区分大小写,长度4-8位 | 
|      * @param playTimes  播放次数,1-3次 | 
|      * @param to         接收号码 | 
|      * @param displayNum 显示的主叫号码 | 
|      * @param respUrl    语音验证码状态通知回调地址,云通讯平台将向该Url地址发送呼叫结果通知 | 
|      * @param lang       语言类型。取值en(英文)、zh(中文),默认值zh。 | 
|      * @param userData   第三方私有数据 | 
|      */ | 
|     function voiceVerify($verifyCode, $playTimes, $to, $displayNum, $respUrl, $lang, $userData) { | 
|   | 
|         //调用语音验证码接口 | 
|         $result = $this->SMS_SDK_REST->voiceVerify($verifyCode, $playTimes, $to, $displayNum, $respUrl, $lang, $userData); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         //如果是Debug模式则打印返回信息 | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 发送模板短信 | 
|      * | 
|      * @param to      手机号码集合,用英文逗号分开 | 
|      * @param datas   内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null | 
|      * @param $tempId 模板Id | 
|      */ | 
|     function sendTemplateSMS($to, $datas, $tempId) { | 
|   | 
|         // 发送模板短信 | 
|         $result = $this->SMS_SDK_REST->sendTemplateSMS($to, $datas, $tempId); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         //如果是Debug模式则打印返回信息 | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 短信模板查询 | 
|      * | 
|      * @param templateId     模板ID | 
|      */ | 
|     function QuerySMSTemplate($templateId) { | 
|   | 
|         // 调用短信模板查询接口 | 
|         $result = $this->SMS_SDK_REST->QuerySMSTemplate($templateId); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|   | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 呼叫状态查询 | 
|      * | 
|      * @param callid     呼叫Id | 
|      * @param action     查询结果通知的回调url地址 | 
|      */ | 
|     function QueryCallState($callid, $action) { | 
|   | 
|         // 调用呼叫状态查询接口 | 
|         $result = $this->SMS_SDK_REST->QueryCallState($callid, $action); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|   | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 主帐号信息查询 | 
|      */ | 
|     function queryAccountInfo() { | 
|   | 
|         // 调用主帐号信息查询接口 | 
|         $result = $this->SMS_SDK_REST->queryAccountInfo(); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 语音文件上传 | 
|      * | 
|      * @param filename     文件名 | 
|      * @param path         文件所在路径 | 
|      */ | 
|     function MediaFileUpload($filename, $path) { | 
|   | 
|         $filePath = $path; | 
|         $fh       = fopen($filePath, "rb"); | 
|         $body     = fread($fh, filesize($filePath)); | 
|         fclose($fh); | 
|   | 
|         // 调用语音文件上传接口 | 
|         $result = $this->SMS_SDK_REST->MediaFileUpload($filename, $body); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 外呼通知 | 
|      * | 
|      * @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) { | 
|   | 
|         //调用外呼通知接口 | 
|         echo "Try to make a landingcall,called is $to <br/>"; | 
|         $result = $this->SMS_SDK_REST->landingCall($to, $mediaName, $mediaTxt, $displayNum, $playTimes, $respUrl, $userData, $maxCallTime, $speed, $volume, $pitch, $bgsound); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * IVR外呼 | 
|      * | 
|      * @param number   待呼叫号码,为Dial节点的属性 | 
|      * @param userdata 用户数据,在<startservice>通知中返回,只允许填写数字字符,为Dial节点的属性 | 
|      * @param record   是否录音,可填项为true和false,默认值为false不录音,为Dial节点的属性 | 
|      */ | 
|     function ivrDial($number, $userdata, $record) { | 
|   | 
|         // 调用IVR外呼接口 | 
|         $result = $this->SMS_SDK_REST->ivrDial($number, $userdata, $record); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 话单下载 | 
|      * | 
|      * @param date       day 代表前一天的数据(从00:00 – 23:59) | 
|      * @param keywords   客户的查询条件,由客户自行定义并提供给云通讯平台。默认不填忽略此参数 | 
|      */ | 
|     function billRecords($date, $keywords) { | 
|   | 
|         // 调用话单下载接口 | 
|         $result = $this->SMS_SDK_REST->billRecords($date, $keywords); | 
|         if ($result == NULL) { | 
|             throw new PhalApi_Exception_BadRequest(T("Error SMS_SDK_REST")); | 
|         } | 
|         if ($this->debug) { | 
|             $this->showarr($result); | 
|         } | 
|         return $result; | 
|     } | 
|   | 
|     /** | 
|      * 数组对象取值相关 - 避免出错 | 
|      */ | 
|     public function getIndex($arr, $key, $default = '') { | 
|   | 
|         return isset($arr[$key]) ? $arr[$key] : $default; | 
|     } | 
|   | 
|     /** | 
|      * 直接显示内容数组 | 
|      */ | 
|     public function showarr($a) { | 
|   | 
|         echo('<pre>'); | 
|         print_r($a); | 
|         echo('</pre>'); | 
|     } | 
| } |