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向手机发送验证码了!