1、开通短信服务
1.1、控制台方式开通
登陆云鼎控制台,访问云鼎短信服务申请开通。
1.2、API方式开通
1.2.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/smsUsers
请求参数
无
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
success | Boolean | 是否开通成功 |
1.2.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void openService() {
OpenServiceUsingPOSTRequest openServiceUsingPOSTRequest = new OpenServiceUsingPOSTRequest();
System.out.println(new Gson().toJson(ydsmsClient.openServiceUsingPOST(openServiceUsingPOSTRequest)));
}
}
2、代码示例
请按以下说明准备好环境。 JAVA环境依赖, 请确保已经安装了 JDK 8 环境,若未安装请前往 Oracle 官网下载;
SDK环境依赖, 建议使用Maven 方式引入依赖:
<dependency>
<groupId>com.jdcloud.sdk</groupId>
<artifactId>ydsms</artifactId>
<version>1.0.5</version>
</dependency>
关于 Java SDK 的最新版本号,请查看
调用openapi接口accessKeyId和secretAccessKey前往京东云控制台AccessKey管理页面查看
2.1、创建短信应用
2.1.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/smsApps
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appDesc | String | True | 应用描述 | |
appId | String | True | 云鼎应用id | |
appName | String | True | 应用名称 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
appId | String | 应用id |
2.1.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void createSmsApp() {
CreateSmsAppUsingPOSTRequest request = new CreateSmsAppUsingPOSTRequest();
request.setAppId("yd-app-02d73869hx111");
request.setAppDesc("测试");
request.setAppName("测试");
System.out.println(new Gson().toJson(ydsmsClient.createSmsAppUsingPOST(request)));
}
}
2.2、查询应用列表
2.2.1、接口文档
请求方式
GET
请求地址
https://ydsms.jdcloud-api.com/v1/smsApps
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
pageNumber | Integer | False | 页码 | |
pageSize | Integer | False | 分页大小 | |
status | String | False | 状态,0 停用 1 启用 | |
appName | String | False | 应用名称 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String |
Result
名称 | 类型 | 描述 |
---|---|---|
smsApps | SmsAppVO[] | |
totalCount | Long |
SmsAppVO
名称 | 类型 | 描述 |
---|---|---|
accessKeyId | String | accessKeyId |
appDesc | String | 应用描述 |
appId | String | 应用id |
appName | String | 应用名称 |
createTime | String | 创建时间 |
status | Integer | 应用状态,0 停用 1 启用 |
updateTime | String |
2.2.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void listSmsApps() {
ListSmsAppsUsingGETRequest listSmsAppsUsingGETRequest = new ListSmsAppsUsingGETRequest();
ListSmsAppsUsingGETResponse listSmsAppsUsingGETResponse = ydsmsClient.listSmsAppsUsingGET(listSmsAppsUsingGETRequest);
System.out.println(new Gson().toJson(listSmsAppsUsingGETResponse));
}
}
2.3、创建短信签名
2.3.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/smsSigns
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
applyExplanation | String | False | 申请说明 | |
signAttorneyUrl | String | False | 授权委托下载地址,若短信签名用途为他用,涉及第三方权益需上传,上传至 oss | |
signCertificateUrl | String | True | 证明材料下载地址,上传至 oss | |
signContent | String | True | 若签名内容侵犯到第三方权益必须获得第三方真实授权,长度为 2~12 个字符无须添加【】、()、[] 符号,签名发送会自带【】符号,避免重复 | |
signOtherCertificateUrl | String | False | 其他证明材料下载地址 上传至 oss | |
signPurpose | Integer | True | 签名用途,0自用 1他用 | |
signTypeId | Integer | True | 签名类型id,调用listSmsSignTypesUsingGET 接口获取 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
signId | String | 签名id |
2.3.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void createSign() {
CreateSmsSignUsingPOSTRequest request = new CreateSmsSignUsingPOSTRequest();
request.setAppId("yd-app-02d73869hx1");
request.setApplyExplanation("测试");
request.setSignAttorneyUrl("xx");
request.setSignCertificateUrl("xx");
request.setSignOtherCertificateUrl("xx");
request.setSignContent("测试");
request.setSignPurpose(0);
request.setSignTypeId(1);
System.out.println(new Gson().toJson(ydsmsClient.createSmsSignUsingPOST(request)));
}
}
2.4、查询签名列表
2.4.1、接口文档
请求方式
GET
请求地址
https://ydsms.jdcloud-api.com/v1/smsSigns
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
pageNumber | Integer | False | 页码 | |
pageSize | Integer | False | 分页大小 | |
status | String | False | 状态,1申请中 2拒绝 3通过 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String |
Result
名称 | 类型 | 描述 |
---|---|---|
smsSigns | SmsSignVO[] | |
totalCount | Long |
SmsSignVO
名称 | 类型 | 描述 |
---|---|---|
appId | String | 应用id |
applyStatus | Integer | 申请状态,1申请中2拒绝3通过 |
createTime | String | 创建时间 |
pin | String | 用户pin |
signContent | String | 签名内容 |
signId | String | 短信签名id |
signTypeId | Integer | 短信签名类型id,调用 listSmsSignTypesUsingGET 接口查询 |
status | Integer | 短信签名状态,0未启用 1启用 |
auditorExplanation | String | 短信签名审核说明 |
signPurpose | Integer | 短信签名用途 0自用1他用 |
signAttorneyUrl | String | 授权委托书下载地址 |
signCertificateUrl | String | 证明材料下载地址 |
signOtherCertificateUrl | String | 其他证明材料下载地址 |
updateTime | String |
2.4.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void listSign() {
ListSmsSignsUsingGETRequest request = new ListSmsSignsUsingGETRequest();
request.setAppId("yd-app-02d73869hx1");
System.out.println(new Gson().toJson(ydsmsClient.listSmsSignsUsingGET(request)));
}
}
2.5、创建短信模板
2.5.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/smsTemplates
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
applyExplanation | String | False | 申请说明 | |
templateContent | String | True | 模板内容 | |
templateName | String | True | 模板名称 | |
templateType | Integer | True | 模板类型:0 验证码短信,1 通知短信,2 推广短信 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
templateId | String | 模板id |
2.5.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void createTemplate() {
CreateSmsTemplateUsingPOSTRequest request = new CreateSmsTemplateUsingPOSTRequest();
request.setAppId("yd-app-02d73869hx1");
request.setApplyExplanation("测试");
request.setTemplateContent("欢迎您注册成为京东云用户,验证码为:${1}, 5分钟内有效!");
request.setTemplateName("测试");
request.setTemplateType(1);
System.out.println(new Gson().toJson(ydsmsClient.createSmsTemplateUsingPOST(request)));
}
}
2.5、查询短信模板列表
2.5.1、接口文档
请求方式
GET
请求地址
https://ydsms.jdcloud-api.com/v1/smsTemplates
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
pageNumber | Integer | False | 页码 | |
pageSize | Integer | False | 分页大小 | |
status | String | False | 状态,1申请中 2拒绝 3通过 | |
templateTypes | String | False | 要查询的模板类型,多个以 , 隔开(0 验证码短信,1 通知短信,2 推广短信) |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String |
名称 | 类型 | 描述 |
---|---|---|
smsTemplates | SmsTemplateVO[] | |
totalCount | Long |
名称 | 类型 | 描述 |
---|---|---|
appId | String | 应用id |
applyStatus | Integer | 申请状态 1申请中,2拒绝,3通过 |
auditorExplanation | String | 短信模板审核说明 |
createTime | String | 创建时间 |
pin | String | 用户pin |
status | Integer | 模板状态 0 未启用 1 启用 |
templateContent | String | 模板内容 |
templateId | String | 模板id |
templateName | String | 模板名称 |
templateType | Integer | 模板类型,0 验证码短信,1 通知短信,2 推广短信 |
updateTime | String |
2.5.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void createTemplate() {
ListSmsTemplatesUsingGETRequest request = new ListSmsTemplatesUsingGETRequest();
request.setAppId("yd-app-xxxx");
System.out.println(new Gson().toJson(ydsmsClient.listSmsTemplatesUsingGET(request)));
}
}
2.6、发送短信
2.6.1、根据明文手机号发送短信
2.6.1.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/smsSendMessages
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
params | String[] | False | 短信模板变量对应的数据值 | |
phoneList | String[] | True | 群发的国内电话号码,群发时一次最多不要超过100个手机号 | |
signId | String | True | 签名id | |
templateId | String | True | 模板id |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
mtResVO | MtResVO |
MtResVO
名称 | 类型 | 描述 |
---|---|---|
reqCode | String | |
reqId | String | |
reqMsg | String |
2.6.1.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void send() {
SendMessagesUsingPOSTRequest request = new SendMessagesUsingPOSTRequest();
request.setAppId("yd-app-XXXXXXXXX");
request.setParams(Collections.singletonList("测试"));
request.setSignId("342d698979d9434787597c71492xxxxx");
request.setTemplateId("608de5ffdcc347419291b684a32xxxxx");
request.setPhoneList(Collections.singletonList("1881171xxxxx"));
System.out.println(new Gson().toJson(request));
System.out.println(new Gson().toJson(ydsmsClient.sendMessagesUsingPOST(request)));
}
}
2.6.2、根据京东pin发送短信
2.6.2.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/sendMessagesByPin
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
signId | String | True | 签名id | |
templateId | String | True | 模板id | |
pin | String | True | 用户pin | |
params | String[] | False | 短信模板变量对应的数据值 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
mtResVO | MtResVO |
MtResVO
名称 | 类型 | 描述 |
---|---|---|
reqCode | String | |
reqId | String | |
reqMsg | String |
2.6.2.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void sendByPin() {
SendMessagesByPinUsingPOSTRequest request = new SendMessagesByPinUsingPOSTRequest();
request.setAppId("yd-app-17b42xxxx");
request.setParams(Collections.singletonList("测试"));
request.setSignId("342d698979d9434787597c71492xxxx");
request.setTemplateId("608de5ffdcc347419291b684a32xxxx");
request.setPin("1823318xxxx");
System.out.println(new Gson().toJson(request));
System.out.println(new Gson().toJson(ydsmsClient.sendMessagesByPinUsingPOST(request)));
}
}
2.6.3、根据商家id和订单号发送短信
2.6.3.1、接口文档
请求方式
POST
请求地址
https://ydsms.jdcloud-api.com/v1/sendMessagesByOrderId
请求参数
名称 | 类型 | 是否必需 | 默认值 | 描述 |
---|---|---|---|---|
appId | String | True | 应用id | |
signId | String | True | 签名id | |
templateId | String | True | 模板id | |
venderId | Long | True | 商家id | |
orderId | Long | True | 订单编号 | |
params | String[] | False | 短信模板变量对应的数据值 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
result | Result | |
requestId | String | 请求唯一标识 |
Result
名称 | 类型 | 描述 |
---|---|---|
mtResVO | MtResVO |
MtResVO
名称 | 类型 | 描述 |
---|---|---|
reqCode | String | |
reqId | String | |
reqMsg | String |
2.6.3.2、代码示例
public class YdsmsDemo {
//1. 设置accessKey和secretKey线上环境
private static String accessKeyId = "xxx";
private static String secretAccessKey = "xxx";
private static CredentialsProvider credentialsProvider = new StaticCredentialsProvider(accessKeyId, secretAccessKey);
private static YdsmsClient ydsmsClient;
static {
ydsmsClient = YdsmsClient.builder()
.credentialsProvider(credentialsProvider)
.httpRequestConfig(new HttpRequestConfig.Builder().protocol(Protocol.HTTPS).build()) //默认为HTTPS
.build();
}
@Test
public void sendByOrderId() {
SendMessagesByOrderIdUsingPOSTRequest request = new SendMessagesByOrderIdUsingPOSTRequest();
request.setAppId("yd-app-17b42xxxx");
request.setParams(Collections.singletonList("测试"));
request.setSignId("342d698979d9434787597c71492xxxx");
request.setTemplateId("608de5ffdcc347419291b684a32xxxx");
request.setVenderId(123456L);
request.setOrderId(1234567890L);
System.out.println(new Gson().toJson(ydsmsClient.sendMessagesByOrderIdUsingPOST(request)));
}
}
3、短信回执、上行消息
3.1、配置短信回执、上行消息回调地址
选择要配置回调地址的应用,点击 "应用名称",进入设置页面,点击 短信状态回调地址设置,回调服务需要返回指定的json字符串 { "status": true }
注:回执和上行消息回调地址为同一个
3.2、短信回执参数格式
名称 | 类型 | 是否必需 | 描述 | |
---|---|---|---|---|
code | String | False | 短信回执状态对应的 | code |
desc | String | False | 短信回执状态对应的 | 描述 |
status | String | False | 短信发送结果 0:成功,非 0 失败 | |
reqid | String | False | 短信发送唯一标识,短信发送接口返回了该值 | |
time | String | False | 短信回执推送时间 | |
phone | String | False | 手机号(如果不是通过明文手机号提交短信此处脱敏) |
示例:
{
"reqid":"211123161429108512100003",
"phone":"188****3290",
"time":"2021-11-23 16:14:37",
"status":"0",
"code":"DELIVRD",
"desc":"成功"
}
3.3、上行消息参数格式
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
time | String | False | 上行消息推送时间 |
phone | String | False | 手机号(如果不是通过明文手机号提交短信此处脱敏) |
sign | String | False | 短信签名 |
content | String | False | 短信回复内容 |
示例:
{
"content":"very good",
"phone":"188****3290",
"time":"2021-11-19 13:53:53",
"sign":"测试"
}