Java调用阿里云短信接口,发送短信
1.短信服务这个很简单,只需要知道accessKeyId(AK)、accessKeySecret(SK)、短信签名、短信模板即可。
2.域名和产品名称是固定的,使用的是阿里的产品
AK和SK查看:
AK:
SK:
ps:短信模板和签名。
注意:这里的短信签名的适用场景和短信模板的类型必须相同,否则会报错。(即:签名的适用场景为验证码,则模板的类型也是验证码)
ps:个人申请短信签名和模板很难通过审核。现在短信签名申请,如果没有上线的app或者网站的话,貌似申请不了了。
个人申请半天,短信签名一直没通过,幸好之前申请过。。。嘿嘿。。。
废话不多说,直接上代码。
POM文件依赖:
<!--阿里短信服务--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.7.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency>
代码如下:
@Componentpublic class SMSNotification {// 此处需要替换成开发者自己的AK和SK(在阿里云访问控制台寻找)private static String accessKeyId = "xxxxxx";private static String accessKeySecret = "xxxxxx";// 阿里云产品名称:云通信短信API产品,开发者无需替换private static String product = "Dysmsapi";// 阿里云产品域名,开发者无需替换private static String domain = "";public String sendSMS(String message){try{//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou",product,domain);IAcsClient acsClient = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式request.setPhoneNumbers("手机号1,手机号2");//必填:短信签名-可在短信控制台中找到request.setSignName("这里是你自己的短信签名");//必填:短信模板-可在短信控制台中找到request.setTemplateCode("这里是你自己的短信模板CODE");//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam(message);//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("");//请求失败这里会抛ClientException异常SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse.getMessage();} catch (Exception ex) {log.info("短信发送失败:{} ", ex.getMessage());return "";}}}