手机短信验证【 java】

    以前在学校写小项目的时候,总会用到注册登录功能,像我这样过目就忘的人,很有可能刚注册完,就把注册时填写的密码给忘记了。哈哈..........感觉自己提前进入了健忘症阶段,没有办法你还得再找回密码,找回密码这时你就会用到短信验证码重置密码,当然这是其中的一种密码找回方式,其他例如邮件方式找回,我们先学习使用短信验证信息进行密码找回。

一、准备阶段

       首先,我们需要一家短信接口的公司,因为靠我自己去实现几乎不可能吧(反正目前不可能),然后就可以编写代码根据公司短信API进行接口调用,来使用短信业务了。

       我使用的秒嘀科技,初次注册送10元,可以免费使用大约166次短信,可以说很良心了,接口测试也不难!

1.1  获取SID和TOKEN

      类似下图,作者进行了打码处理,因为后面还要用。账户还有9.94,刚刚发了一个短信,成功了,不然也不敢来胡说

手机短信验证【 java】_第1张图片

1.2 创建短信模板

      后面代码中发送的短信内容一定要跟此处的模板一致,否则会不成功,模板还要通过审核,肯定是不让你发乱七八糟的东西,我国可是有着上下五千年历史的文明古国。

     如下图中,作者使用的模板为:”【瑞幸咖啡】您的验证码为:{1},请勿将验证码告诉他人,如非本人操作,请忽略此短信。“短信模板通过审核后,最开心的事来了。可以根据API文档写代码发送短信了。

手机短信验证【 java】_第2张图片

二、代码实现

2.1 短信配置

   我把SID和TOKEN都用星号代替了,你在实现的时候要换成自己的内容。

package com.ucarinc.message;

/**
 * Create By IDEA
 *
 * @author kangshuaizuo
 * @date 2018/9/17
 */
public class Config {


    /**
     * ACCOUNT SID
     */
    public static final String SID = "***********************************";

    /**
     * AUTH TOKEN
     */
    public static final String TOKEN = "*************************************";

    /**
     * 获取个人信息的 URL
     */
    public static final String PERSON_URL = "https://api.miaodiyun.com/20150822/query/accountInfo";

    /**
     *  获取验证码短信的URL
     */
    public static final String GET_MESSAGE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";

    /**
     * 响应数据类型, JSON或XML
     */
    public static final String RESP_DATA_TYPE = "json";

}

2.2 短信请求方法

package com.ucarinc.message;

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

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

/**
 * Create By IDEA
 *
 * @author kangshuaizuo
 * @date 2018/9/17
 */
public class HttpUtil {

    /**
     *  创建个人信息查询的参数
     * @return
     */
    public static String createPersonMessage()
    {
        // 时间戳
        String accountSid = Config.SID;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timestamp = sdf.format(new Date());

        // 签名
        String sig = DigestUtils.md5Hex(Config.SID + Config.TOKEN + timestamp);

        return "accountSid="+accountSid+"×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
    }

    /**
     *  创建发送短信的参数
     * @return json格式的返回内容
     */
    public static String createSendMessage()
    {
        // SID
        String accountSid = Config.SID;
        // 短信内容,要跟模板一致
        String smsContent = "【瑞幸咖啡】您的验证码为:123456,请勿将验证码告诉他人,如非本人操作,请忽略此短信。";
        // 时间戳
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timestamp = sdf.format(new Date());
        // 手机号
        String to = "***********";
        // 签名
        String sig = DigestUtils.md5Hex(Config.SID + Config.TOKEN + timestamp);

        return "accountSid="+ accountSid +"&smsContent="+ smsContent +"&to="+ to +"×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
    }



    /**
     * post请求
     *
     * @param url
     *            功能和操作
     * @param body
     *            要post的数据
     * @return
     * @throws IOException
     */
    public static String post(String url, String body)
    {
        String result = "";
        try
        {
            OutputStreamWriter out = null;
            BufferedReader in = null;
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();

            // 设置连接参数
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(20000);
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 提交数据
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.write(body);
            out.flush();

            // 读取返回数据
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line = "";
            boolean firstLine = true;
            while ((line = in.readLine()) != null)
            {
                if (firstLine)
                {
                    firstLine = false;
                } else
                {
                    result += System.lineSeparator();
                }
                result += line;
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return result;
    }


}

2.3 测试类

package com.ucarinc.message;

/**
 * Create By IDEA
 *
 * @author kangshuaizuo
 * @date 2018/9/17
 */
public class Test {

    public static void main(String[] args) {

        System.out.println(sendMessage());

    }

    /**
     *  获取个人账号信息
     * @return json格式
     */
    public static String getPersonMessage(){

        String url = Config.PERSON_URL;
        String body = HttpUtil.createPersonMessage();

        String getPersonMessage = HttpUtil.post(url,body);

        return  getPersonMessage;
    }

    /**
     *  发送短信
     * @return json格式
     */
    public static String sendMessage(){

        String url = Config.GET_MESSAGE_URL;
        String body = HttpUtil.createSendMessage();

        String sendMessage = HttpUtil.post(url,body);

        return sendMessage;
    }


}

 

你可能感兴趣的:(短信接口)