容联云通讯PHP版本的短信发送DEMO示例代码

  •   
  • 6147
  • 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&#91;$i&#93;."',"; 
					 }
					 $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();
}

要做一个襟怀坦白,光明磊落的人,不管是在深藏内心的思想活动中,还是在表露于外的行为举止上都是这样。 —— 温塞特