阿里大鱼 http://www.alidayu.com/ 的短信接口总体是不错的,别安驹个人认为不管是从性价比还是稳定性上都是跟同类的短信接口好些,毕竟是大公司的东西不会差到哪去。下面把之前开发的短信接口做个整理。
1,登陆阿里大鱼的管理中心新增自己的应用,然后使用什么模板请提交审核,此处不做多说。
2,核心步骤,整理阿里大鱼给出的php示例核心包,不过别安驹已经为你整理好了只需要下载即可 核心包传送门 (ps:解压密码:http://www.bieanju.com/)。
3,前台调用发送短信利用ajax异步请求处理发送,
3.1、当然此处会先用一些公共配置所以先来看看配置:
/* 阿里大鱼短信接口 */ 'Alidayu' => array( 'Appkey' => 'xxxx', 'SecretKey'=>'xxxx', 'SmsTemplate' => 'SMS_xxx',// 注册提示模板号 'SignName' => '测试短信', 'Product' => '别安驹测试短信内容', 'Expire' => '300' ),
需要注意的地方是SignName,短信签名,位置在管理中心> 配置管理 > 短信通知 如图:
3.2、后台发送短信方法(ps:可以写成公共函数,毕竟发短信的地方不止注册,可能需要修改密码或者找回密码都会用到)此处传参要求请参照阿里大鱼官方要求 传送门 (PS:请登录后查看):
//调用的发送方法
public function mobilevalid() { $mobile = I('mobile'); echo sendMobileCode($mobile); }
/* * 阿里大鱼手机验证码发送函数 * * */ function sendMobileCode($mobile){ Vendor('Alidayu.Client'); Vendor('Alidayu.SendSms'); Vendor('Alidayu.ResultSet'); Vendor('Alidayu.RequestCheckUtil'); Vendor('Alidayu.TopLogger'); $client = new Client(); $client->appkey = C('Alidayu.Appkey'); $client->secretKey = C('Alidayu.SecretKey'); /* 组装发送前置参数 */ $code = randCode(4); $send_msg = array('code'=>$code,'product'=>C('Alidayu.Product'),'item'=>C('Alidayu.Product')); $request = new SendSms(); $request->setExtend($mobile); $request->setSmsType("normal"); $request->setSmsFreeSignName(C('Alidayu.SignName')); $request->setSmsParam(json_encode($send_msg)); $request->setRecNum($mobile); $request->setSmsTemplateCode(C('Alidayu.SmsTemplate')); $result = json2array(json_encode($client->execute($request))); if($result['result']['success']){ cookie('mobile_validated',$code,C('Alidayu.Expire')); $msg = array('status'=> 1,'info'=>"验证码已发送至您的手机!"); }else{ $msg = array('status'=> 0,'info'=>"验证码发送失败,".$result['sub_msg']."请稍后重试!"); } return json_encode($msg); }
发送短信的公共函数中使用的函数:
1:json串转array处理 json2array:
/** * json串转array处理 * @param json json字符串 * @author bieanju <bieanju@163.com> * @return array */ function json2array($json){ $json = str_replace("\r\n", '\n',trim($json,chr(239).chr(187).chr(191)));//剔除bom以及去除\r return json_decode($json,true); }
2:随机生成验证码数字函数:
function randCode($length){ return substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, $length); }
3.3、前台调用主要是ajax写的函数处理发送短信和倒计时:
var mobileUrl = "处理发送短信的方法地址";
$(function(){ $('#sendmsg').click(function(){ var mobile = $("input[name='mobile']").val(); var url = mobileUrl; curCount = count; if(!mobile){ layer.msg("对不起请先填写手机号"); return false; } $.get(mobileUrl,{mobile:mobile},function(json){ json = eval("("+json+")"); if(json.status){ InterValObj = window.setInterval(SetRemainTime, 1000); layer.msg(json.info); }else{ layer.msg(json.info); } }) }) }) function SetRemainTime() { if (curCount == 0) { window.clearInterval(InterValObj);//停止计时器 $("#sendmsg").removeAttr("disabled");//启用按钮 $("#sendmsg").html("重新发送验证码"); $("#sendmsg").css("background","#FAEBC4"); }else{ curCount--; $("#sendmsg").html(curCount+"秒后重发"); $("#sendmsg").attr("disabled","disabled"); $("#sendmsg").css("background","#E8E6E0"); } }
Ok大功告成,短信模板就此已经发送成功了!是不是很简单呢?哈哈……