基于PHP实现短信验证码接口(容联运通讯)

5年以前  |  阅读数:371 次  |  编程语言:PHP 

自己也是刚刚研究,希望对也在研究的伙伴有帮助。

步骤:

1、登录荣联运通讯注册获取ACCOUNT SID、AUTH TOKEN、Rest URL(生产)、AppID(默认);

2、注册测试用手机号码(先注册测试号码方可使用);

3、下载demo示例,并将代码放到项目中(最好单独建文件夹存储)。

代码区:

一、新建test.app.php(测试用控制器)


    <?php
    /*
    * 短信接口测试
    */
    class TestApp extends ShoppingbaseApp{
    public function index(){
    $this->display('test.html');
    }
    public function get_info()
    {
    include_once(ROOT_PATH.'/includes/rly_message/rest.app.php');//引入模板文件
    //主帐号,对应开官网发者主账号下的 ACCOUNT SID
    $accountSid = '';
    //主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN
    $accountToken = '';
    //应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID
    //在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID
    $appId ='';
    //请求地址
    //沙盒环境(用于应用开发调试):sandboxapp.cloopen.com
    //生产环境(用户应用上线使用):app.cloopen.com
    $serverIP ='app.cloopen.com';
    //请求端口,生产环境和沙盒环境一致
    $serverPort ='8883';
    //REST版本号,在官网文档REST介绍中获得。
    $softVersion ='2013-12-26';
    //global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;
    $phone_mob = isset($_GET['phone_mob']) ? $_GET['phone_mob'] : '';
    if($phone_mob){
    $this->sendTemplateSMS($phone_mob,array('3519','5'),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID
    }
    }
    /**
    * 发送模板短信
    * @param to 手机号码集合,用英文逗号分开
    * @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null
    * @param $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID
    */ 
    public function sendTemplateSMS($to,$datas,$tempId,$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion)
    {
    // 初始化REST SDK
    $rest = new RestApp($serverIP,$serverPort,$softVersion);
    $rest->setAccount($accountSid,$accountToken);
    $rest->setAppId($appId);
    // 发送模板短信
    echo "Sending TemplateSMS to $to <br/>";
    $result = $rest->sendTemplateSMS($to,$datas,$tempId);
    if($result == NULL ) {
    echo "result error!";
    exit();
    }
    if($result->statusCode!=0) {
    echo "error code :" . $result->statusCode . "<br>";
    echo "error msg :" . $result->statusMsg . "<br>";
    //TODO 添加错误处理逻辑
    }else{
    echo "Sendind TemplateSMS success!<br/>";
    // 获取返回信息
    $smsmessage = $result->TemplateSMS;
    echo "dateCreated:".$smsmessage->dateCreated."<br/>";
    echo "smsMessageSid:".$smsmessage->smsMessageSid."<br/>";
    //TODO 添加成功处理逻辑
    }
    }
    }

二、模板文件(rest.app.php可根据自己使用的框架重新命名,也可直接使用demo原先的名字)


    <?php
    class RestApp {
    private $AccountSid ; 
    private $AccountToken ; 
    private $AppId ; 
    private $ServerIP; // ='app.cloopen.com'
    private $ServerPort ; //='8883'
    private $SoftVersion ; // ='2013-12-26'
    private $Batch; //时间戳
    private $BodyType = "xml";//包体格式,可填值:json 、xml
    private $enabeLog = true; //日志开关。可填值:true、
    private $Filename="./log.txt"; //日志文件
    private $Handle; 
    function __construct($ServerIP,$ServerPort,$SoftVersion) 
    {
    $this->RestApp($ServerIP,$ServerPort,$SoftVersion);
    }
    function RestApp($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;
    } 
    }
    }
    ?>

三、前台模板代码(test.html)


    <div style="height:100px;border:1px solid gray;text-align:center;padding-top:20px;">
    <form action="" method="post">
    请输入手机号码:<input type="text" name="phone_mob" ><input type="button" name="btn" value="点击获取验证码"><br />
    输入验证码:<input type="text" name="yzm" value=""><br />
    <input type="submit" name="sbt" value="提交">
    </form>
    </div>

四、js代码


    <script type="text/javascript">
    $(function(){
    $('input[name=btn]').on('click',function(){
    var phone_mob = $('input[name=phone_mob]').val();
    $.ajax({
    type: "GET",
    url: "index.php?app=test&act;=get_info",//请求后台的URL地址
    dataType: "json",
    data:{'phone_mob' : phone_mob},
    success:function(data){
    if(data.done && data.retval)
    { 
    //console.log(data.retval);
    alert('成功!');
    }
    }
    });
    }); 
    });
    </script>

以上所述是小编给大家介绍的基于PHP实现短信验证码接口(容联运通讯),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例