短信通道——阿里大鱼(java)

综述    

       注:本文写于2017年6月22日升级之后。

       使用阿里大鱼发送短信已经成为一种趋势,因为权威,而且价格也比较适中,被越来越多的公司所采用。在介绍阿里大鱼发送短信之前,首先得拥有阿里云的账号,这个账号可以使用支付宝账号进行登录。笔者是Java程序猿,本篇也只介绍Java的方式,其他方式参考阿里云的帮助文档。

步骤

    第一步:注册阿里云账号,获取app access key 和 app access secret。点击个人头像------>管理控制台-------->个人账号名称(一般是手机号)----->accesskeys,进入到Access key 管理界面,在发送短信时需要这两个值。

     

                                                                                                              (图1)

    第二步:申请短信签名,短信签名是商户的标识,短信签名会出现在短信内容的开头,例如支付宝的短信签名为”支付宝”,短信开头的内容是【支付宝】。申请短信签名需要审核,而且有个数限制,一般不会超过5个。管理控制台----->展开云计算基础服务----->短信服务------> 短信签名------> 添加短信签名

    

                                                                                              (图2)

    第三步:申请短信模板,阿里大鱼将短信分为三种,验证码,短信通知和推广短信。申请短信模板也需要审核,但是没有个数限制。

    第四步:下载SDK及Demo,将aliyun-java-sdk-core-version.jar及aliyun-java-sdk-dysmsapi-version.jar导入到项目中,其中version为版本号。如果是Maven项目,解压文件,搜索pom.properties,将groupId,artifactId,version写入到pom.xml中。

#Generated by Maven
#Wed Jun 14 21:12:41 CST 2017
version=1.0.0-SNAPSHOT
groupId=com.aliyun
artifactId=aliyun-java-sdk-dysmsapi
替换为
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
   <version>1.0.0-SNAPSHOT</version>
</dependency>

     第五步:编写程序,编写程序分为三部分。

     第一部分,获取IAcsClient对象,该对象用来发送请求。创建IAcsClient对象的过程需要app access key 和 secret。

/**
 * 获取IAcsClient对象
 * 
 * @return
 * @throws ClientException
 */
private static IAcsClient initClient() throws ClientException {
    System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
    System.setProperty("sun.net.client.defaultReadTimeout", "10000");
    // 初始化ascClient需要的几个参数
    final String product = "Dysmsapi";// 短信API产品名称
    final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名
    // 秘钥key和secret
    final String appkey = "yourappKey";
    final String appSecret = "yourappsecret";
    // 初始化ascClient,暂时不支持多region
    IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", appkey, appSecret);
    DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
    IAcsClient acsClient = new DefaultAcsClient(profile);
    return acsClient;
}

    第二部分:根据短信模板,创建SendSmsRequest请求对象。

/**
 * 获取SMS_72780019短信模板对应的请求
 * 
 * @return
 */
private static SendSmsRequest getSMS_72780019Message() {
     //组装请求对象
     SendSmsRequest request = new SendSmsRequest();
     //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
     request.setPhoneNumbers("1500000000");
     //必填:短信签名-可在短信控制台中找到
     request.setSignName("云通信");
     //必填:短信模板-可在短信控制台中找到
     request.setTemplateCode("SMS_1000000");
     //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
     request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
     //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
     request.setOutId("yourOutId");
 }

    第三部分:发送短信,获取响应对象,

/**
 * @param templateCode 短信模板code
 * @throws ClientException
 * 
 */
public static void sendMessage(String templateCode) throws ClientException {
    // 初始化client对象
    IAcsClient client = initClient();
    // 短信模板请求对象
    SendSmsRequest request = null;
    // 根据短信模板code来获取不同的短信模板请求对象
    switch(templateCode)
    {
        case "SMS_72780019": 
            request = getSMS_72780019Message();
            break;
    }
    // 发送短信
    SendSmsResponse response = client.getAcsResponse(request);
    // 打印短信的消息
    System.out.println("_____________发送SMS_72780019短信收到的响应信息_______________");
    System.out.println("请求的ID:" + response.getRequestId());
    System.out.println("请求的状态码:" + response.getCode());
    System.out.println("请求的状态码描述:" + response.getMessage());
    System.out.println("请求的回执ID:" + response.getBizId());
}

     点击短信服务统计,可以看到每天发送多少条短信,如果发送短信失败,可以点击”失败详情”查看原因,也可以根据请求的状态码,去查阅错误码列表。

     至此本篇内容结束。

posted @ 2017-06-24 19:10  若浮若沉  阅读(10583)  评论(1编辑  收藏