本教程织梦短信接口插件代码基于微米短信平台(www.weimi.cc)的一个织梦短信接口。织梦58分享给大家。
具体代码
?
1、存储验证码到数据库,需要新建建一个数据表。?后台?----?系统?---- sql命令行工具,运行以下代码:(注意表前缀)
1
2
3
4
5
6
7
8
9
|
??DROP?TABLE?IF?EXISTS?`dede_sms`;?
????CREATE?TABLE?`dede_sms`?(?
??????`id`?int(11)?unsigned?NOT?NULL?AUTO_INCREMENT,?
??????`phone`?varchar(15)?NOT?NULL?DEFAULT?'',?
??????`code`?varchar(8)?NOT?NULL?DEFAULT?'',?
??????`created_at`?int(10)?NOT?NULL?DEFAULT?'0',?
??????`expire_at`?int(10)?NOT?NULL?DEFAULT?'0',?
??????PRIMARY?KEY?(`id`)?
????)?ENGINE=MyISAM?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8;
|
?
2、新建?WMsendSms.PHP?文件,放在?/include?目录下。具体代码如下:
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
|
????if(!defined('DEDEINC'))?exit('Request?Error!');?
??????
????//发送短信?
????//$cid?短信模板CID?
????function?sendSms($mob,$cid?=?'微米短信模板查看CID')?
????{?
????????$res?=?validatePremise($mob);?
????????if($res){?
????????????$ch?=?curl_init();?
????????????curl_setopt($ch,?CURLOPT_URL,?"http://api.weimi.cc/2/sms/send.html");?
????????????curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?TRUE);?
????????????curl_setopt($ch,?CURLOPT_POST,?TRUE);?
????????????/*
????????????传入模板参数。短信模板内容示例:?
????????????????【微米】您的验证码是:%P%,%P%分钟内有效。如非您本人操作,可忽略本消息。?
????????????????传入两个参数:?
????????????????p1:610912
????????????????p2:3
????????????????最终发送内容:?
????????????????【微米】您的验证码是:610912,3分钟内有效。如非您本人操作,可忽略本消息。?
????????????*/?
????????????$uid?=?'微米查看去';?
????????????$pas?=?'微米查看去';?
????????????$p1?=?createRandomCoder(4);?
????????????$p2?=?5;?//分钟?
????????????curl_setopt($ch,?CURLOPT_POSTFIELDS,?"uid=$uid&pas=$pas&mob=$mob&cid=$cid&p1=$p1&p2=$p2&type=json");?
????????????$res?=?curl_exec(?$ch?);?
????????????curl_close(?$ch?);?
????????????$arr?=?json_decode($res,true);?
????????????if($arr['code']?==?0){?
????????????????saveCode($mob,$p1);?
????????????????return?"短信发送成功!";?
????????????}?
????????????return?"短信发送失败!";?
????????}else{?
????????????return?"短信发送频繁,请稍后再发送!";?
????????}?
????}?
??????
????//生成随机字符串??
????//$len??要生成的随机字符串长度?
????//$type?随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符?
????function?createRandomCoder($len,$type?=?'0')?????
????{?
????????$arr?=?array(1?=>?"0123456789",?2?=>?"abcdefghijklmnopqrstuvwxyz",?3?=>?"ABCDEFGHIJKLMNOPQRSTUVWXYZ",?4?=>?"~@#$%^&*(){}[]|");?
????????if?($type?==?0)?{?
????????????array_pop($arr);?
????????????$string?=?implode("",?$arr);?
????????}?elseif?($type?==?"-1")?{?
????????????$string?=?implode("",?$arr);?
????????}?else?{?
????????????$string?=?$arr[$type];?
????????}?
????????$count?=?strlen($string)?-?1;?
????????$code?=?'';?
????????for?($i?=?0;?$i?$len;?$i++)?{?
????????????$code?.=?$string[rand(0,?$count)];?
????????}?
????????return?$code;?
????}?
??????
????//保存验证码?
????function?saveCode($phone,$code,$time?=?5)?
????{?
????????global?$dsql;?
????????$created_at?=?time();?
????????$expire_at?=?time()?+?($time?*?60);?
????????$code?=?strtolower($code);?
????????$sql?=?"INSERT?INTO?`dede_sms`(`phone`,`code`,`created_at`,`expire_at`)?VALUES?('$phone','$code','$created_at','$expire_at')";?
????????return?$dsql->ExecuteNoneQuery($sql);?
????}?
??????
????//检查手机号,验证码?
????function?validateCode($phone,$code)?
????{?
????????global?$dsql;?
????????$code?=?strtolower($code);?
????????$current?=?time();?
????????$sql?=?"SELECT?`id`?FROM?`dede_sms`?WHERE?`phone`?LIKE?'$phone'?AND?`code`?LIKE?'$code'?AND?`expire_at`?>?'$current'?";?
????????$row?=?$dsql->GetOne($sql);?
????????if(is_array($row)){?
????????????return?true;?
????????}else{?
????????????return?false;?
????????}?
????}?
??????
????//检查是否发送:防止恶意刷短信?
????//$phone?手机号?www.dede58.com织梦模板下载
????//$time??有效时间?(分钟)?
????function?validatePremise($phone,$time?=?'1')?
????{?
????????global?$dsql;?
????????$row?=?$dsql->GetOne("SELECT?`id`,`expire_at`?FROM?`dede_sms`?WHERE?`phone`?LIKE?'$phone'?");?
????????if(is_array($row)){?
????????????if(?time()?$row['expire_at']?){?
????????????????return?false;?
????????????}else{?
????????????????$dsql->ExecuteNoneQuery("DELETE?FROM?`dede_sms`?WHERE?id=".$row['id']);?
????????????}?
????????}?
????????return?true;?
????}
|
?
提示:表的前缀改为你的表前缀,这样就完成了织梦短信接口。