容联云通讯PHP版本的短信发送DEMO示例代码
- 6779
- 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的使用示例

