申请阿里云短信服务
打开阿里云的控制台,在产品与服务中找到云通讯,并选择短信服务
然后会有一个新手接入的教程,这边直接跟着快速学习了解一下短信服务的基本流程,快速学习下面有短信测试的Demo,可以尝试一下,前提是得再阿里云里有余额,本地每条短信0.04元已近很良心价了呢
再使用之前,肯定是先添加自己验证短信的签名和模板,这些在快速学习中有提到,只是申请需要1个小时左右的审核时间。
趁着审核的这段时间,感觉看看短信服务的开发文档,java向阿里云请求短信服务的参数
请求参数
名称 | 类型 | 是否必选 | 示例值 | 描述 |
---|---|---|---|---|
PhoneNumbers | String | 是 | 15900000000 | 接收短信的手机号码。格式:国内短信:11位手机号码,例如15951955195。国际/港澳台消息:国际区号+号码,例如85200000000。支持对多个手机号码发送短信,手机号码之间以英文逗号(,)分隔。上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。说明 验证码类型短信,建议使用单独发送的方式。 |
SignName | String | 是 | 阿里云 | 短信签名名称。请在控制台签名管理页面签名名称一列查看。说明 必须是已添加、并通过审核的短信签名。 |
TemplateCode | String | 是 | SMS_153055065 | 短信模板ID。请在控制台模板管理页面模板CODE一列查看。说明 必须是已添加、并通过审核的短信签名;且发送国际/港澳台消息时,请使用国际/港澳台短信模版。 |
AccessKeyId | String | 否 | LTAIP00vvvvvvvvv | 主账号AccessKey的ID。 |
Action | String | 否 | SendSms | 系统规定参数。取值:SendSms。 |
OutId | String | 否 | abcdefgh | 外部流水扩展字段。 |
SmsUpExtendCode | String | 否 | 90999 | 上行短信扩展码,无特殊需要此字段的用户请忽略此字段。 |
TemplateParam | String | 否 | {"code":"1111"} | 短信模板变量对应的实际值,JSON格式。说明 如果JSON中需要带换行符,请参照标准的JSON协议处理。 |
返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
BizId | String | 900619746936498440^0 | 发送回执ID,可根据该ID在接口QuerySendDetails中查询具体的发送状态。 |
Code | String | OK | 请求状态码。返回OK代表请求成功。其他错误码详见错误码列表。 |
Message | String | OK | 状态码的描述。 |
RequestId | String | F655A8D5-B967-440B-8683-DAD6FF8DE990 | 请求ID。 |
然后我们的先去控制台,等签名和模板都审核通过后就可以直接使用了
短信服务在java中的使用
首先得导入阿里云短信服务的maven依赖
<!--阿里短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
</dependency>
分装一个短信服务的工具类
package com.drxzt.common.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/**
* className MassageUtil
* description TODO
*
* @author DR XZT
* @version 1.0
* @date 2019/7/18 10:15
*/
public class MassageUtil extends BaseUtil {
private static final String ACCESS_KEY_Id = "AsccessKeyID";
private static final String ACCESS_KEY_SECRET = "AsccessKeySecret";
private static final String REGION_ID = "cn-hangzhou";
private static final String SIGN_NAME = "短信签名";
private static final String TEMPLATE_CODE = "短信模板code";
public static void main(String[] args) {
System.out.println(senMassage("phoneNum"));
}
public static JSONObject senMassage(String phoneNumber) {
JSONObject result = new JSONObject();
//随机生成6位验证码
String code = String.valueOf((int) (Math.random() * 10000 + 10000)).substring(1);
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_Id, ACCESS_KEY_SECRET);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", REGION_ID);
request.putQueryParameter("PhoneNumbers", phoneNumber);
request.putQueryParameter("SignName", SIGN_NAME);
request.putQueryParameter("TemplateCode", TEMPLATE_CODE);
request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");
try {
CommonResponse response = client.getCommonResponse(request);
result = JSON.parseObject(response.getData());
result.put("verCode", code);
return result;
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return result;
}
}
调用结果:
{
"Message": "OK",
"RequestId": "080D4F9C-E89C-42C3-BFA7-0B944CA5D67E",
"BizId": "400511863443876834^0",
"Code": "OK",
"verCode": "5988"
}