关于阿里云短信接口的使用
本来以为 向用户发短信是一件很难的事 以前也没有做过
今天公司业务涉及到了 需要一个短信验证用以收集用户信息 硬着头皮上了 没想到是一件挺简单的事
嗯 首先需要一个阿里云账号
购买短信服务之后 需要申请一个签名 和一个模板 (这一步需要阿里工作人员审核,不过很快 一个小时左右就好了)
然后申请自己的AccessKey ,AccessKey 包括AccessKeyId 和AccessKeySecret 在调用阿里的服务的时候用以验证用户的身份
关于这些 阿里云API上都有很详细的介绍 https://help.aliyun.com/product/44282.html?spm=a2c4g.11186623.6.540.6e5534fc0q0cnP 大家可以参考
然后 引入阿里提供的SDK后 直接代码了 这里要注意SDK的版本
关于这一快 网上有很多教程 我就不详细阐述了
protected bool SendMessage(string PhoneNumber)
{
bool IsSuccess = true;
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
//这里写入你在官网申请的accessKey
String accessKeyId = "";//你的accessKeyId,参考本文档步骤2
String accessKeySecret = "";//你的accessKeySecret,参考本文档步骤2
IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
//IAcsClient client = new DefaultAcsClient(profile);
// SingleSendSmsRequest request = new SingleSendSmsRequest();
//初始化ascClient,暂时不支持多region(请勿修改)
DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
try
{
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式,发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”
request.PhoneNumbers =PhoneNumber;
//必填:短信签名-可在短信控制台中找到
request.SignName = "天材教育";
//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
request.TemplateCode = "SMS_164666489";
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//request.TemplateParam = "{\"name\":\"Tom\", \"code\":\"123\"}";
//request.TemplateParam = "{\"code\":\"123\"}";
string RandomCode = getRandom();
request.TemplateParam = "{\"code\":\"" + RandomCode + "\"}";
//request.TemplateParam = "您正在申请注册,验证码为:${code},5分钟内有效!";
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.OutId = "123";
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);
//这里是我自己添加的代码 没做很复杂的业务 只是存到session里面了
if (Context.Session["RandomCode"] != null)
{
Context.Session.Remove("RandomCode");
Context.Session["RandomCode"] = RandomCode;
}
else
{
Context.Session["RandomCode"] = RandomCode;
}
//这里如果短信发送成功 会返回OK 如果没有 会返回错误信息
if (sendSmsResponse.Message !="OK")
{
IsSuccess = false;
}
}
catch (ServerException e)
{
IsSuccess = false;
string result = e.Message;
}
catch (ClientException e)
{
IsSuccess = false;
string result = e.Message;
}
return IsSuccess;
}
然后 这里我测试的时候 遇到一个错误

返回了一个这个错误信息
错误原因是因为短信发送有默认的频率限制:
限制如下:
短信验证码 :使用同一个签名,对同一个手机号码发送短信验证码,支持1条/分钟,5条/小时 ,累计10条/天。
短信通知: 使用同一个签名和同一个短信模板ID,对同一个手机号码发送短信通知,支持50条/日
这个基本没有难度 都是阿里云 封装好的 官方的文档 写的也很清楚
然后发送完短信之后 需要设置一个按钮禁用的问题 60秒之后重新发送
//这是验证码发送完之后调用的代码
countdown: 60,
var obj = $("#btn_Send");
vedioDetails.settime(obj);
settime: function (obj)
{
//这里的vedioDetails是一个js对象 直接从代码里拷来了 就是上面的countdown
if (vedioDetails.countdown == 0)
{
obj.attr('disabled', false);
obj.text("获取验证码");
vedioDetails.countdown = 60;
return;
}
else
{
obj.attr('disabled', true);
obj.text("重新发送(" + vedioDetails.countdown + ")");
vedioDetails.countdown--;
}
setTimeout(function ()
{
vedioDetails.settime(obj)
}, 1000)
}
然后就没什么了 涉及到一个手机号 和六位数验证码的正则 一块贴出来吧
function checkPhone(phone)
{
//var phone = document.getElementById('phone').value;
if (!(/^1[34578]\d{9}$/.test(phone))) {
alert("手机号码有误,请重填");
return false;
}
}
function CheckAuthCode(AuthCode)
{
if (!(/^\d{6}$/.test(AuthCode))) {
alert("6位验证码有误,请重填");
return false;
}
}
活着就要做有意义的事,最有意义的事就是好好活。

浙公网安备 33010602011771号