帝國CMS是基于B/S結(jié)構(gòu),安全、穩(wěn)定、強大、靈活的網(wǎng)站管理系統(tǒng).還提供了系統(tǒng)擴展框架。小編對這款系統(tǒng)還比較了解,今天就以替換短信接口為例為大家講解一下如何進行二次開發(fā),我們今天講解的是7.5版本,使用的短信接口是我們短信寶短信群發(fā)平臺的短信接口,我們短信寶短信群發(fā)平臺非常穩(wěn)定,發(fā)送速度快,注冊就送測試短信,推薦大家使用!
打開項目upload/e/admin創(chuàng)建一個smsbao文件夾,在smsbao文件夾下創(chuàng)建一個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
|
<?phpheader('Content-Type:text/html;charset=UTF-8');/** * SmsBao實現(xiàn)類 * @category 帝國cms * @package 帝國cmsV7.2 * @subpackage Sms * @author linf */class Sms{ private $account;//短信寶賬戶 private $password;//密碼 private $balance;//短信剩余條數(shù) /** * 架構(gòu)函數(shù) * @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; } /** * 發(fā)送短信函數(shù) * @access public * @param string $mobile 手機號,多個手機號用英文逗號分隔 * @param string $content 發(fā)送內(nèi)容 * @return array 返回值為數(shù)組,其中status為0表明發(fā)送成功,其他情況下發(fā)送失敗,失敗原因為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; } /** * 獲取短信剩余條數(shù)函數(shù) * @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; } /** * 發(fā)送http請求 * @access protected * @param string $url 請求地址 * @param string $param get方式請求內(nèi)容,數(shù)組形式,post方式時無效 * * @param string $data post請求方式時的內(nèi)容,get方式時無效 * @param string $method 請求方式,默認(rèn)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, ); /* 根據(jù)請求類型設(shè)置特定參數(shù) */ $opts[CURLOPT_URL] = $url . '?' . http_build_query($param); if(strtoupper($method) == 'POST'){ $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $data; if(is_string($data)){ //發(fā)送JSON數(shù)據(jù) $opts[CURLOPT_HTTPHEADER] = array( 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data), ); } } /* 初始化并執(zhí)行curl請求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); //發(fā)生錯誤,拋出異常 if($error) throw new Exception('請求發(fā)生錯誤:' . $error); return $data; } private function getResult($key){ $rst['30'] = '密碼錯誤'; $rst['40'] = '賬號不存在'; $rst['41'] = '余額不足'; $rst['42'] = '帳號過期'; $rst['43'] = 'IP地址限制'; $rst['50'] = '內(nèi)容含有敏感詞'; $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="發(fā)送驗證碼" 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('請?zhí)顚懻_的手機號碼'); }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 ="重新發(fā)送驗證碼"; document.userinfoform.sendag.disabled=false; }else { printnr = secs-num; document.userinfoform.sendag.value = "(" + printnr +")重新發(fā)送驗證碼"; }}//--></SCRIPT> |
修改項目upload/e/member/doaction.php文件的177~185行左右添加認(rèn)證手機代碼:
|
1
2
3
4
5
6
7
8
9
|
elseif($enews=='Rzsj')//認(rèn)證手機號碼{ $tel=$_GET['phone']; F_rzm($tel);}elseif($enews=='Rzsjq')//認(rèn)證手機號碼取回密碼{ $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
|
//發(fā)送手機驗證碼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']){ //驗證次數(shù) if($zr['c']>10) { G_return("該號碼已多次接收不了驗證碼,建議更換手機重新注冊!"); } //驗證間隔時間 $gtime2=$zr['t']+60*2; if($time<$gtime2) { G_return("發(fā)送過程中,手機接收驗證碼需要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("驗證碼已發(fā)送成功,請查收!",1); }else{ G_return("發(fā)送失敗,請聯(lián)系管理員!"); } }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("驗證碼已發(fā)送成功,請查收!",1); }else{ G_return("發(fā)送失敗,請聯(lián)系管理員!"); } }}//發(fā)送手機驗證碼(找回密碼)function F_rzmq($add){ global $empire,$dbtbpre,$public_r; $tel=$add['phone']; //if(!$public_r['opengetpass']) //{ // G_return("系統(tǒng)關(guān)閉取回密碼!"); //} $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()); //驗證次數(shù) if($zr['c']>10&&$gtime1==$gddd) { G_return("該號碼已多次接收不了驗證碼,建議更換手機重新注冊!"); } //驗證間隔時間 $gtime2=$zr['t']+60*2; if($time<$gtime2) { G_return("發(fā)送過程中,手機接收驗證碼需要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("認(rèn)證碼已發(fā)送成功,請查收!",1); }else{ G_return("發(fā)送失敗,請聯(lián)系管理員!"); } }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("認(rèn)證碼已發(fā)送成功,請查收!",1); }else{ G_return("發(fā)送失敗,請聯(lián)系管理員!"); } }}//替換手機短信內(nèi)容變量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}//替換手機短信內(nèi)容變量(找回密碼)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('手機號碼驗證失?。?#39;,'',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;}//短信發(fā)送接口function api_sendsms($moblie,$content){ global $empire,$dbtbpre,$public_r; //$uid=mb_convert_encoding($uid,'GB2312','UTF-8'); //內(nèi)容為UTF-8時轉(zhuǎn)碼成GB2312 //$msg=mb_convert_encoding($msg,'GB2312','UTF-8'); //內(nèi)容為UTF-8時轉(zhuǎn)碼成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發(fā)送成功! */} |
好了經(jīng)過以上的添加,短信寶短信接口就已經(jīng)安裝成功,可以正常使用了,最后我們進行發(fā)送測試:

報備一下短信寶的VIP模板,這樣就可以走短信寶的優(yōu)質(zhì)通道了,即便遇到敏感文字我們都不會人工審核,短信內(nèi)容3~5秒就可送達。
另外:我們已經(jīng)開發(fā)好完整的帝國CMS系統(tǒng)短信寶插件,點擊此鏈接 下載及查看安裝流程。
最新更新
電商類
CMS類
微信類