容联云通讯PHP版本的短信发送DEMO示例代码
- 6149
- PHP
- 5
- super_dodo
- 2016/07/15
最近接触的项目需要用到容联云通讯的短信接口.容联的demo还是挺详细的。为了更好的融入到框架(我使用的是Yii2框架)里面,我对接口文件稍作调整和简化。直接上代码,相信各位一看就懂了。文件名为 app\extensions\sms\SmsRonglian.php
<?php /* * http://www.yuntongxun.com */ namespace app\extensions\sms; use Yii; class SmsRonglian{ public $AccountSid = 'a************************d'; public $AccountToken = '****************************'; public $AppId = '******************************'; public $ServerIP = 'app.cloopen.com'; public $ServerPort = '8883'; public $SoftVersion = '2013-12-26'; public $Batch; //时间戳 public $BodyType = "json";//包体格式,可填值:json 、xml public $enabeLog = true; //日志开关。可填值:true、 public $Filename="./log.txt"; //日志文件 public $Handle; public function __construct($ServerIP=null,$ServerPort=null,$SoftVersion=null){ $this->Batch = date("YmdHis"); if($ServerIP) $this->ServerIP = $ServerIP; if($ServerPort) $this->ServerPort = $ServerPort; if($SoftVersion) $this->SoftVersion = $SoftVersion; $this->Handle = fopen($this->Filename, 'a'); } /** * 设置主帐号 * * @param AccountSid 主帐号 * @param AccountToken 主帐号Token */ public function setAccount($AccountSid=null,$AccountToken=null){ if($AccountSid) $this->AccountSid = $AccountSid; if($AccountToken) $this->AccountToken = $AccountToken; } /** * 设置应用ID * * @param AppId 应用ID */ public function setAppId($AppId=null){ if($AppId) $this->AppId = $AppId; } /** * 打印日志 * * @param log 日志内容 */ public function showlog($log){ if($this->enabeLog){ fwrite($this->Handle,$log."\n"); } } /** * 发起HTTPS请求 */ public 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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>"; } } curl_close($ch); return $result; } /** * 发送模板短信 * @param to 短信接收彿手机号码集合,用英文逗号分开 * @param datas 内容数据 * @param $tempId 模板Id */ public 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参数 $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; } /** * 主帐号鉴权 */ public 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; } } }
使用方法如下:
//发送短信的接口--传入手机号码和模板ID(你的验证码是123456,请在3分钟内完成注册) public function sendTplReg($phone,$tpl_id){ $code = mt_rand('100000','999999'); //验证码 $postArr = array($code,'3'); //参数 $status = '1'; //默认失败 $remark = '发送成功'; //默认失败 $sms = new SmsRonglian; $result = $sms->sendTemplateSMS($phone ,$postArr,$tpl_id); if($result == NULL){ $remark = '接口响应失败'; continue; } //发送失败--没有返回值 if($result->statusCode != 0) { //有错误信息 $status = $result->statusCode; $remark = $result->statusMsg; } $model = new SmsRonglianList; //发送数据保存到数据库中 $model->name = $phone;、 $model->tpl_id = $tpl_id; $model->code = $code; $model->status = $status; $model->add_time = time(); $model->remark = $remark; $model->isNewRecord = true; $model->save(); }
要做一个襟怀坦白,光明磊落的人,不管是在深藏内心的思想活动中,还是在表露于外的行为举止上都是这样。 —— 温塞特
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例