【转载】springboot集成SMS发送短信

【1】前言

目前大多网站APP的登陆方式都不再单一,通过手机获取短信验证码进行账户登陆无疑是最方便、快捷和安全的一种方式。

第三方短信发送平台有很多种,各个平台有各自的优缺点,在选择的时候可以根据自己的具体实际情况定夺,今天LZ分享一个比较好上手的平台供广大码农借鉴,并非打广告,只是感觉真心好用。

LZ之前并不晓得SMS是什么鬼,只是去年在看一位大牛博主分享springboot案例的时候提到,对着大牛的步骤和代码操作了下去,顺利完成了短信发送的功能。最近刚好有个小小的需求要用到短信验证,去翻大牛的博客,竟然被关闭了,幸运的是有备份代码! 好东西应该分享出来,迎合开源精神 @#$!

【2】平台开通

2.1:用户注册

百度SMS短信通,进入官方页面,注册账号;
官网:http://sms.webchinese.cn/

 

2018-08-11_131642.png

 

2.2:登陆获取必要信息

 

 

2018-08-11_131836.png

登陆之后,首页会展示当前用户部分信息,这里只关注短信条数,新注册用户会有5条免费的测试短信,这里我们要记住的重要信息主要有5条,切记要保存好

 

1:账号名
2:密码
3:短信秘钥(验签秘钥,长度为20的加密字符串)
4:绑定手机:153xxxxxxxx
5:绑定邮箱:xxxxxxxxx@qq.com

 

2018-08-11_132904.png

【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短信测试
     */
    @Test
    public 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、收到短信
不出意外、这时候我们就会收到自己发送的短信、

 

 

短信.png

6、回看短信日志

 

转载自:https://www.jianshu.com/p/fb1f90662a93

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot项目学生选课系统是一个面向高等教育机构的在线课程管理和选课平台。该系统旨在简化学生的课程选择过程,提高教务管理效率,并确保课程分配的公平性和透明度。利用SpringBoot的快速开发特性和微服务架构,该系统为教育机构提供了一个可靠、灵活且易于维护的解决方案。 系统采用前后端分离的架构,前端可能使用Angular、React或Vue.js等现代JavaScript框架来构建用户界面,后端由SpringBoot负责处理业务逻辑,并通过RESTful API与前端进行数据交换。数据库方面,系统可能会选择MySQL、PostgreSQL或其他关系型数据库来存储学生信息、课程详情、教师信息以及选课记录等。 在功能模块方面,学生选课系统主要包括以下几个核心部分: 1. 学生注册与登录:学生可以注册账号并登录系统,管理个人资料以及选课信息。 2. 课程浏览与搜索:学生可以查看可选课程列表,通过关键词、课程编号等条件搜索课程。 3. 选课管理:学生可以根据自己的学习计划添加或删除选课,系统同时提供智能推荐功能帮助学生规划课程。 4. 课程安排:系统自动处理课程时间表的生成和冲突检测,避免时间上的冲突。 5. 教师管理:教师用户可以管理自己的授课信息,包括上课时间、地点、教学大纲等。 6. 教室资源管理:系统管理员可以根据各教室的容量和可用性进行课程排班。 7. 成绩管理:系统支持教师录入成绩,学生查看成绩等功能。 8. 统计分析:系统提供后台数据分析工具,帮助管理人员了解课程选修情况和教学资源使用状况。 9. 通知提醒:系统通过邮件或短信形式向学生和教师发送选课结果、课程变动以及其他重要通知。 通过这些功能,SpringBoot项目学生选课系统为学生、教师和教务管理人员提供了一个全面、高效的课程管理和选课平台。系统不仅简化了选课流程,还提供了强大的数据支持和用户体验优化,使得学生能够轻松地规划自己的学习路径,而教师和管理人员也能够更高效地执行教学管理任务。系统的设计理念注重用户体验、数据处理能力和安全性,力求为所有用户提供一个高效、可靠的选课解决方案。
SpringBoot项目大学生就业服务平台是一款专为大学生就业而设计的在线服务系统,旨在帮助学生找到合适的工作机会,同时为企业招聘合适的人才。利用SpringBoot的快速开发特性和微服务架构,该系统提供了一个高效、便捷且易于维护的解决方案。 系统采用前后端分离的架构,前端可能使用Angular、React或Vue.js等现代JavaScript框架来构建用户界面,后端由SpringBoot负责处理业务逻辑,并通过RESTful API与前端进行数据交换。数据库方面,系统可能会选择MySQL、PostgreSQL或其他关系型数据库来存储用户信息、职位信息、申请记录以及企业信息等。 在功能模块方面,大学生就业服务平台主要包括以下几个核心部分: 1. 个人简历管理:学生可以创建和编辑自己的简历,包括教育背景、工作经验、技能等信息。 2. 职位搜索与筛选:学生可以根据关键词、地点、行业等条件搜索并筛选职位。 3. 应聘管理:学生可以对感兴趣的职位提交申请,并跟踪申请的状态。 4. 企业信息管理:企业用户可以发布职位信息,浏览和管理收到的简历。 5. 面试安排:系统支持在线安排面试时间,自动通知学生和企业面试官。 6. 就业指导:系统提供就业指南和职业规划建议,帮助学生更好地准备求职。 7. 数据统计分析:系统提供数据分析工具,帮助学校和政府了解毕业生就业情况。 8. 通知提醒:系统通过邮件或短信形式向学生和企业发送相关通知和提醒。 通过这些功能,SpringBoot项目大学生就业服务平台为学生和雇主提供了一个全面、高效的就业和招聘平台。系统简化了求职和招聘流程,提高了工作效率,同时也提升了用户体验。系统的设计理念注重用户体验、数据处理能力和安全性,力求为所有用户提供一个高效、可靠的就业服务解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值