说明
本系统已完成对接测试,仅用于学习用途(当然当前只有企业才能正常使用短信系统),欢迎使用
源码说明
第一次有两个文件
login.php
是登录页面,我把密码隐藏在css里面了,更简便
send.php
提交页面,有接口所有api等信息
第三个文件 code.txt
你访问后自动生成,是用于控制额度的,直接改这个文件即可
代码
Login.php
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>系统登录</title>
<style>
*{margin:0;padding:0;box-sizing:border-box;}
body{background:#f5f5f5;padding:20px;font-family:Arial;}
.login-box{max-width:400px;margin:50px auto;background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 10px rgba(0,0,0,0.1);}
h2{text-align:center;margin-bottom:30px;color:#333;}
.form-group{margin-bottom:20px;}
input{width:100%;padding:12px;border:1px solid #ddd;border-radius:4px;font-size:16px;}
button{width:100%;padding:12px;background:#28a745;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;}
button:hover{background:#218838;}
.error{margin-top:15px;text-align:center;color:#dc3545;font-size:14px;}
/* 登录密码(修改这里改密码,保留引号) */
.pwd-container{--sys-pwd: "123456";}
</style>
</head>
<body>
<div class="login-box">
<h2>短信发送系统登录</h2>
<form id="loginForm" method="post" action="send.php">
<div class="form-group">
<input type="password" id="pwd" name="pwd" placeholder="请输入登录密码" required>
</div>
<button type="submit">登录</button>
<div class="error" id="errorMsg"></div>
</form>
</div>
<script>
// 读取CSS密码验证
const pwdContainer = document.createElement('div');
pwdContainer.className = 'pwd-container';
document.body.appendChild(pwdContainer);
const sysPwd = getComputedStyle(pwdContainer).getPropertyValue('--sys-pwd').trim().replace(/"/g, '');
document.body.removeChild(pwdContainer);
document.getElementById('loginForm').addEventListener('submit', function(e){
const inputPwd = document.getElementById('pwd').value;
if(inputPwd !== sysPwd){
e.preventDefault();
document.getElementById('errorMsg').textContent = '密码错误,请重试';
}
});
</script>
</body>
</html>
里面的这条代码设置密码
/* 登录密码(修改这里改密码,保留引号) */
.pwd-container{--sys-pwd: "123456";}
Send.php
<?php
// 初始化会话,校验登录
session_start();
// 未登录/密码错误,跳回登录页
if(empty($_POST['pwd']) && empty($_SESSION['is_login'])){
header('Location: login.php');
exit;
}
// 登录成功,存入会话
if(!empty($_POST['pwd'])){
$_SESSION['is_login'] = 1;
}
// 余额处理
$balance = 0;
$balanceFile = 'code.txt';
// 首次创建余额文件(默认100条,可修改)
if(!file_exists($balanceFile)){
file_put_contents($balanceFile, '100');
$balance = 100;
}else{
$balance = intval(file_get_contents($balanceFile));
}
// 退出登录
if(isset($_GET['act']) && $_GET['act'] == 'logout'){
session_destroy();
header('Location: login.php');
exit;
}
// AJAX提交接口(单独处理短信发送,不渲染页面)
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['type']) && $_POST['type'] == 'sendSms'){
$phone = trim($_POST['phone']);
$address = trim($_POST['address']);
$code = trim($_POST['code']);
$res = ['code' => 0, 'msg' => '', 'balance' => $balance];
// 输入校验
if(empty($phone) || empty($address) || empty($code)){
$res['code'] = 1;
$res['msg'] = '手机号、地址、取件码不能为空';
}elseif(!preg_match('/^1[3-9]\d{9}$/', $phone)){
$res['code'] = 1;
$res['msg'] = '手机号格式错误';
}elseif($balance <= 0){
$res['code'] = 1;
$res['msg'] = '余额不足,无法发送';
}else{
// 替换短信变量
$smsContent = "【顺德区古孜巴信息】您的快递已到达,请前往{$address},取件码为{$code},菜鸟驿站,请及时收货。";
// 短信API配置
$statusStr = array(
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器不支持curl/fsocket,请联系空间商",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "平台余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
);
$smsapi = "http://www.smsbao.com/";
$user = "账户";
$pass = md5("秘钥");
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($smsContent);
// 发送并获取结果
$result = file_get_contents($sendurl);
$res['msg'] = $statusStr[$result];
// 发送成功扣余额
if($result == 0){
$newBalance = $balance - 1;
file_put_contents($balanceFile, $newBalance);
$res['balance'] = $newBalance;
}else{
$res['code'] = 1;
}
}
echo json_encode($res);
exit;
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>快递取件短信发送</title>
<style>
*{margin:0;padding:0;box-sizing:border-box;}
body{padding:20px;background:#f5f5f5;font-family:Arial;}
.container{max-width:500px;margin:0 auto;background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 10px rgba(0,0,0,0.1);}
h2{text-align:center;margin-bottom:30px;color:#333;}
.logout{text-align:right;margin-bottom:20px;}
.logout a{color:#dc3545;text-decoration:none;font-size:14px;}
.form-group{margin-bottom:20px;}
label{display:block;margin-bottom:8px;color:#666;font-size:14px;}
input{width:100%;padding:12px;border:1px solid #ddd;border-radius:4px;font-size:16px;}
button{width:100%;padding:12px;background:#007bff;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;}
button:disabled{background:#ccc;cursor:not-allowed;}
.msg{margin:20px 0;padding:12px;border-radius:4px;text-align:center;font-size:14px;display:none;}
.success{background:#d4edda;color:#155724;display:block;}
.error{background:#f8d7da;color:#721c24;display:block;}
.balance{text-align:center;margin-top:20px;color:#666;font-size:15px;}
</style>
</head>
<body>
<div class="container">
<div class="logout"><a href="send.php?act=logout">退出登录</a></div>
<h2>快递取件短信发送</h2>
<div class="msg" id="msgBox"></div>
<div class="balance">剩余额度:<span id="balanceNum"><?php echo $balance; ?></span>条</div>
<form id="smsForm">
<div class="form-group">
<label for="phone">手机号</label>
<input type="text" id="phone" name="phone" placeholder="收件人手机号" required>
</div>
<div class="form-group">
<label for="address">取件地址</label>
<input type="text" id="address" name="address" placeholder="驿站地址" required>
</div>
<div class="form-group">
<label for="code">取件码</label>
<input type="text" id="code" name="code" placeholder="取件码" required>
</div>
<button type="submit" id="sendBtn">发送短信</button>
</form>
</div>
<script>
// AJAX提交表单,无刷新
const form = document.getElementById('smsForm');
const msgBox = document.getElementById('msgBox');
const sendBtn = document.getElementById('sendBtn');
const balanceNum = document.getElementById('balanceNum');
form.addEventListener('submit', function(e){
e.preventDefault(); // 阻止默认提交(不刷新页面)
sendBtn.disabled = true; // 防止重复点击
sendBtn.textContent = '发送中...';
msgBox.className = 'msg'; // 清空之前的提示
// 获取表单数据
const phone = document.getElementById('phone').value.trim();
const address = document.getElementById('address').value.trim();
const code = document.getElementById('code').value.trim();
// 发送AJAX请求
fetch('send.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `type=sendSms&phone=${encodeURIComponent(phone)}&address=${encodeURIComponent(address)}&code=${encodeURIComponent(code)}`
})
.then(res => res.json())
.then(data => {
// 显示结果
if(data.code === 0){
msgBox.className = 'msg success';
balanceNum.textContent = data.balance; // 更新余额
}else{
msgBox.className = 'msg error';
}
msgBox.textContent = data.msg;
// 恢复按钮
sendBtn.disabled = false;
sendBtn.textContent = '发送短信';
})
.catch(err => {
msgBox.className = 'msg error';
msgBox.textContent = '发送失败,请重试';
sendBtn.disabled = false;
sendBtn.textContent = '发送短信';
});
});
</script>
</body>
</html>

这里是秘钥信息
$smsapi = "http://www.smsbao.com/";
$user = "账户";
$pass = md5("秘钥");
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($smsContent);
这里是短信模板,本模板是快递取件码系统
// 替换短信变量
$smsContent = "【顺德区古孜巴信息】您的快递已到达,请前往{$address},取件码为{$code},菜鸟驿站,请及时收货。";
二版本
只改send.php
<?php
// 初始化会话,校验登录
session_start();
// 未登录/密码错误,跳回登录页
if(empty($_POST['pwd']) && empty($_SESSION['is_login'])){
header('Location: login.php');
exit;
}
// 登录成功,存入会话
if(!empty($_POST['pwd'])){
$_SESSION['is_login'] = 1;
}
// 余额处理
$balance = 0;
$balanceFile = 'code.txt';
// 首次创建余额文件(默认100条,可修改)
if(!file_exists($balanceFile)){
file_put_contents($balanceFile, '100');
$balance = 100;
}else{
$balance = intval(file_get_contents($balanceFile));
}
// 退出登录
if(isset($_GET['act']) && $_GET['act'] == 'logout'){
session_destroy();
header('Location: login.php');
exit;
}
// AJAX提交接口(单独处理短信发送,不渲染页面)
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['type']) && $_POST['type'] == 'sendSms'){
$phone = trim($_POST['phone']);
$address = trim($_POST['address']); // 店铺名(对应模板address)
$Secondaryaddress = trim($_POST['Secondaryaddress']); // 店铺地址(对应模板Secondaryaddress)
$code = trim($_POST['code']); // 取件码(对应模板code)
$res = ['code' => 0, 'msg' => '', 'balance' => $balance];
// 输入校验(新增店铺名、店铺地址校验)
if(empty($phone) || empty($address) || empty($Secondaryaddress) || empty($code)){
$res['code'] = 1;
$res['msg'] = '手机号、店铺名、店铺地址、取件码不能为空';
}elseif(!preg_match('/^1[3-9]\d{9}$/', $phone)){
$res['code'] = 1;
$res['msg'] = '手机号格式错误';
}elseif($balance <= 0){
$res['code'] = 1;
$res['msg'] = '余额不足,无法发送';
}else{
// 新短信模板:替换店铺名、店铺地址、取件码变量
$smsContent = "【顺德区古孜巴信息】您的快递已到达,请前往{$address}|{$Secondaryaddress},取件码为{$code},请及时收货。";
// 短信API配置(保持原配置不变)
$statusStr = array(
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器不支持curl/fsocket,请联系空间商",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "平台余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
);
$smsapi = "http://www.smsbao.com/";
$user = "账户";
$pass = md5("秘钥");
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($smsContent);
// 发送并获取结果
$result = file_get_contents($sendurl);
$res['msg'] = $statusStr[$result];
// 发送成功扣余额
if($result == 0){
$newBalance = $balance - 1;
file_put_contents($balanceFile, $newBalance);
$res['balance'] = $newBalance;
}else{
$res['code'] = 1;
}
}
echo json_encode($res);
exit;
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>快递取件短信发送</title>
<style>
*{margin:0;padding:0;box-sizing:border-box;}
body{padding:20px;background:#f5f5f5;font-family:Arial;}
.container{max-width:500px;margin:0 auto;background:#fff;padding:30px;border-radius:8px;box-shadow:0 2px 10px rgba(0,0,0,0.1);}
h2{text-align:center;margin-bottom:30px;color:#333;}
.logout{text-align:right;margin-bottom:20px;}
.logout a{color:#dc3545;text-decoration:none;font-size:14px;}
.form-group{margin-bottom:20px;}
label{display:block;margin-bottom:8px;color:#666;font-size:14px;}
input{width:100%;padding:12px;border:1px solid #ddd;border-radius:4px;font-size:16px;}
button{width:100%;padding:12px;background:#007bff;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;}
button:disabled{background:#ccc;cursor:not-allowed;}
.msg{margin:20px 0;padding:12px;border-radius:4px;text-align:center;font-size:14px;display:none;}
.success{background:#d4edda;color:#155724;display:block;}
.error{background:#f8d7da;color:#721c24;display:block;}
.balance{text-align:center;margin-top:20px;color:#666;font-size:15px;}
/* 新增地址框样式:并排布局 */
.address-group{display:flex;gap:12px;margin-bottom:20px;}
.address-group .form-group{flex:1;margin-bottom:0;}
</style>
</head>
<body>
<div class="container">
<div class="logout"><a href="send.php?act=logout">退出登录</a></div>
<h2>快递取件短信发送</h2>
<div class="msg" id="msgBox"></div>
<div class="balance">剩余额度:<span id="balanceNum"><?php echo $balance; ?></span>条</div>
<form id="smsForm">
<div class="form-group">
<label for="phone">手机号</label>
<input type="text" id="phone" name="phone" placeholder="收件人手机号" required>
</div>
<!-- 新增地址拆分输入框:店铺名+店铺地址(并排布局) -->
<label>取件地址</label>
<div class="address-group">
<div class="form-group">
<input type="text" id="address" name="address" placeholder="店铺名" required>
</div>
<div class="form-group">
<input type="text" id="Secondaryaddress" name="Secondaryaddress" placeholder="店铺详细地址" required>
</div>
</div>
<div class="form-group">
<label for="code">取件码</label>
<input type="text" id="code" name="code" placeholder="取件码" required>
</div>
<button type="submit" id="sendBtn">发送短信</button>
</form>
</div>
<script>
// AJAX提交表单,无刷新
const form = document.getElementById('smsForm');
const msgBox = document.getElementById('msgBox');
const sendBtn = document.getElementById('sendBtn');
const balanceNum = document.getElementById('balanceNum');
form.addEventListener('submit', function(e){
e.preventDefault(); // 阻止默认提交(不刷新页面)
sendBtn.disabled = true; // 防止重复点击
sendBtn.textContent = '发送中...';
msgBox.className = 'msg'; // 清空之前的提示
// 获取表单数据(新增店铺名、店铺地址)
const phone = document.getElementById('phone').value.trim();
const address = document.getElementById('address').value.trim();
const Secondaryaddress = document.getElementById('Secondaryaddress').value.trim();
const code = document.getElementById('code').value.trim();
// 发送AJAX请求(携带新增参数)
fetch('send.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `type=sendSms&phone=${encodeURIComponent(phone)}&address=${encodeURIComponent(address)}&Secondaryaddress=${encodeURIComponent(Secondaryaddress)}&code=${encodeURIComponent(code)}`
})
.then(res => res.json())
.then(data => {
// 显示结果
if(data.code === 0){
msgBox.className = 'msg success';
balanceNum.textContent = data.balance; // 更新余额
}else{
msgBox.className = 'msg error';
}
msgBox.textContent = data.msg;
// 恢复按钮
sendBtn.disabled = false;
sendBtn.textContent = '发送短信';
})
.catch(err => {
msgBox.className = 'msg error';
msgBox.textContent = '发送失败,请重试';
sendBtn.disabled = false;
sendBtn.textContent = '发送短信';
});
});
</script>
</body>
</html>

到这里就完了,直接创建两个文件,把秘钥等数据配置好就行
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END









暂无评论内容