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);
}
}
}
?>