本案例使用阿里云消息服务系统搭建,帮助大家更好的使用和创建高级别的短信服务发送平台。
3

短信接入
产品介绍
消息服务同时具备发送短信的能力,支持快速发送短信验证码、短信通知、推广短信。完美支撑双11期间的2亿用户发送6亿条短信。三网合一专属通道,与工信部携号转网平台实时互联。电信级运维保证,实时监控自动切换,到达率高达99%。

短信通知和验证码:大容量高并发,支撑双11期间2亿用户发送6亿短信。3秒可达,三网合一专属通道。变量灵活,支持带入变量,内容灵活,可适应支持各业务场景。
推广短信:支持多种推广内容的短信发放,为提升企业产品增加曝光率提供帮助。业务推广、新产品宣讲、会员关怀等进行短信发送。
批量发送:一对多广播消息,发布到主题中的一条消息可以同时被多个订阅者订阅,会被按照多个订阅指定的推送方式和 Endpoint 地址推送过去。
异步通知:可以后端服务处理完成任务时,回调通知用户。进而减少用户,Web前端和后端服务之间大量不必要的轮询请求。
数据统计:可查看请求量、发送成功量、失败量、等统计数据;通过日期、手机号等维度,查看发送详情;
短信接入完整流程:

消息服务开通地址
https://www.aliyun.com/product/mns

开通短信服务,默认是会送10元代金券的(便于我们开发人员测试使用)。测试成功以后,你也可以购买短信服务资源包(这个是比较坑的,购买时长居然只有一个月?是否说明,买多少这个月我都得必须用完?)

由于博主是个JAVA开发者,然果断选择了JAVA的SDK,当然开发短信服务之前,你还需要做以下操作。

短信签名
签名类型:由于是个人用户,只能 选择验证码或短信通知(0.045元/条)
签名:比如我的是网站,所以填写科帮网
签名用途:个人使用,签名为自己产品名/网站名等
申请说明:非必填,最好填写申请理由

1

短信模版
模版类型:验证码和短信通知(根据业务情况选择 )
模版名称:自定义即可
模版内容: 标准规范https://help.aliyun.com/document_detail/55324.html
申请说明:请描述您的业务使用场景

2

签名和模版一般2小时内审核完成(上班时间其实还是很快的),审核通过后就可以接入使用了。

短信接入
使用工具:Eclipse、Maven、SendSms(SDK)、JDK1.7、阿里云的访问密钥

秘钥管理地址:https://ak-console.aliyun.com/
SDK下载地址:https://help.aliyun.com/document_detail/55359.html

阿里开发人员写的代码和文档这里就不做过多评论了,意见和建议只能促进大家进步,没什么其他的意思。可以参考这篇帖子:https://bbs.aliyun.com/read/317490.html

一个211理工科硕士的表白(阿里短信工程师你们听到了没有?)

项目接入
首先,展示下劳动成果,控制台发送成功提示:

4

配置Maven

按照文档果然不靠谱,下载下来的文件太多,以至于有点懵比。其实单就发送短信来说,只需要以下两个JAR包aliyun-java-sdk-core-3.2.2.jar和aliyun-java-sdk-dysmsapi-1.0.0.jar(自行打入maven仓库或者本地私服)。

但是,阿里云开发人员给的文档又是怎么说的呢?SDK工具包中一共包含了2个类库,一个aliyun-java-sdk-core包,另外一个是alicom-dysms-api包。

对比一下,我觉得我是猜对的。如果我理解的没有错误,建立开发人员还是要认真一点。

除了阿里的SDk,额外还引入了log4j和gson相关jar包,用于记录日志和组织JSON数据,以下是依赖:

javax.servlet
servlet-api
2.5

com.aliyun
sdk-dysmsapi
1.0.0

com.aliyun
sdk-core
3.2.2

log4j
log4j
1.2.17

commons-logging
commons-logging
1.1.1

com.google.code.gson
gson
2.3.1

AliSmsConfig:
IAcsClient单例实现,所有的参数都在这个类中配置。

package com.alicom.dysms.config;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
/**
* 单例实现
* 创建者 科帮网
* 创建时间 2017年6月29日
*
*/
public class AliSmsConfig {
private AliSmsConfig(){};
static final String signName = “科帮网”;//签名
static final String templateCode = “SMS_110”;//模版
static final String product = “Dysmsapi”;
static final String domain = “dysmsapi.aliyuncs.com”;
static final String accessKeyId = “XXX”;//此处私钥 填写自己的
static final String accessKeySecret = “XXX”;//此处私钥 填写自己的
static final IClientProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, accessKeyId, accessKeySecret);
static {
try {
System.setProperty(“sun.net.client.defaultConnectTimeout”, “10000”);
System.setProperty(“sun.net.client.defaultReadTimeout”, “10000”);
DefaultProfile.addEndpoint(“cn-hangzhou”, “cn-hangzhou”, product, domain);
} catch (ClientException e) {
e.printStackTrace();
}
}
/**
* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
* 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
*/
private static class SingletonHolder{
/**
* 静态初始化器,由JVM来保证线程安全
*/
private static IAcsClient acsClient = new DefaultAcsClient(profile);
}
public static IAcsClient getAcsClient(){
return SingletonHolder.acsClient;
}
}

