阿里大鱼短信服务在YunOS开放平台上有发送验证码短信和短信短知两个业务场景。使用前请确认已经开通 阿里大鱼短信服务
| 场景 | 场景介绍 | 使用API说明 |
| 验证码短信 | 通过taobao.open.sms.sendvercode发送验证码接口,可以发自定义验证码和系统自定生成验证码,详见下面验证码介绍。发送验证码可以设置验证码失效时间,发送时间限制等。客户端回传验证码后可以通过taobao.open.sms.checkvercode;验证短信验证码。 通过消息服务订阅taobao_bmc_ShortMessageStatu消息,可以获取短信的发送状态。只发失败的消息。 |
taobao.open.sms.sendvercode 【点开链接查看API文档】发送短信验证码 taobao.open.sms.checkvercode 【点开链接查看API文档】 验证短信验证码
|
| 系统通知短信 | 通过taobao.open.sms.sendmsg 发送短信。可以定时发送通过入参delay_time 指定延时发送时间。 通过taobao.open.sms.batchsendmsg批量发送短信接口。批量发送短信 如果发delay的msg一次200个 如果非delay的一次30个 通过taobao.open.sms.rmdelaymsg 删除延迟消息 定时发送的短信未发送之前可以通过该接口删除 取消发送。delayTaskId这个参数如果用户传了externalId会用externalId作为delayTaskId 也就是如果之前传了externalId 那么删除的时候只要继续传externalId就好了 否则使用sendmsg返回的taskid 通过消息服务订阅taobao_bmc_ShortMessageStatus消息,可以获取短信的发送状态。 |
taobao.open.sms.sendmsg 【点开链接查看API文档】发送短信 【点开链接查看API文档】批量发送 taobao.open.sms.rmdelaymsg【点开链接查看API文档】 删除延迟消息 |
注意:开发者需要传自定义验证码可以通过sendvercode接口,自定义的验证码通过参数传递,且可以通过checkvercode验证验证码。也可以通过sendmsg发送,对于平台来说只相当于一条普通通知短信,所以只能自己验证验证码。
YunOS开放平台控制台->服务端SDK下载->开发语言等版本
新开通权限需要重新生成SDK,再下载。
java SDK 依赖一个Apache的commons-logging包,下载地址: commons-logging 。
根据场景介绍,实现相关API的调用。API 请求地址:http://gw.api.taobao.com/router/rest
将上一步下载的SDK集成到项目工程中。 SDK已经集成了接口签名方法,只需要引入对应于的类文件,就可以直接调用接口了。
可以直接参考各个API文档中的SDK调用示例或者参考API测试工具。API测试工具是以json传入参数的,请求示例是以对象传入的。
若验证码由系统自动生成,code不用传值。若是自己生成验证码,code传值,发送验证码为code自定义值。测试阶段建议打印完整的返回内容,便于排查。System.out.println(response.getBody());
以下面应用签名和模板为例[开发者自己测试的时候注意选择自己的签名id和模板id]
发验证码Java示例代码
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OpenSmsSendvercodeRequest;
import com.taobao.api.request.OpenSmsSendvercodeRequest.SendVerCodeRequest;
import com.taobao.api.response.OpenSmsSendvercodeResponse;
public class BCDXTest {
private static String appkey="612465**";
private static String secret="1hfhfhfjfjff822010abfac****";
private static String url="http://gw.api.taobao.com/router/rest";//api请求地址
public static void main(String[] args) throws ApiException {
TaobaoClient client=new DefaultTaobaoClient(url, appkey, secret);
OpenSmsSendvercodeRequest req=new OpenSmsSendvercodeRequest();
//json
//req.setSendVerCodeRequest("{\"external_id\":\"wb121212\",\"template_id\":\"1131\",\"signature_id\":\"86\",\"mobile\":\"13501**522\",\"expire_time\":\"60\",\"ver_code_length\":\"6\",\"context\":{\"minute\":\"5\"}}");
//对象
SendVerCodeRequest sendVerCodeRequest = new SendVerCodeRequest();
//sendVerCodeRequest.setExpireTime(60L); //非必填参数可以直接注释掉
sendVerCodeRequest.setExternalId("wb121212");//自定义id,用于开发者关联自己的数据,非必填参数
sendVerCodeRequest.setTemplateId(1131L);// 填写自己的模板id
sendVerCodeRequest.setSignatureId(86L);//填写自己的签名id,注意于应用对应
sendVerCodeRequest.setMobile("13501**522");//填写真实的手机号
sendVerCodeRequest.setContextString("{\"minute\":\"5\"}");//模板中的参数赋值
sendVerCodeRequest.setVerCodeLength(6L);//指定验证码的长度
req.setSendVerCodeRequest(sendVerCodeRequest);
OpenSmsSendvercodeResponse response = client.execute(req);
System.out.println(response.getBody());//测试阶段建议打印完整的返回内容,便于排查
if (response.isSuccess()) {//api请求成功
response.getResult().getMessage();
response.getResult().getSuccessful();//短信发送成功
} else {
response.getResult().getMessage();
response.getResult().getSuccessful();
}
}
发验证码php示例代码
$c = new TopClient;
$c->appkey = 612465**;
$c->secretKey =1hfhfhfjfjff822010abfac****;
//请求的url SDK已经封装
$req = new OpenSmsSendvercodeRequest;
//$req->setSendVerCodeRequest("{\"external_id\":\"wb121212\",\"template_id\":\"1131\",\"signature_id\":\"86\",\"mobile\":\"13501**522\",\"expire_time\":\"60\",\"ver_code_length\":\"6\",\"context\":{"minute":"5"}}");
$send_ver_code_request = new SendVerCodeRequest;
$send_ver_code_request->expire_time="60";
$send_ver_code_request->external_id="wb121212";
$send_ver_code_request->template_id="1131";
$send_ver_code_request->signature_id="86";
$send_ver_code_request->mobile="13501**522";
$send_ver_code_request->ver_code_length="6";
$send_message_request->context=json_decode("{\"minute\":\"5\"}");
$req->setSendVerCodeRequest(json_encode($send_ver_code_request));
$resp = $c->execute($req);
验证验证码的入参要注意 发验证码的入参 若传了domain参数,验证时的入参也要传。
验证验证码java示例代码
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OpenSmsCheckvercodeRequest;
import com.taobao.api.domain.CheckVerCodeRequest;
import com.taobao.api.response.OpenSmsCheckvercodeResponse;
public class BCDXTest {
private static String appkey="612465**";
private static String secret="1hfhfhfjfjff822010abfac****";
private static String url="http://gw.api.taobao.com/router/rest";
public static void main(String[] args) throws ApiException {
TaobaoClient client=new DefaultTaobaoClient(url, appkey, secret);
OpenSmsCheckvercodeRequest req=new OpenSmsCheckvercodeRequest();
// req.setCheckVerCodeRequest("{\"ver_code\":\"233769\",\"mobile\":\"13501**1522\"}");
//对象
CheckVerCodeRequest checkVerCodeRequest = new CheckVerCodeRequest();
//验证验证码的入参要注意 发验证码的入参 若传了domain参数,验证时的入参也要传。
checkVerCodeRequest.setVerCode("233769");
checkVerCodeRequest.setMobile("1350**1522");
req.setCheckVerCodeRequest(checkVerCodeRequest);
OpenSmsCheckvercodeResponse response = client.execute(req);
System.out.println(response.getBody());
if (response.isSuccess()) {
response.getResult().getMessage();
response.getResult().getSuccessful();
} else {
response.getResult().getMessage();
response.getResult().getSuccessful();
}
}
}
验证验证码php示例代码
$c = new TopClient;
$c->appkey = 612465**;
$c->secretKey = 1hfhfhfjfjff822010abfac****;
$req = new OpenSmsCheckvercodeRequest;
//$req->setCheckVerCodeRequest("{\"ver_code\":\"233769\",\"mobile\":\"13501**1522\"}");
$check_ver_code_request = new CheckVerCodeRequest;
$check_ver_code_request->ver_code="233769";
$check_ver_code_request->mobile="13501**1522";
$req->setCheckVerCodeRequest(json_encode($check_ver_code_request));
$resp = $c->execute($req);
以下面应用签名和模板为例[开发者自己测试的时候注意选择自己的签名id和模板id]
发系统短信java示例代码
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OpenSmsSendmsgRequest;
import com.taobao.api.request.OpenSmsSendmsgRequest.SendMessageRequest;
import com.taobao.api.response.OpenSmsSendmsgResponse;
public class BCDXTest {
private static String appkey="612465**";
private static String secret="1hfhfhfjfjff822010abfac****";
private static String url="http://gw.api.taobao.com/router/rest";
public static void main(String[] args) throws ApiException {
TaobaoClient client=new DefaultTaobaoClient(url, appkey, secret);
OpenSmsSendmsgRequest req=new OpenSmsSendmsgRequest();
//直接json
// req.setSendMessageRequest("{\"external_id\":\"wb121212\",\"template_id\":\"1341\"," +
"\"signature_id\":\"86\",\"mobile\":\"1350**1522\",\"context\":{\"name\":\"小强\"," +
"\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统]\",\"from\":\"蛋蛋\"}}");
//对象
SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.setTemplateId(1341);//模板ID
sendMessageRequest.setSignatureId(86L);//签名id
sendMessageRequest.setContextString("{\"name\":\"小强\",\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统] \",\"from\":\"蛋蛋\"}"); //模板中的变量通过Context传递
sendMessageRequest.setExternalId("wb121212");//自定义id,用于开发者关联自己的数据,非必填参数
sendMessageRequest.setMobile("135**1522");
req.setSendMessageRequest(sendMessageRequest);
OpenSmsSendmsgResponse response = client.execute(req);
System.out.println(response.getBody());
if (response.isSuccess()) {
response.getResult().getMessage();
response.getResult().getSuccessful();
} else {
response.getResult().getMessage();
response.getResult().getSuccessful();
}
发系统短信php示例代码
$c = new TopClient;
$c->appkey =612465**
$c->secretKey =1hfhfhfjfjff822010abfac****
//json
$req = new OpenSmsSendmsgRequest;
$req->setSendMessageRequest("{\"external_id\":\"wb121212\",\"template_id\":\"1341\",\"signature_id\":\"86\",\"mobile\":\"1350**1522\",\"context\":{\"name\":\"小强\",\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统]\",\"from\":\"蛋蛋\"}}");
$resp = $c->execute($req);
//对象
//$req = new OpenSmsSendmsgRequest;
//$send_message_request = new SendMessageRequest;
//$send_message_request->template_id="1341";
//$send_message_request->signature_id="86";
//$send_message_request->context=json_decode("{\"name\":\"小强\"," "\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统]\",\"from\":\"蛋蛋\"}");
//$send_message_request->external_id="wb121212";
//$send_message_request->mobile="1350**1522";
//$req->setSendMessageRequest(json_encode($send_message_request));
//$resp = $c->execute($req);
发系统短信.net示例代码
using Top;
using Top.Api;
using Top.Api.Request;
using Top.Api.Response;
using Top.Api.Util;
ITopClient client = new DefaultTopClient("http://gw.api.taobao.com/router/rest", "123123", "123123123123");
OpenSmsSendmsgRequest req = new OpenSmsSendmsgRequest();
//json
req.SendMessageRequest = "{\"external_id\":\"wb121212\",\"template_id\":\"1341\",\"signature_id\":\"86\",\"mobile\":\"1350**1522\",\"context\":{\"name\":\"小强\",\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统]\",\"from\":\"蛋蛋\"}}";
OpenSmsSendmsgResponse rsp = client.Execute(req);
Console.WriteLine(rsp.Body);
//对象
//SendMessageRequest obj117714 = new SendMessageRequest();
//obj117714.TemplateId = 1341;
//obj117714.SignatureId = 86L;
//obj117714.Context_= "{\"name\":\"小强\",\"content\":\"学习使用阿里百川消息服务\",\"appName\":\"[任务管理系统]\",\"from\":\"蛋蛋\"}";
//obj117714.ExternalId = "wb121212";
//obj117714.Mobile = "1350**1522";
//req.SendMessageRequest_ = obj117714;
//OpenSmsSendmsgResponse rsp = client.Execute(req);
//Console.WriteLine(rsp.Body);
批量发送短信 如果延时发送[delay_time]一次200个 如果非delay的一次30个。
批量发送java示例代码
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OpenSmsBatchsendmsgRequest;
import com.taobao.api.request.OpenSmsBatchsendmsgRequest.SendMessageRequest;
import com.taobao.api.response.OpenSmsBatchsendmsgResponse;
public class BCXXTst {
private String appkey="23092978";
private String secret="e42c3281b1d8c239ac39d31c5138b258";
private static String url="http://gw.api.taobao.com/router/rest";
@Test
public void OpenSmsBatchsendmsg() throws ApiException {
TaobaoClient client=new DefaultTaobaoClient(url, appkey, secret);
OpenSmsBatchsendmsgRequest req = new OpenSmsBatchsendmsgRequest();
List listSendMessageRequest = new ArrayList();
SendMessageRequest objSendMessageRequest = new SendMessageRequest();
for(int i=0;i<=3;i++){
objSendMessageRequest.setMobile("13800001111");
objSendMessageRequest.setTemplateId(1620L); listSendMessageRequest.add(objSendMessageRequest);
}
req.setParams(listSendMessageRequest);
OpenSmsBatchsendmsgResponse rsp = client.execute(req);
System.out.println(rsp.getBody());
if (rsp.isSuccess()) {
rsp.getResult().getMessage();
for(int i=0;i<=rsp.getResult().getDatas().size();i++){
rsp.getResult().getDatas().get(i).getTaskId();
}
}
else {
rsp.getResult().getCode();
}
}
}
发通知短信接口taobao.open.sms.sendmsg可以通过delay_time指定发送时间。在未发送之前,可以通过taobao.open.sms.rmdelaymsg 删除延迟消息,删除未发送的短信,取消发送。
删除延迟消息java示例代码:
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.OpenSmsRmdelaymsgRequest;
import com.taobao.api.domain.RemoveDelayMessageRequest;
import com.taobao.api.response.OpenSmsRmdelaymsgResponse;
public class BCDXTest {
private static String appkey="612465**";
private static String secret="1hfhfhfjfjff822010abfac****";
private static String url="http://gw.api.taobao.com/router/rest";
public static void main(String[] args) throws ApiException {
TaobaoClient client=new DefaultTaobaoClient(url, appkey, secret);
OpenSmsRmdelaymsgRequest req = new OpenSmsRmdelaymsgRequest();
//直接json
// req.setParamRemoveDelayMessageRequest("{\"external_id\":\"234576843534233\"}");//或者发送是反回的taskid:{\"delay_task_id\":\"234576843534233\"}}
// 对象
RemoveDelayMessageRequest obj117830 = new RemoveDelayMessageRequest();
//delayTaskId这个参数如果用户传了externalId会用externalId作为delayTaskId 也就是如果之前传了externalId 那么删除的时候只要继续传externalId就好了 否则使用sendmsg返回的taskid
obj117830.setDelayTaskId("xxxxx");// 发送短信taobao.open.sms.sendmsg成功,会反回 TaskId。
obj117830.setDomain("register");//发短信时可以指定短信的业务域 如注册 系统通知 次参数可以不填
obj117830.setExternalId("xxxxx");// 发短信时,指定自定义id。如果是唯一的,删除短信也可以通过该字段
req.setParamRemoveDelayMessageRequest(obj117830);
OpenSmsRmdelaymsgResponse rsp = client.execute(req);
System.out.println(rsp.getBody());
System.out.println(response.getBody());
if (response.isSuccess()) {
response.getResult().getMessage();
response.getResult().getSuccessful();
} else {
response.getResult().getMessage();
response.getResult().getSuccessful();
}
删除延迟消息PHP示例代码:
$c = new TopClient;
$c->appkey = $appkey;
$c->secretKey = $secret;
$req = new OpenSmsRmdelaymsgRequest;
//直接json
//$req->setParamRemoveDelayMessageRequest("{\"external_id\":\"234576843534233\"}");
// 对象
$param_remove_delay_message_request = new RemoveDelayMessageRequest;
$param_remove_delay_message_request->delay_task_id="xxxxx";
$param_remove_delay_message_request->domain="register";
$param_remove_delay_message_request->external_id="xxxxx";
$req->setParamRemoveDelayMessageRequest(json_encode($param_remove_delay_message_request));
$resp = $c->execute($req);