阿里大鱼短信服务在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);