SmsUtil:

package com.alicom.dysms.config;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
/**
* 短信发送工具类
* 创建者 科帮网
* 创建时间 2017年6月29日
*
*/
public class SmsUtil {
private static final Logger LOG = LogManager.getLogger(SmsUtil.class.getName());
public static SendSmsResponse sendSms(SendSmsRequest request) {
SendSmsResponse sendSmsResponse = null;
LOG.info(“发送手机验证码:”+request.getPhoneNumbers());
try {
IAcsClient acsClient = AliSmsConfig.getAcsClient();
//必填:短信签名-可在短信控制台中找到
request.setSignName(AliSmsConfig.signName);
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(AliSmsConfig.templateCode);
sendSmsResponse = acsClient.getAcsResponse(request);
} catch (Exception e) {
LOG.error(“短信发送异常:”+request.getPhoneNumbers(), e);
}
return sendSmsResponse;
}
}

SmsDemo:

package com.alicom.dysms.web;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.alicom.dysms.config.SmsUtil;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.google.gson.JsonObject;
/**
* 阿里短信发送Demo
* 创建者 科帮网
* 创建时间 2017年6月29日
*
*/
public class SmsDemo {
private static final Logger LOG = LogManager.getLogger(SmsDemo.class.getName());
public static void main(String[] args) throws ClientException, InterruptedException {
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(“18866668888”);
//尊敬的name,您正进行科帮网的身份验证,验证码{number},打死不告诉别人!
JsonObject params = new JsonObject();
params.addProperty(“name”, “小柒”);
params.addProperty(“number”, “111111”);
request.setTemplateParam(params.toString());
SendSmsResponse response = SmsUtil.sendSms(request);
LOG.info(“——–短信接口返回的数据——–”);
if(“OK”.equals(response.getCode())){
System.out.println(“Code=” + response.getCode());
System.out.println(“Message=” + response.getMessage());
System.out.println(“RequestId=” + response.getRequestId());
System.out.println(“BizId=” + response.getBizId());
LOG.info(“短信发送成功”);
}
}
}

SendServlet:
当然,由于没有使用任何web框架,这里还写了一个Servlet的Demo,仅供参考。

package com.alicom.dysms.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alicom.dysms.config.SmsUtil;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.google.gson.JsonObject;
/**
* 短信发送
* 创建者 科帮网
* 创建时间 2017年6月29日
*/
public class SendServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);
}@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String mobile = request.getParameter("mobile");//手机String number = request.getParameter("number");//验证码SendSmsRequest sms = new SendSmsRequest();sms.setPhoneNumbers(mobile);JsonObject params = new JsonObject();params.addProperty("name", "小柒");params.addProperty("number", number);sms.setTemplateParam(params.toString());SendSmsResponse res = SmsUtil.sendSms(sms);PrintWriter out = response.getWriter();if("OK".equals(res.getCode())){out.print("success");}else{out.print("fail");}
}

}
web.xml:

aliyun_sms

SendServlet
com.alicom.dysms.servlet.SendServlet

SendServlet
/SendServlet

接入必读
很多用户反映变量中输入了非数字发送失败?
由于现阶段国家管控严格,目前只能发送验证码类型短信,变量只支持验证码且验证码为6位以内的数字。您需要创建一个仅包含验证码变量的短信模板,还烦请您进行调整。

也有用户反应明明发送了一条短信,统计显示发送了两条,神马鬼?
短信字数=短信模板内容字数 + 签名字数
短信字数<=70个字数,按照70个字数一条短信计算
短信字数>70个字数,即为长短信,按照67个字数记为一条短信计算
至于为什么这么算,就要问电信运行商了,上世纪遗留问题

至于,论坛一些用户反映看不懂文档?
建议大鱼要么不做,放出来就要做好,作为开发人员都知道看别人写的代码是多么~,况且文档,代码描述的还不是特别清楚。

