本来以为 向用户发短信是一件很难的事 以前也没有做过

今天公司业务涉及到了 需要一个短信验证用以收集用户信息 硬着头皮上了 没想到是一件挺简单的事  

嗯 首先需要一个阿里云账号 

购买短信服务之后 需要申请一个签名 和一个模板 (这一步需要阿里工作人员审核,不过很快 一个小时左右就好了)

然后申请自己的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;
    }
   
}

  

版权声明:本文为zhangxiaoxia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangxiaoxia/p/10826615.html