Java实现免费短信功能需要使用到第三方短信服务商的API接口。常用的短信服务商有阿里云、腾讯云、云片等。这里以阿里云短信服务为例,介绍Java实现免费短信功能的步骤:
- 在阿里云官网注册账号并开通短信服务。登录阿里云控制台,进入“短信服务”页面,按照提示完成账号注册、实名认证和开通短信服务的操作。
- 创建AccessKey。在阿里云控制台中,进入“AccessKey管理”页面,创建AccessKey用于API访问。
- 在Java项目中添加阿里云短信SDK的Maven依赖。在pom.xml文件中添加以下代码:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.0.0</version> </dependency>
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20170525.SendSmsRequest; import com.aliyuncs.sms.model.v20170525.SendSmsResponse; public class SmsUtil { // 阿里云短信API的密钥ID和密钥Secret private static final String ACCESS_KEY_ID = "your_access_key_id"; private static final String ACCESS_KEY_SECRET = "your_access_key_secret"; // 短信API的产品名称(短信产品名固定,无需修改) private static final String PRODUCT = "Dysmsapi"; // 短信API的产品域名(接口地址固定,无需修改) private static final String DOMAIN = "dysmsapi.aliyuncs.com"; // 发送短信 public static boolean sendSms(String phoneNumber, String signName, String templateCode, String templateParam) { // 设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); // 初始化acsClient,暂不支持region化 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN); } catch (ClientException e) { e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 必填:待发送手机号 request.setPhoneNumbers(phoneNumber); // 必填:短信签名-可在短信控制台中找到 request.setSignName(signName); // 必填:短信模板-可在短信控制台中找到 request.setTemplateCode(templateCode); // 可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为{"code":"123456"} request.setTemplateParam(templateParam); // 发送短信 try { SendSmsResponse response = acsClient.getAcsResponse(request); if ("OK".equals(response.getCode())) { return true; } else { System.out.println("短信发送失败,错误码:" + response.getCode() + ",错误信息:" + response.getMessage()); return false; } } catch (ServerException e) { e.printStackTrace(); return false; } catch (ClientException e) { e.printStackTrace(); return false; } } }
其中,需要替换的参数包括:
- ACCESS_KEY_ID:阿里云短信API的密钥ID。
- ACCESS_KEY_SECRET:阿里云短信API的密钥Secret。
- phoneNumber:接收短信的手机号码。
- signName:短信签名,在阿里云短信控制台中创建。
- templateCode:短信模板,在阿里云短信控制台中创建。
- templateParam:短信模板中的变量替换JSON串。
- 在Java代码中调用sendSms方法发送短信。以下是一个示例代码:
public static void main(String[] args) { String phoneNumber = "手机号码"; String signName = "短信签名"; String templateCode = "短信模板代码"; String templateParam = "{\"code\":\"123456\"}"; // 短信模板中的变量替换JSON串 boolean result = SmsUtil.sendSms(phoneNumber, signName, templateCode, templateParam); if (result) { System.out.println("短信发送成功"); } else { System.out.println("短信发送失败"); } }
注意:发送短信需要消耗短信API的资源,建议在调用sendSms方法前进行短信验证码的有效性验证,避免资源浪费。
评论