Java实现发送手机验证码
向手机发送验证码在用户注册等等业务中会用到,下面我来介绍如何用Java实现向手机发送验证码。
笔者此处使用的是阿里云的短信服务,首先需要登录阿里云官方网站,找到并开通短信服务,然后需要申请短信签名和模版,
短信签名即一般短信开头用【】扩起的内容,填写完成后申请,一般都能申请通过,个人申请最多只能申请一个短信签名。接下来申请短信模版,
申请短信模版需按照一定的格式,格式在阿里云官网上有详细说明,此处不再赘述。
申请成功后,查看短信模版的模版CODE,在稍后的源代码中需要用到这个信息。
在得到上述模版CODE后,还需要获得Access Key ID 和Access Key Secret ,获得的方法是在页面的右上角用户名处有一个AccessKeys ,点击就可以看到自己的Access Key ID和Access Key Secret .
阿里云提供了Java短信服务的API,但是看起来稍有些麻烦, 在网上有一些方法介绍要创建一个APPKey的方法,目前阿里云主页已经改版,这种方法不再适用。万事具备,下面就来分享和介绍源代码。
1. import com.aliyuncs.DefaultAcsClient;
2. import com.aliyuncs.IAcsClient;
3. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
4. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
5. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
6. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
7. import com.aliyuncs.dysmsapi.transform.v20170525.SendSmsResponseUnmarshaller;
8. import com.aliyuncs.exceptions.ClientException;
9. import com.aliyuncs.http.FormatType;
10. import com.aliyuncs.http.HttpResponse;
11. import com.aliyuncs.profile.DefaultProfile;
12. import com.aliyuncs.profile.IClientProfile;
13. import java.nio.charset.Charset;
14. import java.text.SimpleDateFormat;
15. import java.util.Date;
16. import java.util.UUID;
17.
18. public class SendCode {
19. public static SendSmsResponse sendSms(String phoneNumber,String code) throws ClientException {
20. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");//不必修改
21. System.setProperty("sun.net.client.defaultReadTimeout", "10000");//不必修改
22. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "**********", "*********");//"***"分别填写自己的AccessKey ID和Secret
23. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");//不必修改
24. IAcsClient acsClient = new DefaultAcsClient(profile);//不必修改
25. SendSmsRequest request = new SendSmsRequest();//不必修改
26. request.setPhoneNumbers(phoneNumber);//****处填写接收方的手机号码
27. request.setSignName("孙大大通讯");//此处填写已申请的短信签名
28. request.setTemplateCode("SMS_79105048");//此处填写获得的短信模版CODE
29. request.setTemplateParam("{\"code\":\""+code+"\"}");//笔者的短信模版中有${code}, 因此此处对应填写验证码
30. SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);//不必修改
31. return sendSmsResponse;
32. }
33. public static void main(String[] args) throws ClientException, InterruptedException {
34. SendSmsResponse response = sendSms(phoneNumber,code);
35. }
36. }
引用上述源代码需要导入两个jar包,以下是jar包的下载地址:点击打开链接,提取密码为kldm。
最后在阿里云短信服务里充值上两元钱,就可以成功的通过Java向手机发送验证码了!