通过一套统一的基于短信验证码操作的api对多个短信服务商进行了抽象
- 抽象了短信验证码发送,获取用户在短信服务商平台信息。
- 提供了云片网(短信服务商)的实现。
- 提供了代码和spring注入的单元测试例子
- 支持使用spring注入
通过maven安装
<dependency> <groupId>cn.sgtcloud.common</groupId> <artifactId>smsnotifymodule</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 下面是源码和javadoc,非必须添加 --> <dependency> <groupId>cn.sgtcloud.common</groupId> <artifactId>smsnotifymodule</artifactId> <version>0.0.1-SNAPSHOT</version> <classifier>sources</classifier> </dependency> <dependency> <groupId>cn.sgtcloud.common</groupId> <artifactId>smsnotifymodule</artifactId> <version>0.0.1-SNAPSHOT</version> <classifier>javadoc</classifier> </dependency>
spring方式注入
这里以云片网为例的配置
1.创建bean声明,可从相关人员获得生产环境的参数
<!-- 云片网的配置 示例--> <bean id="yunpianProvider" class="cn.sgtcloud.common.smsnotifymodule.service.impl.YUNPIANSMSProvider"> <constructor-arg index="0" value="apikey" /> </bean> <!-- 随机验证码生成配置 --> <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.kaptcha.util.Config"> <constructor-arg> <props> <prop key="kaptcha.image.width">250</prop> <prop key="kaptcha.image.height">100</prop> <prop key="kaptcha.border">no</prop> <prop key="kaptcha.border.color">105,179,90</prop> <prop key="kaptcha.textproducer.font.color">red</prop> <prop key="kaptcha.textproducer.font.size">90</prop> <prop key="kaptcha.session.key">code</prop> <!--配置验证码生成规则--> <prop key="kaptcha.textproducer.char.string">0123456789</prop> <!--配置验证码生成长度--> <prop key="kaptcha.textproducer.char.length">6</prop> <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop> </props> </constructor-arg> </bean> </property> </bean> <!-- 验证码短信管理配置 --> <bean id="smsNotifyManager" class="cn.sgtcloud.common.smsnotifymodule.service.manager.SmsNotifyManager"> <constructor-arg index="0" ref="yunpianProvider"/> <constructor-arg index="1" ref="captchaProducer"/> <!-- 配置guava cache 有效期 短信验证码有效期单位秒(SECONDS) --> <constructor-arg index="2" value="5"/> <!-- 配置 限制同一个手机号连续发送短信的频率 秒为单位 建议设置为30 值为0时 不进行限制 --> <constructor-arg index="3" value="30"/> <!-- 配置guava cache 最大size 值为不大于0时,不进行限制最大值 --> <constructor-arg index="4" value="1000"/> </bean>
2.代码中引用
@Autowired private SmsNotifyManager smsNotifyManager;
3.获取用户信息(在短信服务商平台上的信息,比如短信剩余量、当前api版本号等信息)
smsNotifyManager.getUserInfo();
4.生成验证码
smsNotifyManager.getCaptcha();
5.发送验证码短信
<!--发送通用类验证码短信 eg:【{0}】您的验证码是{1}-->
smsNotifyManager.sendMessage("手机号","公司名称","验证码");
<!--发送模板类验证码短信 -->
smsNotifyManager.sendMessage("手机号","短信模板","验证码","短信模板中占位符正则表达式",
"短信模板中替换占位符的内容");
6.验证验证码是否正确
smsNotifyManager.isMatcher("手机号","验证码");
7.字符串中占位符替换(模板类短信使用)
smsNotifyManager.fillStringByArgs("包含占位符字符串内容","占位符正则表达式","要替换占位符的字符串");
代码方式声明
1.创建实例
<!-- 实例一个短信服务提供商(这里是云片网)--> SMSProvider yunpianProvider = new YUNPIANSMSProvider("apikey"); <!-- 实例一个验证码生成工具类 DefaultKaptcha(详情参考kaptcha教程)--> DefaultKaptcha kaptcha = new DefaultKaptcha(); Properties properties = new Properties(); properties.setProperty("kaptcha.textproducer.char.string", "0123456789"); properties.setProperty("kaptcha.textproducer.char.length", "6"); Config config = new Config(properties); kaptcha.setConfig(config); SmsNotifyManager smsNotifyManager = new SmsNotifyManager(yunpianProvider,kaptcha,"短信有效期时间","冷却时间","最大size设置");
2.其他操作同spring方式。