emlog是一款基于PHP和MySQL的功能强大的博客及CMS建站系统,追求快速、稳定、简单、舒适的建站体验。小编对这款软件还是比较了解的,小编今天就以新增短信接口为例为大家讲解一下如何进行二次开发,我们使用的短信接口是我们短信宝短信群发平台的短信接口,我们短信宝短信群发平台非常稳定,发送速度快,注册就送测试短信,推荐大家使用。
1:打开项目:admin\views\setting.php,以及同目录下的setting_mail.php,setting_seo.php,setting_user.php,blogger.php增加短信设置页面
1
2
3
4
5
6
7
8
|
<ul class= "nav nav-pills" > <li class= "nav-item" ><a class= "nav-link" href= "./setting.php" >基础设置</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=user" >用户设置</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=mail" >邮件通知</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=seo" >SEO优化</a></li> <li class= "nav-item" ><a class= "nav-link active" href= "./blogger.php" >个人信息</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=sms" >短信通知</a></li> </ul> |
2:打开项目:admin\views目录新增短信宝设置页面 setting_sms.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
<?php if (!defined( 'EMLOG_ROOT' )) { exit( 'error!' ); } ?> <?php if (isset($_GET[ 'activated' ])): ?> <div class= "alert alert-success" >设置保存成功</div><?php endif ?> <div class= "d-sm-flex align-items-center justify-content-between mb-4" > <h1 class= "h3 mb-0 text-gray-800" >设置</h1> </div> <div class= "panel-heading" > <ul class= "nav nav-pills" > <li class= "nav-item" ><a class= "nav-link" href= "./setting.php" >基础设置</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=user" >用户设置</a></li> <li class= "nav-item" ><a class= "nav-link " href= "./setting.php?action=mail" >邮件通知</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./setting.php?action=seo" >SEO优化</a></li> <li class= "nav-item" ><a class= "nav-link" href= "./blogger.php" >个人信息</a></li> <li class= "nav-item" ><a class= "nav-link active" href= "./setting.php?action=sms" >短信通知</a></li> </ul> </div> <div class= "card shadow mb-4 mt-2" > <div class= "card-body" > <form action= "setting.php?action=sms_save" method= "post" name= "input" id= "sms_config" > <h4>短信发送</h4> <div class= "form-group form-check" > <input class= "form-check-input" type= "checkbox" value= "y" name= "is_smsup" id= "is_smsup" <?= $conf_is_signup ?> /> <label class= "form-check-label" >开启短信注册</label> </div> <div class= "form-group" > <label>短信宝账号</label> <input class= "form-control" value= "<?= $sms_user ?>" name= "sms_user" required> <a target= "_blank" href= "https://console.smsbao.com/#/register" style= "color: red" >还没有注册短信宝账号!马上注册</a> </div> <div class= "form-group" > <label>短信宝密码</label> <input type= "password" name= "sms_pwd" cols= "" rows= "3" class= "form-control" value= "<?= $sms_pwd ?>" required> </div> <div class= "form-group" > <label>短信宝签名</label> <input class= "form-control" value= "<?= $sms_sign ?>" name= "sms_sign" required> </div> <div class= "form-group" > <label>注册短信模板</label> <input class= "form-control" value= "<?= $sms_tmp ?>" name= "sms_tmp" required> </div> <div class= "form-group" > <input name= "token" id= "token" value= "<?= LoginAuth::genToken() ?>" type= "hidden" /> <input type= "submit" value= "保存设置" class= "btn btn-sm btn-success" /> <input type= "button" value= "发送测试" class= "btn btn-sm btn-primary" data-toggle= "modal" data-target= "#testSms" /> </div> <!-- 设置接收短信的模态框 --> <div class= "modal fade" id= "testSms" > <div class= "modal-dialog modal-sm" > <div class= "modal-content" > <div class= "modal-header" > <h4 class= "modal-title" >发送测试</h4> <button type= "button" class= "close" data-dismiss= "modal" >×</button> </div> <div class= "modal-body" > <div class= "form-group" > <input class= "form-control" type= "email" name= "testTo" placeholder= "输入接收手机号" > </div> </div> <div class= "modal-footer" > <div id= "testMailMsg" ></div> <button type= "button" class= "btn btn-secondary btn-sm" data-dismiss= "modal" >关闭</button> <button type= "button" class= "btn btn-success btn-sm" id= "testSendBtn" >发送</button> </div> </div> </div> </div> </form> </div> </div> <script> $( "#menu_category_sys" ).addClass( 'active' ); $( "#menu_sys" ).addClass( 'show' ); $( "#menu_setting" ).addClass( 'active' ); setTimeout(hideActived, 2600); $( "#testSendBtn" ).click( function () { $( "#testMailMsg" ).html( "<small class='text-secondary'>发送中...<small>" ); $.post( "setting.php?action=sms_test" , $( "#sms_config" ).serialize(), function (data) { if (data == 0) { $( "#testMailMsg" ).html( "<small class='text-success'>发送成功</small>" ); } else { $( "#testMailMsg" ).html(data); } }); }) </script> |
3:打开admin\views\signup.php修改注册页面,增加短信验证页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<form method= "post" class= "user" action= "./account.php?action=dosignup" > <div class= "form-group" > <input type= "email" class= "form-control form-control-user" id= "mail" name= "mail" aria-describedby= "emailHelp" placeholder= "邮箱" required autofocus> </div> <?php if ($is_smsup): ?> <div class= "form-group form-inline" > <input type= "text" id= "userPhone" class= "form-control form-control-user" placeholder= "请输入手机号码" > <button type= "button" class= "btn btn-info" id= "second" >点击获取验证码</button> </div> <div class= "form-group" > <input type= "text" name= "securityCode" class= "form-control form-control-user" placeholder= "请输入验证码" required autofocus> </div> <?php endif; ?> <div class= "form-group" > <input type= "password" class= "form-control form-control-user" minlength= "6" id= "passwd" name= "passwd" placeholder= "密码" required> </div> <div class= "form-group" > <input type= "password" class= "form-control form-control-user" minlength= "6" id= "repasswd" name= "repasswd" placeholder= "再次输入密码" required> </div> <?php if ($login_code): ?> <div class= "form-group form-inline" > <input type= "text" name= "login_code" class= "form-control form-control-user" id= "login_code" placeholder= "验证码" required> <img src= "../include/lib/checkcode.php" id= "checkcode" class= "mx-2" > </div> <?php endif ?> <button class= "btn btn-success btn-user btn-block" type= "submit" >注册</button> <hr> <div class= "text-center" ><a href= "/admin" >登录</a></div> <hr> <div class= "text-center" ><a href= "../" class= "small" role= "button" >←返回首页</a> </div> </form> |
此页面同时也增加有关60秒倒计时的js校验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
<script type= "text/javascript" > $( "#second" ).click( function (){ sendyzm($( "#second" )); }); //用ajax提交到后台的发送短信接口 function sendyzm(obj){ var phone = $( "#userPhone" ).val(); var result = isPhoneNum(); if (result) { $.ajax({ url: "/admin/account.php?action=smsYzm&phone=" +phone, type: "get" , processData: false , contentType: false , success: function (data){ if (data == 0) { setTime(obj); } else if (data == 1){ alert( '验证码发送频繁' ) } else { alert( '验证码发送失败' ) } }, error: function (){ alert( "验证码发送失败" ) } }) } } //60s倒计时实现逻辑 var countdown = 60; function setTime(obj) { if (countdown == 0) { obj.prop( 'disabled' , false ); obj.text( "点击获取验证码" ); countdown = 60; //60秒过后button上的文字初始化,计时器初始化; return ; } else { obj.prop( 'disabled' , true ); obj.text( "(" +countdown+ "s)后重新发送" ) ; countdown--; } setTimeout( function () { setTime(obj) },1000) //每1000毫秒执行一次 } //校验手机号是否合法 function isPhoneNum(){ var phonenum = $( "#userPhone" ).val(); var reg = /^1[34578]\d{9}$/; if (!reg.test(phonenum)){ alert( '请输入有效的手机号码!' ); return false ; } else { return true ; } } </script> |
4:打开admin\account.php修改signup注册方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
if ($action == 'signup' ) { loginAuth::checkLogged(); $login_code = Option::get( 'login_code' ) === 'y' ; $is_smsup = Option::get( 'is_smsup' ) === 'y' ; $error_msg = '' ; if (Option::get( 'is_signup' ) !== 'y' ) { emMsg( '系统已关闭注册!' ); } $page_title = '注册账号' ; include View::getAdmView( 'user_head' ); require_once View::getAdmView( 'signup' ); View::output(); } if ($action == 'smsYzm' ) { $data = []; //做检测 $phone = isset($_GET[ 'phone' ]) ? addslashes(trim($_GET[ 'phone' ])) : '' ; if (!isset($_SESSION)) { session_start(); } if (isset($_SESSION[ 'tel' ]) && time()-$_SESSION[ 'tel' ] < 60){ echo 1; exit; } $login_code = isset($_POST[ 'login_code' ]) ? addslashes(strtoupper(trim($_POST[ 'login_code' ]))) : '' ; //登录注册验证码 if (!User::checkLoginCode($login_code)) { emDirect( './account.php?action=signup&err_ckcode=1' ); } $rand = mt_rand(0,9999); $test_temp = Option::get( 'sms_tmp' ) ; $content = str_replace( '{$code}' ,$rand,$test_temp); $res = ( new SmsBao())->send($phone,$content); // $res = '发送成功'; if ($res != "发送成功" ){ echo $res; exit; } else { if (!isset($_SESSION)) { session_start(); } $_SESSION[ 'tel' ] = time(); $_SESSION[ 'sms_yzm_code' ] = $rand; echo 0; exit; } } |
5:打开admin\setting.php新增sms、sms_test、sms_save方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
if ($action == 'sms' ) { $options_cache = $CACHE->readCache( 'options' ); $sms_user = $options_cache[ 'sms_user' ]; $sms_pwd = $options_cache[ 'sms_pwd' ]; $sms_sign = $options_cache[ 'sms_sign' ]; $sms_tmp = $options_cache[ 'sms_tmp' ]; $conf_is_signup = $options_cache[ 'is_smsup' ] == 'y' ? 'checked="checked"' : '' ; include View::getAdmView( 'header' ); require_once(View::getAdmView( 'setting_sms' )); include View::getAdmView( 'footer' ); View::output(); } if ($action == 'sms_test' ) { $data = [ 'testTo' => $_POST[ 'testTo' ] ?? '' , ]; $test_temp = '您的验证码为1234' ; try { // $res = (new SmsBao())->send($data['testTo'],$test_temp); $res = '发送成功' ; if ($res != "发送成功" ){ exit( "<small class='text-danger'>$res</small>" ); return false ; } } catch (Exception $exc) { exit( "<small class='text-danger'>发送失败</small>" ); return false ; } } if ($action == 'sms_save' ) { LoginAuth::checkToken(); $data = [ 'is_smsup' => isset($_POST[ 'is_smsup' ]) ? addslashes($_POST[ 'is_smsup' ]) : '' , 'sms_user' => isset($_POST[ 'sms_user' ]) ? addslashes($_POST[ 'sms_user' ]) : '' , 'sms_pwd' => isset($_POST[ 'sms_pwd' ]) ? addslashes($_POST[ 'sms_pwd' ]) : '' , 'sms_tmp' => isset($_POST[ 'sms_tmp' ]) ? addslashes($_POST[ 'sms_tmp' ]) : '' , 'sms_sign' => isset($_POST[ 'sms_sign' ]) ? addslashes($_POST[ 'sms_sign' ]) : '' , ]; foreach ($data as $key => $val) { Option::updateOption($key, $val); } $CACHE->updateCache(array( 'options' )); header( 'Location: ./setting.php?action=sms&activated=1' ); } |
6:最后打开项目include\lib目录新增smsbao.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?php class SmsBao { public $sms_user; public $sms_pwd; public $sms_sign; public function __construct() { $ this ->sms_user = Option::get( 'sms_user' ); $ this ->sms_pwd = Option::get( 'sms_pwd' ); $ this ->sms_sign = Option::get( 'sms_sign' ); } function send($to,$content) { try { $statusStr = array( "0" => "发送成功" , "-1" => "参数不全" , "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!" , "30" => "密码错误" , "40" => "账号不存在" , "41" => "余额不足" , "42" => "帐户已过期" , "43" => "IP地址限制" , "50" => "内容含有敏感词" ); $user = $ this ->sms_user; //短信平台帐号 $pass = md5($ this ->sms_pwd); //短信平台密码 $content= "【" .$ this ->sms_sign. "】" .$content; //要发送的短信内容 $phone = $to; //要发送短信的手机号码 $sendurl = $smsapi. "sms?u=" .$user. "&p=" .$pass. "&m=" .$phone. "&c=" .urlencode($content); $res = file_get_contents($sendurl); return $statusStr[$res]; } catch (Exception $exc) { return false ; } } } |
好了,经过以上的替换,短信宝的短信平台已经替换成功了,可以正常使用了。我们进行测试发送。
报备一下短信宝的VIP模板,这样就可以走短信宝的优质通道了,即便遇到敏感文字我们都不会人工审核,短信内容3~5秒就可送达。
另外:我们已经开发好完整的emlog pro_1.2.2系统短信宝插件,点击此链接 下载及查看安装流程。
最新更新
电商类
CMS类
微信类