帝國CMS是基于B/S結構,安全、穩定、強大、靈活的網站管理系統.還提供了系統擴展框架。小編對這款系統還比較了解,今天就以替換短信接口為例為大家講解一下如何進行二次開發,我們今天講解的是7.5版本,使用的短信接口是我們短信寶短信群發平臺的短信接口,我們短信寶短信群發平臺非常穩定,發送速度快,注冊就送測試短信,推薦大家使用!
打開項目upload/e/admin創建一個smsbao文件夾,在smsbao文件夾下創建一個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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
<?php header( 'Content-Type:text/html;charset=UTF-8' ); /** * SmsBao實現類 * @category 帝國cms * @package 帝國cmsV7.2 * @subpackage Sms * @author linf */ class Sms{ private $account ; //短信寶賬戶 private $password ; //密碼 private $balance ; //短信剩余條數 /** * 架構函數 * @access public * @param string $account 在短信寶注冊的賬戶名 * @param string $password 在短信寶注冊的賬戶名的密碼 */ public function __construct( $account , $password ) { if ( empty ( $account ) || empty ( $password )) { echo "用戶名和密碼不可為空!" ; } $this ->account = $account ; $this ->password = $password ; } /** * 發送短信函數 * @access public * @param string $mobile 手機號,多個手機號用英文逗號分隔 * @param string $content 發送內容 * @return array 返回值為數組,其中status為0表明發送成功,其他情況下發送失敗,失敗原因為msg */ public function sendSms( $mobile , $content ){ $param [ 'u' ] = $this ->account; $param [ 'p' ] = md5( $this ->password); $param [ 'm' ] = $mobile ; $param [ 'c' ] = $content ; //$param['c'] = iconv('UTF-8', 'GBK2312//IGNORE', $content); $ret = self::http(self::sendSmsUrl, $param ); //$data['status'] = $ret; $data = $ret == 0 ? '0' : self::getResult( $ret ); return $data ; } /** * 獲取短信剩余條數函數 * @access public */ public function getBalance(){ $param [ 'u' ] = $this ->account; $param [ 'p' ] = md5( $this ->password); $ret = self::http(self::queryBalanceUrl, $param ); $retArr = split( "\n" , $ret ); $balanceArr = split( "," , $retArr [1]); $this ->balance = $retArr [0] == 0 ? $balanceArr [1] : self::getResult( $ret ); return $this ->balance; } /** * 發送http請求 * @access protected * @param string $url 請求地址 * @param string $param get方式請求內容,數組形式,post方式時無效 * * @param string $data post請求方式時的內容,get方式時無效 * @param string $method 請求方式,默認get */ protected static function http( $url , $param , $data = '' , $method = 'GET' ){ $opts = array ( CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, ); /* 根據請求類型設置特定參數 */ $opts [CURLOPT_URL] = $url . '?' . http_build_query( $param ); if ( strtoupper ( $method ) == 'POST' ){ $opts [CURLOPT_POST] = 1; $opts [CURLOPT_POSTFIELDS] = $data ; if ( is_string ( $data )){ //發送JSON數據 $opts [CURLOPT_HTTPHEADER] = array ( 'Content-Type: application/json; charset=utf-8' , 'Content-Length: ' . strlen ( $data ), ); } } /* 初始化并執行curl請求 */ $ch = curl_init(); curl_setopt_array( $ch , $opts ); $data = curl_exec( $ch ); $error = curl_error( $ch ); curl_close( $ch ); //發生錯誤,拋出異常 if ( $error ) throw new Exception( '請求發生錯誤:' . $error ); return $data ; } private function getResult( $key ){ $rst [ '30' ] = '密碼錯誤' ; $rst [ '40' ] = '賬號不存在' ; $rst [ '41' ] = '余額不足' ; $rst [ '42' ] = '帳號過期' ; $rst [ '43' ] = 'IP地址限制' ; $rst [ '50' ] = '內容含有敏感詞' ; $rst [ '51' ] = '手機號碼不正確' ; return $rst [ $key ]; } } ?> |
然后我們修改前端的模板頁面,打開項目upload/e/template/member/register.php文件,修改63~72行左右的代碼:
1
2
3
4
5
6
7
8
9
10
11
|
<tr> <td height= "25" bgcolor= "#FFFFFF" > <div align= 'left' >手機號碼</div></td> <td height= "25" bgcolor= "#FFFFFF" > <input name= 'phone' type= 'text' id= 'phone' maxlength= '50' value= "<?=$ecmsfirstpost==1?" ":ehtmlspecialchars(stripSlashes($addr[phone]))?>" > *</td> </tr> <tr> <td height= "25" bgcolor= "#FFFFFF" > <div align= 'left' >驗證碼</div></td> <td height= "25" bgcolor= "#FFFFFF" > <input name= 'rzm' type= 'text' id= 'rzm' maxlength= '30' > *<input type= "button" style= "font-size: 12px; height: 22px; line-height: 19px;" value= "發送驗證碼" onclick= "sendrzm()" id= "sendag" ></td> </tr> |
再引入jquery文件添加jquery代碼:
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
|
<script src= "/js/jquery.min-1.7.2.js" ></script> <SCRIPT language=javascript> <!-- var secs = 120; function sendrzm(){ var tel=$( "#phone" ).val(); <? if ( $public_r [ 'regkey_ok' ]) { ?> if ($( '#key' ).val()== '' ||$( '#key' ).val().length<4){ alert( '請先填寫圖形驗證碼' ); return false; } <? } ?> if ($.trim(tel)== '' ||$.trim(tel).length!=11){ alert( '請填寫正確的手機號碼' ); } else { $.getJSON( '/e/member/doaction.php?enews=Rzsj&phone=' + tel + '' , function (data) { if (data.d== '2' ){ alert(data.n); } else { document.userinfoform.sendag.disabled=true; for (i=1;i<=secs;i++) { window.setTimeout( "update(" + i + ")" , i * 1000); } } }); } } function update(num) { if (num == secs) { document.userinfoform.sendag.value = "重新發送驗證碼" ; document.userinfoform.sendag.disabled=false; } else { printnr = secs-num; document.userinfoform.sendag.value = "(" + printnr + ")重新發送驗證碼" ; } } //--> </SCRIPT> |
修改項目upload/e/member/doaction.php文件的177~185行左右添加認證手機代碼:
1
2
3
4
5
6
7
8
9
|
elseif ( $enews == 'Rzsj' ) //認證手機號碼 { $tel = $_GET [ 'phone' ]; F_rzm( $tel ); } elseif ( $enews == 'Rzsjq' ) //認證手機號碼取回密碼 { $add = $_GET ; F_rzmq( $add ); } |
添加完成之后,我們修改upload/e/class/connet.php文件中的4958~5213行左右,添加短信接口驗證代碼:
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
//發送手機驗證碼 function F_rzm( $tel ){ global $empire , $dbtbpre , $public_r ; $ism =is_mobile( $tel ); if ( $ism == 2) { G_return( "手機號碼為空或者錯誤!" ); } $time =time(); $zrc = $empire ->fetch1( "select * from {$dbtbpre}enewsmemberadd where phone='$tel' limit 1" ); if ( $zrc [ 'userid' ]){ G_return( "該號碼注冊,請更換其他號碼!" ); } //識別碼 $gzwc =RepPostVar(getcvar( 'gzwrz' )); $zr = $empire ->fetch1( "select * from {$dbtbpre}rz where bsm='$gzwc' and sj='$tel' limit 1" ); if ( $zr [ 'id' ]){ //驗證次數 if ( $zr [ 'c' ]>10) { G_return( "該號碼已多次接收不了驗證碼,建議更換手機重新注冊!" ); } //驗證間隔時間 $gtime2 = $zr [ 't' ]+60*2; if ( $time < $gtime2 ) { G_return( "發送過程中,手機接收驗證碼需要1-2分鐘,請耐心等待!" ); } $rm =no_make_password(6); $content = $rm ; $fh =api_sendsms( $tel , $content ); if ( $fh ){ $sql = $empire ->query( "update {$dbtbpre}rz set t='$time',rzm='$rm',c=c+1 where id='$zr[id]'" ); $logincookie = $time +3600*2; $set1 =esetcookie( "gzwrz" , $gzwc , $logincookie ); G_return( "驗證碼已發送成功,請查收!" ,1); } else { G_return( "發送失敗,請聯系管理員!" ); } } else { $rm =no_make_password(6); $content = $rm ; $fh =api_sendsms( $tel , $content ); if ( $fh ){ $gzwc =make_password(20); $sql = $empire ->query( "insert into {$dbtbpre}rz(bsm,rzm,sj,t,c) values('$gzwc','$rm','$tel','$time','1');" ); $logincookie = $time +3600*2; $set1 =esetcookie( "gzwrz" , $gzwc , $logincookie ); G_return( "驗證碼已發送成功,請查收!" ,1); } else { G_return( "發送失敗,請聯系管理員!" ); } } } //發送手機驗證碼(找回密碼)function F_rzmq($add){ global $empire , $dbtbpre , $public_r ; $tel = $add [ 'phone' ]; //if(!$public_r['opengetpass']) //{ // G_return("系統關閉取回密碼!"); //} $username =trim( $add [username]); if (! $username ) { G_return( "用戶名不能為空!" ); } $ism =is_mobile( $tel ); if ( $ism == 2) { G_return( "手機號碼為空或者錯誤!" ); } $username =RepPostVar( $username ); $ur = $empire ->fetch1( "select " .eReturnSelectMemberF( 'userid,username' ). " from " .eReturnMemberTable(). " where " .egetmf( 'username' ). "='$username' limit 1" ); if (! $ur [ 'userid' ]) { G_return( "該用戶不存在!" ); } $aur = $empire ->fetch1( "select phone from {$dbtbpre}enewsmemberadd where userid='" . $ur ['userid ']."' limit 1"); if ( $tel != $aur [ 'phone' ]) { G_return( "手機號碼不正確!" ); } $time =time(); //識別碼 $gzwc =RepPostVar(getcvar( 'gzwrzq' )); $zr = $empire ->fetch1( "select * from {$dbtbpre}rzq where sj='$tel' and username='" . $username . "' limit 1" ); if ( $zr [ 'id' ]){ //時間判斷 $gtime1 = date ( "Y-m-d" , $zr [ 't' ]); $gddd = date ( "Y-m-d" ,time()); //驗證次數 if ( $zr [ 'c' ]>10&& $gtime1 == $gddd ) { G_return( "該號碼已多次接收不了驗證碼,建議更換手機重新注冊!" ); } //驗證間隔時間 $gtime2 = $zr [ 't' ]+60*2; if ( $time < $gtime2 ) { G_return( "發送過程中,手機接收驗證碼需要1-2分鐘,請耐心等待!" ); } $rm =no_make_password(6); $content = $rm ; $fh =api_sendsms( $tel , $content ); if ( $fh ){ if ( $gtime1 != $gddd ){ $sql = $empire ->query( "update {$dbtbpre}rzq set t='$time',rzm='$rm',c=c+1 where id='$zr[id]'" ); } else { $sql = $empire ->query( "update {$dbtbpre}rzq set t='$time',rzm='$rm',c=1 where id='$zr[id]'" ); } $logincookie = $time +3600*2; $set1 =esetcookie( "gzwrzq" , $gzwc , $logincookie ); G_return( "認證碼已發送成功,請查收!" ,1); } else { G_return( "發送失敗,請聯系管理員!" ); } } else { $rm =no_make_password(6); $content = $rm ; $fh =api_sendsms( $tel , $content ); if ( $fh ){ $gzwc =make_password(20); $sql = $empire ->query( "insert into {$dbtbpre}rzq(bsm,rzm,sj,t,c,username) values('$gzwc','$rm','$tel','$time','1','" . $username . "');" ); $logincookie = $time +3600*2; $set1 =esetcookie( "gzwrzq" , $gzwc , $logincookie ); G_return( "認證碼已發送成功,請查收!" ,1); } else { G_return( "發送失敗,請聯系管理員!" ); } } } //替換手機短信內容變量 function T_sjn( $rzm ){ global $empire , $dbtbpre , $public_r ; $date = date ( "Y-m-d" ); $time = date ( "Y-m-d H:i:s" ); $content = $public_r [ 'add_rznr' ]; $content = str_replace ( '[!--rzm--]' , $rzm , $content ); return iconv( 'UTF-8' , 'GB2312' , $content ); //utf-8 //return $content; //gbk } //替換手機短信內容變量(找回密碼) function T_sjnq( $rzm ){ global $empire , $dbtbpre , $public_r ; $date = date ( "Y-m-d" ); $time = date ( "Y-m-d H:i:s" ); $content = $public_r [ 'add_rznrq' ]; $content = str_replace ( '[!--rzm--]' , $rzm , $content ); return iconv( 'UTF-8' , 'GB2312' , $content ); //utf-8 //return $content; } //注冊時手機驗證 function C_sjrz( $tel , $rzm ){ global $empire , $dbtbpre , $public_r ; $ism =is_mobile( $tel ); if ( $ism ==2) { printerror( '手機號碼為空或者錯誤!' . $tel . $rzm , '' ,1,0,1); } $zrc = $empire ->fetch1( "select * from {$dbtbpre}enewsmemberadd where phone='$tel' limit 1" ); if ( $zrc [ 'id' ]){ printerror( '該號碼注冊,請更換其他號碼!' , '' ,1,0,1); } //識別碼 $gzwc =RepPostVar(getcvar( 'gzwrz' )); $rzm =RepPostVar( $rzm ); $zr = $empire ->fetch1( "select * from {$dbtbpre}rz where bsm='$gzwc' and sj='$tel' and rzm='$rzm' order by id desc limit 1" ); if (! $zr [ 'id' ]){ printerror( '手機號碼驗證失敗!' , '' ,1,0,1); } $time =time(); $gtime2 = $zr [ 't' ]+3600*12; if ( $time > $gtime2 ) { printerror( '手機驗證碼已超過有效期!' , '' ,1,0,1); } $set2 =esetcookie( "gzwrz" , "" ,0); $gsql = $empire ->query( "delete from {$dbtbpre}rz where id=$zr[id] " ); return '' ; } //驗證手機號碼 function is_mobile( $tel ){ if ( $tel == "" ) { return 2; } //驗證長度 if ( strlen ( $tel )!= "11" ) { return 2; } //驗證開頭3位格式 if (!preg_match( "/13[0123456789]\d{8}|14[57]\d{8}|15[012356789]\d{8}|18[012356789]\d{8}|17[17]\d{8}/" , $tel )) ///1\d{10}/ { return 2; } return 1; } //返回信息 function G_return( $n , $d =2){ $gf [ 'n' ]=Gbkbm( $n ); $gf [ 'd' ]= $d ; echo json_encode( $gf ); exit (); } //中文編碼 function Gbkbm( $g ){ //$g=iconv("GB2312","UTF-8//IGNORE",$g); return $g ; } //短信發送接口 function api_sendsms( $moblie , $content ){ global $empire , $dbtbpre , $public_r ; //$uid=mb_convert_encoding($uid,'GB2312','UTF-8'); //內容為UTF-8時轉碼成GB2312 //$msg=mb_convert_encoding($msg,'GB2312','UTF-8'); //內容為UTF-8時轉碼成GB2312 require ( "../admin/smsbao/Smsbao.php" ); //取出短信配置信息 $smsbao_config = file_get_contents ( "../admin/smsbao/config.txt" ); $smsbao_config = explode ( "," , $smsbao_config ); $smsbao = new Sms( $smsbao_config [0], $smsbao_config [1]); $content = "【" . $smsbao_config [2]. "】您好,你的驗證碼為:" . $content . ',請勿告訴他人' ; $sms_res = $smsbao ->sendSms( $moblie , $content ); if ( $sms_res == '0' ){ return true; } else { return false; } /* 提交成功返回值格式: 0發送成功! */ } |
好了經過以上的添加,短信寶短信接口就已經安裝成功,可以正常使用了,最后我們進行發送測試:
報備一下短信寶的VIP模板,這樣就可以走短信寶的優質通道了,即便遇到敏感文字我們都不會人工審核,短信內容3~5秒就可送達。
另外:我們已經開發好完整的帝國CMS系統短信寶插件,點擊此鏈接 下載及查看安裝流程。
最新更新
電商類
CMS類
微信類