关于阿里云短信接口的使用
本来以为 向用户发短信是一件很难的事 以前也没有做过
今天公司业务涉及到了 需要一个短信验证用以收集用户信息 硬着头皮上了 没想到是一件挺简单的事
嗯 首先需要一个阿里云账号
购买短信服务之后 需要申请一个签名 和一个模板 (这一步需要阿里工作人员审核,不过很快 一个小时左右就好了)
然后申请自己的AccessKey ,AccessKey 包括AccessKeyId 和AccessKeySecret 在调用阿里的服务的时候用以验证用户的身份
关于这些 阿里云API上都有很详细的介绍 https://help.aliyun.com/product/44282.html?spm=a2c4g.11186623.6.540.6e5534fc0q0cnP 大家可以参考
然后 引入阿里提供的SDK后 直接代码了 这里要注意SDK的版本
关于这一快 网上有很多教程 我就不详细阐述了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | protected bool SendMessage( string PhoneNumber) { bool IsSuccess = true ; String product = "Dysmsapi" ; //短信API产品名称(短信产品名固定,无需修改) String domain = "dysmsapi.aliyuncs.com" ; //短信API产品域名(接口地址固定,无需修改)<br> //这里写入你在官网申请的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); <br> //这里是我自己添加的代码 没做很复杂的业务 只是存到session里面了 if (Context.Session[ "RandomCode" ] != null ) { Context.Session.Remove( "RandomCode" ); Context.Session[ "RandomCode" ] = RandomCode; } else { Context.Session[ "RandomCode" ] = RandomCode; }<br> //这里如果短信发送成功 会返回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秒之后重新发送
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | //这是验证码发送完之后调用的代码 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) } |
然后就没什么了 涉及到一个手机号 和六位数验证码的正则 一块贴出来吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 ; } } |
作者: Felix-Zhang
出处:https://www.cnblogs.com/zhangxiaoxia/p/10826615.html
版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探