基于ThinkPHP3.2的短信接口

本文介绍如何在ThinkPHP3.2框架中创建并配置短信接口。首先,在Library目录下创建Test/Send.class.php文件,接着在配置文件中进行设置,实现了通过框架发送短信的功能。
摘要由CSDN通过智能技术生成

1、在ThinkPHP/Library/下建一个Test/Send.class.php

<?php
/*--------------------------------
功能:     HTTP接口 发送短信类
修改日期:   2015-02-26
说明:     http://api.sms.cn/mt/?uid=用户账号&pwd=MD5位32密码&mobile=号码&mobileids=号码编号&content=内容
状态:
    100 发送成功
    101 验证失败
    102 短信不足
    103 操作失败
    104 非法字符
    105 内容过多
    106 号码过多
    107 频率过快
    108 号码内容空
    109 账号冻结
    110 禁止频繁单条发送
    112 号码不正确
    120 系统升级
--------------------------------*/

class Send
{
    function sendSMS($http,$uid,$pwd,$mobile,$content,$mobileids,$time='',$mid='')
    {

        $data = array
            (
            'uid'=>$uid,                   //用户账号
            'pwd'=>md5($pwd.$uid),           //MD5位32密码,密码和用户名拼接字符
            'mobile'=>$mobile,             //号码
            'content'=>$content,           //内容
            'mobileids'=>$mobileids,
            'time'=>$time,                 //定时发送
            'encode'=>'utf8',               //编码格式,看自己的项目需求了 我的是utf8的   
            );
        $re= $this->postSMS($http,$data);          //POST方式提交
        return $re;
    }
    function postSMS($url,$data='')
    {
        $port="";
        $post="";
        $row = parse_url($url);
        $host = $row['host'];
        $port = $row['port'] ? $row['port']:80;
        $file = $row['path'];
        while (list($k,$v) = each($data))
        {
            $post .= rawurlencode($k)."=".rawurlencode($v)."&"; //转URL标准码
        }
        $post = substr( $post , 0 , -1 );
        $len = strlen($post);
        $fp = @fsockopen( $host ,$port, $errno, $errstr, 10);
        if (!$fp) {
            return "$errstr ($errno)\n";
        } else {
            $receive = '';
            $out = "POST $file HTTP/1.1\r\n";
            $out .= "Host: $host\r\n";
            $out .= "Content-type: application/x-www-form-urlencoded\r\n";
            $out .= "Connection: Close\r\n";
            $out .= "Content-Length: $len\r\n\r\n";
            $out .= $post;
            fwrite($fp, $out);
            while (!feof($fp)) {
                $receive .= fgets($fp, 128);
            }
            fclose($fp);
            $receive = explode("\r\n\r\n",$receive);
            unset($receive[0]);
            return implode("",$receive);
        }
    }
}
?>

2、在配置文件中写入

//短信配置
         'message' => array(                    
        'http' => 'http://api.sms.cn/mtutf8/',  //申请的短信接口平台
        'uid' => '***',                     //在云信使申请的短信验证用户账号(需要跟系统免费申请短信条数)  
        'pwd' => '*****',               //在云信使申请短信验证的用户密码
        ),

js代码

$(".getcode").click(function(){
                var tel= $("#phone").val();
                $.ajax({
                    url:"__URL__/verifyphone",
                    type:"post",
                    dataType:"json",
                    async:true,
                    data:{"tel":tel},
                    success:function(database){
                        if(database==1){

                        }
                    }
                });
            });

php代码

//验证手机号
    public function verifyphone(){
        $name = I("post.tel");
        //调用发送短信方法
        $this->phone($name);
        $this->ajaxReturn(1);
    }

     /*
    * microtime() 函数返回当前 Unix 时间戳和微秒数。
    * mt_srand() 播种 Mersenne Twister 随机数生成器。从 PHP 4.2.0 版开始,seed 参数变为可选项,当该项为空时,会被设为随时数。
    * 注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已自动完成。
    * pow — 指数表达式
    */
    //random()这个函数是我用来生成一个随机数的,
    //$numeric = 0生成一个6位的大小写字母与数字混合的字符串。$numeric = 1生成一个6位数字的字符串
     public function random($length = 6 , $numeric = 1) {
        PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);
        if($numeric) {
            $hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));
        } else {
            $hash = '';
            $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghjkmnpqrstuvwxyz';
            $max = strlen($chars) - 1;
            for($i = 0; $i < $length; $i++) {
                $hash .= $chars[mt_rand(0, $max)];
            }
        }
        return $hash;
}
    //发送短信的控制类为index
    public function phone($name){
        //以下三条读取配置文件中的内容即可
        $http = C('message.http');
        $uid = C('message.uid');
        $pwd = C('message.pwd');
        //要接受信息的手机号码,这里只是一个用于测试的手机号,找个项目需求操作即可
        $mobile=$name;
        //生成随机码
        $random = $this->random(6,1);
        //将值放入session 用于与输入的验证码进行验证
        session($mobile,$random);//消息编号,该参数用于发送短信收取状态报告用,格式为消息编号+逗号;与接收号码一一对应,可以重复出现多次。
        //这里只用一个编号即可,手机号加上微秒。
        $mobileids = intval($mobile).microtime();
        //要发送的内容
        $content = urlencode("欢迎您注册,手机验证码:{$random},3分钟内有效!【上海市农业科学院】");
        //即时发送,即:操作后就会进行发送,以下有定时发送
        //调用封装好的短信接口类。
        $_SESSION["cc"]="cc";
        import('Test.Send');
        $send = new \Send();
        $res = $send->sendSMS($http,$uid,$pwd,$mobile,$content,$mobileids);


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值