赞
踩
前言:现在短信验证码注册已经变得非常普遍,我在自己写项目的时候,有时候也会想能不能加个短信注册的功能呢?这技术多牛叉啊,后来就去网上找资料学习了一下,第一次实现短信验证码功能还是非常有成就感的,下面简单分享一下如何开通短信验证码业务,也算自己逐步写博客的一次次记录。
首先,需要注册阿里云并实名认证,认证后点击一个人头像,即可进入账号中心,然后将鼠标移至右上角头像框处,即可出现菜单栏,然后点击AccessKey管理,进入到RAM访问控制。
进入的时候我们选择开始使用子用户AccessKey
然后点击身份管理,在其下拉菜单中选择用户组,根据要求创建一个用户组即可,用户组创建好之后,点击右边的权限管理
然后在弹出的页面中搜索sms,找到管理短信服务,点击选择后点确定即可。
然后点击用户,创建一个用户,创建用户一定要勾选上API调用访问,因为我们后面需要写代码调用SDK发送验证码。
用户创建好之后,一定要记住当前的AccessKey ID和AccessKey Secret,这个在后面调用SDK必须要的,可以复制一下,这个很重要,不要让其他人知道,不然别人可以调用你的短信业务,那么就是用你的账户里面的钱。
然后返回,将该用户添加至我们刚刚创建的用户组中
我们点击刚刚创建的用户,就可以进入到该用户的详情页,可以看到自己刚才创建的AccessID,我·们还可以点击权限管理,看到当前用户的权限详情,因为我们没有给该用户添加权限,只有继承用户组的权限,点击即可查看刚刚我们给用户组添加的短信权限。
到这,我们这边就配置差不多了,就去阿里云主页,搜索短信服务,点击进入,免费开通,
这就是短信服务的主界面,我们点击快速学习,快速学习有这四部分,下面我们逐个解释。
第一个是签名,签名就是验证码前面的公司名,我们只需要写上公司名即可,不需要加【】,这个不支持个人用户申请,所以我直接跳过
第二个就是模板,就例如我们平时收到的验证码,有效五分钟,请勿泄露等等,都是在模板里面进行填写,这里我们也能看到短信验证码的收费标准吗,我们可以点开短信计费规则进行查看,右边手机红框子里可以看到我们写的模板的样式。还有就是注意变量需要用${code}写法,code就是我们生成所发送的验证码,下面都有格式样式的,可以参考。
另外两个简单看一下就可以了。
我们在快速学习页面的下方,可以看到如下界面,点击调用API发送短信,即可进入到官方给定的demo
将鼠标移至SDK以来信息,在弹出框中复制以来,添加到springboot的pom依赖中
然后在项目中写个Controller,还有service层处理相关业务即可,下面直接粘贴代码。
- import com.admin.service.ComUserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.CrossOrigin;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- @CrossOrigin
- public class UsergetsmsController {
-
- @Autowired
- private ComUserService comUserService;
-
- @RequestMapping("/getsms")
- public boolean usergetsms( @RequestParam("telnumber") String telnumber) throws Exception {
- return comUserService.smtSentsms(telnumber);
- }
- }
因为是我整合到我的目前的这个项目中,在ComUserService中有我写的具体方法,方法如下
- @Override
- public boolean smtSentsms(String telnumber) throws Exception {
-
- /* java.util.List<String> args = java.util.Arrays.asList(args_);*/
- com.aliyun.dysmsapi20170525.Client client = createClient("你的AccessKey ID" ,"你的AccessKey Secret");
- double codes=Math.random(); ///生成随机数
- while (codes*10<1)
- codes*=10;/// 确保生成的小数是0.x的
-
- String code="{\""+"code"+"\""+":\""+(int)(codes*1000000)+"\"}"; ///字符串拼接,官方要求的格式是{"code":"xxxx"},要求为4-6位的数字
- System.out.println(code);
- com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest =
- new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
- .setSignName("阿里云短信测试") /这里也是官方给定的测试专用的签名
- .setTemplateCode("SMS_154950909") /因为这是用的官方的测试,所以这里只能填官方的给出的模板代码(TemplateCode)
- .setPhoneNumbers(telnumber) 传进来的电话号码参数
- .setTemplateParam(code); ///上面拼接而成的字符串
- com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
- try {
- // 复制代码运行请自行打印 API 的返回值
-
- System.out.println(client.sendSmsWithOptions(sendSmsRequest, runtime));
-
- } catch (TeaException error) {
- // 如有需要,请打印 error
- com.aliyun.teautil.Common.assertAsString(error.message);
- System.out.println(error.message+"1");
- } catch (Exception _error) {
- TeaException error = new TeaException(_error.getMessage(), _error);
- // 如有需要,请打印 error
- System.out.println(error.message+"2");
- com.aliyun.teautil.Common.assertAsString(error.message);
- }
-
- return false;
- }
-
- public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
- com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
- // 您的 AccessKey ID
- .setAccessKeyId(accessKeyId)
- // 您的 AccessKey Secret
- .setAccessKeySecret(accessKeySecret);
- // 访问的域名
- config.endpoint = "dysmsapi.aliyuncs.com";
- return new com.aliyun.dysmsapi20170525.Client(config);
- }
这是官方给出的测试专用的签名以及模板,在上诉的填写中需要用到
还有一个需要注意的点就是,因为我们是测试模板,所以必须添加测试手机号,然后才能给测试号码发送验证码。
最后,我们运行我们的服务器,测试请求一下,就可以成功啦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。