开通短信验证码功能。java

上周接到一个需求,说要给登录做一个发送短信验证码功能。

思考实现思路:先校验用户名密码→用户名密码正确→判断当前设备是否为新设备(获取设备码和数据库中存的设备码做比较,怎么获取设备码这篇博客不讲,因为我暂时也不知道。等之后我了解了我再补上)→是新设备,发送验证码→......

现在写怎么发送验证码。

我用的阿里云短信服务。你也可以用腾讯云、百度云、随便什么云都OK,只是代码可能有点区别,但是大部分应该都会有文档吧。如果怕不会弄,那你就和我一样用阿里云,然后可以参考一下我的博客去了解短信业务。

废话不多说,现在开始。java语言

第一步:注册一个阿里云帐号(有帐号就进行下一步)

第二步:在产品服务里搜短信服务

 

第三步:查看短信服务产品页面

这里面有三个值得关注的地方:

①帮助文档,这里面有很多关于短信服务的介绍,包括错误代码的释义什么的。

②国内消息,这里面有几个配置参数是后面在短信代码里面会用到的,要在这里面配置参数。

③测试demo,在写代码之前你可以先去测试一下,当然,要一点点钱,0.045一条短信,你往里面充5毛钱就够你发好几条了。怎么充钱,去哪里充,你用测试代码测一下,它会告诉你余额不足,然后会甩给你一个链接,你点击那个链接充就行了。我听说有10块钱试用券,但是我没有找到,你们可以找找,找不到的话就先充5毛钱玩玩吧。

第三步:查看代码示例,可以直接点击第二步里面的“查看api demo”,然后就直接来到了第三步这里,测试demo也叫可视化调试。这张图里面最重要的几个地方已经框出来了

从左往右看

①第一个框里框出来的东西代表三种短信类型,是单个发还是批量发。验证码是单个发,所以我只用了sendsms

②第二个框里框出来的东西是一些参数,比如你的短信是发给谁的,签名是什么(后面会讲签名是什么),用哪个短信模板(就是一个短信模板,比如:您正在注册账号,您的验证码是xxxx。这就是一个模板,除了验证码会变,其他都一样。后面会讲怎么设置)。然后需不需要参数填templateParam?如果只是发商品推广信息什么的,没有校验功能的短信就不需要这个templateParam,有的话就要把参数以json的格式写在这,后续代码会取值赋值给它。

③你把第二个框框里你需要的参数填了以后,第三个框框里会自动给你生成代码。

测试一下,点击发起调用。(如果提示余额不足记得充个5毛钱什么的)

看一下效果:

 

OK,写到这,现在开始讲怎么开始写这个东西。在demo里我们可以看到,标*必填的参数有两个,另外还有两个在帮助文档里也有提到,就是AccessKey。具体怎么获取这个,看帮助文档。

 

第四步:现在,我假设你已经拿到AccessKey了。

然后我们去配置签名和短信模板。点开第二张图里说的“国内消息”

①签名配置

点击“添加签名”,可以看到,我之前已经添加了一次签名了。签名名称就是mangolb,也就是短息里面中括号【】里面显示的内容。

按照提示填好信息即可。

②短信模板配置

添加模板

常用模板库 

模板库里面有很多模板。看我红色框框出来的就是验证码的赋值处。既然有验证码,那个templateParam就必须要填。

 

OK,假设AccessKey你也弄了,签名、模板也配置好了。那么就可以写代码了。其实可以直接copy示例代码里的代码,然后改一下就ok了。看看我的代码:

代码如下:

public class AliyunSendSmsUtil {
    static final String domain="dysmsapi.aliyuncs.com";
    static final String version="2017-05-25";
    static final String action="SendSms";
    static final String templateCode="你的templateCode";
    static final String signName="你的签名";
    //此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "你的accessKeyId ";
    static final String accessKeySecret = "你的accessKeySecret ";


    public static Map<String,Object> sendSms(String phoneNumber) {
        CommonResponse response=new CommonResponse();
        Integer code=(int) ((Math.random() * 9 + 1) * 100000);
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        //request.setProtocol(ProtocolType.HTTPS);
        request.setMethod(MethodType.POST);
        request.setDomain(domain);
        request.setVersion(version);
        request.setAction(action);
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phoneNumber);
        request.putQueryParameter("SignName", signName);
        request.putQueryParameter("TemplateCode", templateCode);
        request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}");
        try {
            response = client.getCommonResponse(request);
            System.out.println(response.getData());

        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        Map<String,Object> map=new HashMap<>();
        map.put("response",response.getData());
        map.put("code",code);
        return map;
    }
}

OK,到此,这个方法就OK了,后续自己进行调用就行了。

然后还要考虑防刷。防止被人直接调你的接口然后刷光你的短信,也就是刷光你的钱。什么意思?请百度短信轰炸机。嘿嘿!

防刷的话,一般都是添加图片验证码那种,就12306那种你懂得吧。

嗯,大概就这样。

over!

 

也可以参考一下这篇博文:

https://www.cnblogs.com/hi-feng/p/8017311.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值