短信接口
场景:通常在使用手机号注册时需要发送短信验证码,在修改密码等敏感操作时也需要验证手机号发送短信验证码。
短信验证码的目的:验证用户的身份是否本人
在项目代码中发送短信,通常要调用第三方短信商的短信发送接口。
提供短信接口的平台:百度Apistore数据平台、聚合数据平台、京东万象等等
一般情况下,短信接口需要企业认证用户才能申请、一般都是收费的。
短信宝:
<?php
$statusStr = array(
"0" => "短信发送成功",
"-1" => "参数不全",
"-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
"30" => "密码错误",
"40" => "账号不存在",
"41" => "余额不足",
"42" => "帐户已过期",
"43" => "IP地址限制",
"50" => "内容含有敏感词"
);
$smsapi = "http://api.smsbao.com/";
$user = "***"; //短信平台帐号
$pass = md5("****"); //短信平台密码
$content="短信内容";//要发送的短信内容
$phone = "*****";//要发送短信的手机号码
$sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
$result =file_get_contents($sendurl) ;
echo $statusStr[$result];
首先使用composer执行命令
composer require mrwanghongda/sms-sdk
当点击发送验证码的按钮时发送ajax请求
绑定点击事件
<div class="control-group"><label for="inputPassword" class="control-label">验证码:</label><div class="controls"><input type="text" id="code" name="code" placeholder="验证码" class="input-xfat input-xlarge" style="width:120px"><button type="button" class="btn-xlarge" id="dyMobileButton">发送验证码</button><span class="error"></span></div>
</div>
发送ajax请求
$('#dyMobileButton').click(function (){var tel = $('#phone').val();$.ajax({url:'sendcode',data:{tel:tel,},type:'get',success:function (e){console.log(e);}})})
控制器中的代码
/*** 短信宝*/const SMS_BAO = 'bao';/*** 腾讯云*/const SMS_TENCENT = 'tencent';/*** 阿里云正在开发中...*/const SMS_ALIYUN = 'aliyun';//接受手机号$tel = $request->get('tel');//生成随机数$code=rand(1111,9999);//工厂模式$smsObj = (new SmsFactory(SmsFactory::SMS_BAO))->getSmsService();/* 必要步骤:* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,* 以免泄露密钥对危及你的财产安全。* CAM密匙查询: https://console.cloud.tencent.com/cam/capi*/$config = [/* 填写平台对应的CAM密匙secretId,短信宝填写平台账号*/'secretId' => '账号',/* 填写平台对应的CAM密匙secretKey,短信宝填写平台密码*/'secretKey' => '密码',/* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 ,短信宝默认为空*/'smsSdkAppId' => '',/* 验证码,示例如5039 */'code' => $code,/* 填写腾讯、阿里平台对应的签名内容,短信宝则默认为空 */'signName' => '',/* 发送的手机号,示例如17899873465 */'tel' => $tel,/* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */'templateId' => "",/* 模板发送的短信内容,短信宝则需要填写 如:"【短信宝】您的验证码是"5390",3分钟有效。", 腾讯、阿里默认为空 */'content' => '【短信宝】'.$code.',3分钟有效。',//];$result = $smsObj->send($config);