如何实现下发手机短信验证码

如何实现下发手机短信验证码

    我们都遇到过这种情况,某个账号长时间没登录某天想要登录的时候,却发现密码早已忘记,这时候想要找回密码很可能就用到了手机短信验证的功能,在有些网站注册账号的时候往往也需要手机号码去验证,现在就来学习一下如何实现给手机下发短信的功能吧。
    要实现这个功能,我们需要借助第三方短信平台,我们给用户下发的短信就是通过第三方短信平台发送的,本文所实现的功能是借助于秒嘀科技平台实现的,先介绍一下我们需要在这个平台上做的准备工作吧。

1,准备工作

    秒嘀科技网址:http://www.miaodiyun.com/
    首先我们需要注册一个账号,登录之后,找到并记录下ACCOUNT SID和AUTH TOKEN。

这里写图片描述
    然后我们下一步需要做的就是建立一个短信模板了,也就是下发短信的格式,这个是需要平台审核通过之后才能用的,所以最好提前做这一步,不过审核只需几分钟也是挺快的,但是模板格式一定要符合要求,否则就只能审核未通过了,这点要注意。
这里写图片描述
    完成这些准备工作之后,我们就可以研究一下具体功能的实现了,平台上有提供参考文档。
这里写图片描述

2,功能实现

    代码注释比较详细,就直接上代码了。

package com.test.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.apache.commons.codec.digest.DigestUtils;

/**
 * 
 * @ClassName:SendTelMsgUtils
 * @Description:发送短信工具类
 * @author:QiXiaoQi
 * @date:2017-11-24下午11:20:23
 * @version V1.0
 */
public class SendTelMsgUtils {

    /**
     * ACCOUNT_SID:开发者主账号ID(注册后自动生成)
     */
    public static final String ACCOUNT_SID = "填写ACCOUNT SID";

    /**
     * AUTH_TOKEN:开发者账号认证密匙(注册后自动生成)
     */
    public static final String AUTH_TOKEN = "填写AUTH TOKEN";

    /**
     * BASE_URL:请求地址
     */
    public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";

    /**
     * RESP_DATA_TYPE:数据返回格式为JSON格式
     */
    public static final String RESP_DATA_TYPE = "json";

    /**
     * randNum:生成的验证码随机数
     */
    static String randNum = createRandNum();

    /**
     * smsContent:短信内容(短信签名+短信内容,注意要和配置的模板一致,否则报错)
     */
    public static String smsContent = "【长城】您的验证码为"+randNum+",如非本人操作,请忽略此短信。";

    /**
     * 
     * @Title:sendMsgTo
     * @Description:发送短信验证码
     * @param:
     * @return:String
     */
    public static String sendMsgTo(String to) {

        /**
         * 获取时间戳 
         */
        String timestamp = getTimestamp();

        /**
         * 获取签名
         */
        String sig = sig_MD5(ACCOUNT_SID + AUTH_TOKEN + timestamp);

        /**
         * 要提交的post数据
         */
        String http_post = "accountSid="+ACCOUNT_SID
                          +"&smsContent="+smsContent
                          +"&to="+to
                          +"&timestamp="+timestamp
                          +"&sig="+sig
                          +"&respDataType="+RESP_DATA_TYPE;

        OutputStreamWriter osw = null;
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();
        try {

            /**
             * 获取连接
             */
            URL url = new URL(BASE_URL);

            /**
             * 打开连接
             */
            URLConnection conn = url.openConnection(); 

            /**
             * 设置连接参数
             */
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setConnectTimeout(5000); 
            conn.setReadTimeout(20000);

            /**
             * 提交数据
             */
            osw = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            osw.write(http_post);
            osw.flush();

            /**
             * 读取返回数据
             */
            br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line = "";
            while((line = br.readLine()) != null) {
                sb.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 
     * @Title:getTimestamp
     * @Description:获取时间戳
     * @param:
     * @return:String
     */
    public static String getTimestamp() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String date = sdf.format(new Date());
        return date;
    }

    /**
     * 
     * @Title:sig_MD5
     * @Description:对"ACCOUNT_SID + AUTH_TOKEN + timestamp"进行MD5加密,
     * 这里使用的是apache.commons.codec.digest.DigestUtils;
     * 需要引入jar包:commons-codec-1.11.jar
     * 若apache.org找不到jar包可在
     * http://download.csdn.net/download/weixin_39175602/10132207
     * 下载,包含jar包和源码;
     * @param:
     * @return:String
     */
    public static String sig_MD5(String str) {
        String sig_md5 = DigestUtils.md5Hex(str);
        return sig_md5;
    }

    /**
     * 
     * @Title:createRandNum
     * @Description:生成一个6位的随机码
     * @param:
     * @return:String
     */
    public static String createRandNum() {
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i <= 5; i++) {
            String s = random.nextInt(10) + "";
            sb.append(s);
        }
        return sb.toString();
    }

    /**
     * 
     * @Title:main
     * @Description:测试
     * @param:
     * @return:void
     */
    public static void main(String[] args) {
        System.out.println("验证码是:" + randNum);
        String result = sendMsgTo("15827307043");
        System.out.println(result);
    }
}

注意:如果报错,请参考平台提供的一些报错解决方案,也非常欢迎一起交流学习啦^_^
这里写图片描述

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值