Springboot集成SMS发送短信
原文地址:https://www.jianshu.com/p/fb1f90662a93
【1】前言
目前大多网站APP的登陆方式都不再单一,通过手机获取短信验证码进行账户登陆无疑是最方便、快捷和安全的一种方式。第三方短信发送平台有很多种,各个平台有各自的优缺点,在选择的时候可以根据自己的具体实际情况定夺。
【2】平台开通
2.1:用户注册
百度SMS短信通,进入官方页面,注册账号;
官网:http://sms.webchinese.cn/
2.2:登陆获取必要信息
登陆之后,首页会展示当前用户部分信息,这里只关注短信条数,新注册用户会有5条免费的测试短信,这里我们要记住的重要信息主要有5条,切记要保存好
1:账号名
2:密码
3:短信秘钥(验签秘钥,长度为20的加密字符串)
4:绑定手机:153xxxxxxxx
5:绑定邮箱:xxxxxxxxx@qq.com
【3】代码实现
1、加入依赖
<dependencies><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.4</version></dependency><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.0.1</version></dependency></dependencies>
2、SendMessageUtil 工具类
/*** Created by lvfang on 2017/3/18.** 短信发送工具类 SMS发送*/
public class SendMessageUtil {private static final String SMS_Url = "http://sms.webchinese.cn/web_api/";/*** @param Uid SMS用户id : lvfang123* @param Key 接口秘钥:SMS登录可查(非登录密码)* @param sendPhoneNum 短信发送目标号码* @param desc 短信内容* @return Integer(1:成功码,其他失败,具体参见注释)*/public static Integer send(String Uid,String Key,String sendPhoneNum,String desc){HttpClient client = new HttpClient();PostMethod post = new PostMethod(SMS_Url);post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");// 在头文件中设置转码//设置参数NameValuePair[] data = {new NameValuePair("Uid", Uid),new NameValuePair("Key", Key),//秘钥new NameValuePair("smsMob", sendPhoneNum),new NameValuePair("smsText", desc)};post.setRequestBody(data);try {client.executeMethod(post);} catch (Exception e) { e.printStackTrace(); }Header[] headers = post.getResponseHeaders();int statusCode = post.getStatusCode();System.out.println("statusCode:" + statusCode);for (Header h : headers) {System.out.println(h.toString());}String result ="";try {result = new String(post.getResponseBodyAsString().getBytes("gbk"));} catch (Exception e) { e.printStackTrace(); }post.releaseConnection();return Integer.parseInt(result);}/*** -1 没有该用户账户-2 接口密钥不正确 [查看密钥]不是账户登陆密码-21 MD5接口密钥加密不正确-3 短信数量不足-11 该用户被禁用-14 短信内容出现非法字符-4 手机号格式不正确-41 手机号码为空-42 短信内容为空-51 短信签名格式不正确接口签名格式为:【签名内容】-6 IP限制大于0 短信发送数量以上作为补充*/public static String getMessage(Integer code){String message;if(code > 0 ) {message = "SMS-f发送成功!短信量还有" + code + "条";}else if(code == -1){message = "SMS-没有该用户账户";}else if(code == -2){message = "SMS-接口密钥不正确";}else if(code == -21){message = "SMS-MD5接口密钥加密不正确";}else if(code == -3){message = "SMS-短信数量不足";}else if(code == -11){message = "SMS-该用户被禁用";}else if(code == -14){message = "SMS-短信内容出现非法字符";}else if(code == -4){message = "SMS-手机号格式不正确";}else if(code == -41){message = "SMS-手机号码为空";}else if(code == -42){message = "SMS-短信内容为空";}else if(code == -51){message = "SMS-短信签名格式不正确接口签名格式为:【签名内容】";}else if(code == -6){message = "SMS-IP限制";}else{message = "其他错误";}return message;}/*** 随机生成6位验证码* @return*/public static String getRandomCode(Integer code){Random random = new Random();StringBuffer result= new StringBuffer();for (int i=0;i<code;i++){result.append(random.nextInt(10));}return result.toString();}
}
3、全局测试
/*** 随机生成6位验证码* @return*/public static String getRandomCode(){Random random = new Random();String result="";for (int i=0;i<6;i++){result+=random.nextInt(10);}return result;}/*** @author:lvfang* @mathName: testSendMessage* @parameter: 无* @return value:* @throws null* @date 2018/8/11* @desc SMS短信测试*/@Testpublic void testSendMessage(){
// SendMessageUtil.send("SMS账户","接口秘钥","目标号码","发送内容");SendMessageUtil.send("lvfaxxxxxx","0b334927e1xxxxxxxxxx","153xxxxxxxxx","验证码:"+getRandomCode(6));System.out.println(SendMessageUtil.getMessage(resultCode));}
这里测试要注意的是,如果当前用户是测试用户(未交费绑定短信模板的用户),测试内容是受限的,并且短信未开通及时发送,程序所发送的短信是不能立刻收到的。具体详情请参照SMS官网注意事项。
新用户用接口测试验证码时,请勿输入:测试等无关内容信息,请直接输入:验证码:xxxxxx,发送。
4、发送响应
除了200响应码,其他都是有问题的, 这里贴个API调用接口文档:http://sms.webchinese.cn/api.shtml
statusCode:200
Cache-Control: no-cache
Content-Length: 2
Content-Type: text/html
Expires: Fri, 10 Aug 2018 05:39:58 GMT
Server: Microsoft-IIS/7.5
Set-Cookie: CHNET=Temp%5Fusername=201881113395989272; expires=Fri, 07-May-2021 05:39:58 GMT; path=/
Set-Cookie: ASPSESSIONIDAQBQTCCC=HDIPMIKCBOOOKHLDDPDKIAPI; path=/
X-Powered-By: ASP.NET
Date: Sat, 11 Aug 2018 05:40:00 GMT##响应码文档
/*** -1 没有该用户账户-2 接口密钥不正确 [查看密钥]不是账户登陆密码-21 MD5接口密钥加密不正确-3 短信数量不足-11 该用户被禁用-14 短信内容出现非法字符-4 手机号格式不正确-41 手机号码为空-42 短信内容为空-51 短信签名格式不正确接口签名格式为:【签名内容】-6 IP限制大于0 短信发送数量以上作为补充*/
5、收到短信
不出意外、这时候我们就会收到自己发送的短信、
6、回看短信日志
Springboot集成SMS发送短信相关推荐
- springboot集成阿里云短信服务,实现发送短信功能
springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...
- SpringBoot集成阿里云短信服务
SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...
- SpringBoot 实现手机发送短信验证码
手机发送短信 内容 一.手机发送短信 1. 前端界面代码 2. UserInfoController 控制器 3. application.properties 配置类文件 4. 具体实现 总结 内容 ...
- 百度SMS发送短信C#
/// <summary>/// 百度接口签名帮助类/// </summary>public class BaiduApiHelper{#region 构造函数/// < ...
- springboot集成阿里云短信验证码
1.添加pom.xml依赖 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-ja ...
- SpringBoot集成阿里云短信服务实现登录注册(超详细)
本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...
- sms发送短信验证码
/*** 发送短信验证码** @param mobile* @return*/ public String sendSms(String mobile) {//连接阿里云DefaultProfile ...
- Java SpringBoot集成阿里云短信与邮件服务
1.pom.xml导入jar包 <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><ar ...
- springboot+阿里大鱼发送短信详细
1导入阿里大鱼坐标 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-s ...
- java使用中国网建sms发送短信
一.说明 不管哪个短信平台发送短信都很类似.举一反三. 二.先去中国网建注册账号. 地址:https://www.smschinese.com.cn/ 注册完成后直接登录. 找到接口功能设置可以获取账 ...
最新文章
- linux shell 查找某字符串 在文件的行数
- Tensorflow实践 基本原理学习和框架使用
- Cloud Programming Simplifie : A Berkeley View on Serverless Computing
- ValueError: Must have equal len keys and value when setting with an iterable
- Exchange Server 2013预览版服务器角色概况
- 如何看懂dtd文档?
- IDEA主题设置与eclipse代码风格一致
- 从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)
- matlab 中sumg,MATLAB)课后实验答案[1]
- 数独游戏技巧从入门到精通_工程施工图识图方法和技巧,使你从建筑施工入门到精通!...
- 进入32位保护模式之路
- python中数据结构的基本定义
- Edison 蓝牙模块 学习笔记
- 两角和与差的余弦公式的五种推导方法之对比
- Solr实现京东搜索
- Pymol中如何显示stick+cartoon+surface
- Vue全家桶学习笔记:Vue Router篇
- 开发通用资料——英文缩写
- 企业APP营销策略方案
- python相对路径找不到文件_Python 解决相对路径问题:No such file or directory