前提需求:
1.模板Id,如使用测试模板,模板id为1,如使用自己创建的模板,则使用自己创建的短信模板id即可.正式上线先申请模板ID.
2.下载官网demo
前台流程:
1.[前台]填写手机号码->填写图形验证码->判断图形验证码是否正确->获取短信验证码->填写短信验证码->判断短信验证码是否正确
2.获取短信验证码
function sendPhoneCode() { $phone = I('get.phone', '手机号'); $yanzhengma = I('get.yanzhengma', '验证码'); $data['data'] = $this->sendTemplateSMS($phone, array($yanzhengma, '10'), "模板ID"); $this->ajaxReturn($data); }
手机号码,验证码(前台js生成)
3.调用接口
使用命名空间
use Org\Util\REST;
/** * 发送模板短信 * @param to 手机号码集合,用英文逗号分开 * @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null * @param $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID */ function sendTemplateSMS($to, $datas, $tempId) { //主帐号,对应开官网发者主账号下的 ACCOUNT SID $accountSid = 'string'; //主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN $accountToken = 'string'; //应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID //在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID $appId = 'string'; //请求地址 //沙盒环境(用于应用开发调试):sandboxapp.cloopen.com //生产环境(用户应用上线使用):app.cloopen.com $serverIP = 'app.cloopen.com'; //请求端口,生产环境和沙盒环境一致 $serverPort = '8883'; //REST版本号,在官网文档REST介绍中获得。 $softVersion = '2013-12-26'; // 初始化REST SDK //global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion; $rest = new REST($serverIP, $serverPort, $softVersion); $rest->setAccount($accountSid, $accountToken); $rest->setAppId($appId); // 发送模板短信 $result = $rest->sendTemplateSMS($to, $datas, $tempId); if ($result == NULL) { return '发送失败'; exit; } if ($result->statusCode != 0) { return '发送失败'; //TODO 添加错误处理逻辑 } else { // 获取返回信息 $smsmessage = $result->TemplateSMS; return '发送成功'; //TODO 添加成功处理逻辑 } }
底层代码:
1.REST.class.php 无需修改
<?php /** * Created by PhpStorm. * User: moore0903 * Date: 2015/5/12 * Time: 9:52 */ namespace Org\Util; class REST { private $AccountSid; private $AccountToken; private $AppId; private $ServerIP; private $ServerPort; private $SoftVersion; private $Batch; //时间戳 private $BodyType = "xml";//包体格式,可填值:json 、xml private $enabeLog = true; //日志开关。可填值:true、 private $Filename="./log.txt"; //日志文件 private $Handle; function __construct($ServerIP,$ServerPort,$SoftVersion) { $this->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; } /** * 设置应用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 = "<?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 */ 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; } /** * 主帐号鉴权 */ 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; } } }