ThinkPHP框架短信接口

ThinkPHP框架采用3.1版本的。 
流程图1: 
这里写图片描述 
流程图2: 
这里写图片描述 
接口商:网易云信使 
1.公共目录的配置:

config.php
<?php
return array(
    /*------------------------------------------以下为短信接口的一些参数----------------------------------------*/
    'message' => array(
        //申请的短信接口平台
        'http' => 'http://api.sms.cn/mtutf8/',
        //在云信使申请的短信验证用户账号(需要跟系统免费申请短信条数)
        'uid' => 'y60445****',
        //在云信使申请短信验证的用户密码   
        'pwd' => 'x60445****',                                                  
        ),
);

2.发送控制类,把这个文件放在模块的控制类里面。例如Home模块。测试成功后,需要把里面的活电话,例如$mobile  = '182156*****';改为从表单中拿的值。
SendController.class.php


<?php 
namespace Home\Controller;
use Home\Controller\HomeController;
//引入文件,因为系统商提供的接口是采用原生写法,不能直接使用
include('./Extension/Send.php');
header('Content-Type:text/html; charset=utf-8');
class SendController extends CommonController{
    //发送短信的控制类为index
    public function index()
    {
        //以下三条读取配置文件中的内容即可
        $http = C('message.http');
        $uid = C('message.uid');
        $pwd = C('message.pwd');
        //要接受信息的手机号码,多个以英文逗号隔开,这里只是一个用于测试的手机号,按找个项目需求操作即可
        $mobile     = '182156*****';
        //消息编号,该参数用于发送短信收取状态报告用,格式为消息编号+逗号;与接收号码一一对应,可以重复出现多次。
        //这里只用一个编号即可,手机号加上微秒,应该是唯一的了吧。
        $mobileids  = intval('182156*****').microtime();
        //要发送的内容
        $content = urlencode('我是樱桃小丸子,感觉自己萌萌哒');
        //即时发送,即:操作后就会进行发送,以下有定时发送
        //调用封装好的短信接口类。
        $send = new \Send;
        $res = $send->sendSMS($http,$uid,$pwd,$mobile,$content,$mobileids);
        //以下为测试是否发送成功!
        if (substr($res,9,11) == 100) {
            //如果成功就,这里只是测试样式,可根据自己的需求进行调节
            echo "<script>alert('获取购物券密码成功,请注意查收短信');</script>";
        }else{
            //如果不成功
            echo "<script>alert('未知错误,请联系客服');</script>";
        }
        // echo $res;
    }

    /*--------------------------------定时发送在我的项目暂时用不到,所以先注释掉--------------------------------*/
        //定时发送
        //$time = '2010-05-27 12:11';
        /*
            $uid='';//用户名
            $pwd='';//用户明文密码
            $res = sendSMS($uid,$pwd,$mobile,$content);
            echo $res;
        */
    /*------------------------------------------------------------------------------------------------------------*/
}
 ?>
 3.短信发送商提供的接口,目录看流程图
 <?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);
        }
    }
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值