搭建亿万级别短信服务发送平台相关推荐

  1. Java 集成阿里大鱼平台短信服务发送验证码到手机

    点击前往:阿里大鱼 --- 短信接口调用错误码(错误原因及处理方式) 上一篇:阿里大鱼短信服务 --- 发送验证码.短信通知 下一篇:Java 集成阿里大鱼平台短信服务发送验证码 --- 补齐注册部分 ...

  2. 阿里云 短信服务——发送短信验证码图文教程

    阿里云短信服务 前言 配置阿里云短信服务 准备工作 1.获取Accesskey 1.2创建子账号 1.2为刚创建的用户分配短信服务的权限 2.1申请签名 2.2申请模板 2.3由于目前还没有使用到系统 ...

  3. 如何使用阿里巴巴短信服务发送短信验证码

    关于调用阿里巴巴短信服务发送短信验证的接口的方法: 用户的注册 1.首先我们需要在阿里大于(www.alidayu.com)注册一个账号登录 点击进入控制台 点击使用短信服务 然后需要你申请签名和模板 ...

  4. 使用阿里云的短信服务发送短信

    原文地址使用阿里云的短信服务发送短信 在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样,之前用的一个厂商的,提供了一个封装类就很容易发 ...

  5. 腾讯云短信服务发送验证码

    腾讯云短信服务发送验证码 1.前言 2.进入短信服务控制台 3.创建签名 4.创建模板 5.短信-应用管理-应用列表 6.创建密钥 7.SpringBoot实现短信验证码发送 7.1 引入依赖 7.2 ...

  6. Sms多平台短信服务商系统~完成阿里云短信服务发送可自行配置

    1.项目中引入Maven 阿里云地址 不同编程语言都有对应的SDK,你们下载自己需要的即可. pom.xml中添加maven坐标 <!--阿里云短信服务--><dependency& ...

  7. 使用阿里云提供的短信服务发送短信(个人版)

    本人最近需要实现一个注册发短信验证码的功能,找了几家短信服务平台,如腾讯云,云片网等,发现他们都没有提供给用户个人的短信服务权限,申请短信签名等都需要有企业等相关证明,最后找到了阿里云的短信服务平台, ...

  8. 使用阿里短信服务发送终端报警数据

    1.开通阿里短信服务 2.获取AK 在这个没钱寸步难行的时代,只要你有银子,你就能获取AK.如下图 这两个参数后边调用接口会用到.此刻,请客官稳住,别慌. 3.配置签名 短信签名是个啥? 见过这玩意吧 ...

  9. 【微服务集成阿里SMS短信服务发送短信】

    发送短信项目中很多地方都在使用,所以集成一个单独的服务,如果某个服务需要发送短信只需要依赖短信服务即可. 1.开通阿里SMS短信,创建模板 (省略) 2.创建短信服务 common-server-sm ...

  10. Python使用腾讯云-短信服务发送手机短信

    原创不易,欢迎关注我的微信公众号:司马弈 获取更多精选内容. 腾讯云短信服务介绍 目前[腾讯云短信]为客户提供[国内短信].[国内语音]和[海外短信]三大服务,腾讯云短信SDK支持以下操作: 国内短信 ...

最新文章

  1. mac 命令行 解压7z文件_Mac 有哪些好用的压缩软件?
  2. Python 操作redis有序集合
  3. [数据结构]数据结构中各种树
  4. 为什么选择Docker?
  5. 详细介绍MySQL/MariaDB的锁
  6. 文件的读操作 c# 1614526130
  7. android分享,如何移除掉信息这项
  8. FreeWheel业务系统微服务化过程经验分享
  9. 闲来无聊,随便看下asp.net Mvc 的收获
  10. Java核心技术 卷I 基础知识 学习笔记(1)
  11. 浅谈iOS开发中的锁
  12. cadence SPB17.4 - orcad - 层次原理图
  13. Android源代码分析--Preference之自动通话录音
  14. 雷军:天使投资人不是上帝只是配角
  15. 使用docsify搭建在线文档中心
  16. 2021届中兴提前批[FPGA工程师/数字IC岗位面经]
  17. 机票预定系统可行性分析
  18. 一个例题:浮动引起元素变成行内块元素-display:inline-block
  19. 共赴数智金融未来,2023数智金融峰会即将召开
  20. 计算机考研A区211大学,三本学生调剂A区211大学,自己的一些调剂经验供大学参考...

热门文章

  1. 抖音视频解析PHP源码
  2. 别浪费生活中灵光一闪的创意,发到实现网试试,万一实现了呢?
  3. 优酷 DSP 广告投放系统架构实践
  4. 如何在oracle建立中间库,Oracle数据库如何创建DATABASE LINK?
  5. 把桌面路径改到D盘,忘记新建文件夹,D盘所有文件跑到桌面怎么办?
  6. 基于Web在线考试系统的设计与实现
  7. Spring Cloud 微服务速成
  8. search:笔记本插上耳机还是外放?(Dell win10)
  9. mySQL首行缩进快捷键_word段首如何缩进两个字符
  10. css代码使网页文本段落首行缩进两个字符以及和行高