關於阿里雲短信接口的使用


本來以為 向用戶發短信是一件很難的事 以前也沒有做過

今天公司業務涉及到了 需要一個短信驗證用以收集用戶信息 硬着頭皮上了 沒想到是一件挺簡單的事  

嗯 首先需要一個阿里雲賬號 

購買短信服務之后 需要申請一個簽名 和一個模板 (這一步需要阿里工作人員審核,不過很快 一個小時左右就好了)

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM