package cn.geekss.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.json.JsonObject;

import org.json.JSONObject;

public class GetMessageCode1 {

// 请求的地址
    protected static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
    // 开发者主账号id ACCOUNT_SID 由32位英文字母和阿拉伯数字组成的账号唯一标识符0
    protected static final String ACCOUNT_SID = "3832ef3b8a434462ba3b987db0bcddd5";
    // token 签名用
    protected static final String AUTH_TOKEN = "da47afd7203c40188830eaec650cfd3d";

/**
     * 发送验证
     *
     * @param phone
     * @return
     */
    public static String sendCode(String phone) {
        // 验证码
        String code = getCode();
        // 时间戳
        String timeStamp = getTimeStamp();

// 获取签名
        String sig = getSig(ACCOUNT_SID, AUTH_TOKEN, timeStamp);

// 内容
        String content = "【博客园】登录验证码:" + code + ",如非本人操作,请忽略此短信。";
        //输出流
        OutputStreamWriter writer = null;
        //输入流
        BufferedReader bufferedReader = null;

StringBuilder sb = new StringBuilder();
        try {
            URL url = new URL(QUERY_PATH);
            HttpURLConnection httpUrlConnection = (HttpURLConnection) url
                    .openConnection();
            httpUrlConnection.setRequestMethod("POST");
            // 是否允许写入
            httpUrlConnection.setDoInput(true);
            // 是否允许输出
            httpUrlConnection.setDoOutput(true);
            // 5秒
            httpUrlConnection.setConnectTimeout(5000);

httpUrlConnection.setRequestProperty("Content-type",
                    "application/x-www-form-urlencoded");
            writer = new OutputStreamWriter(
                    httpUrlConnection.getOutputStream(), "UTF-8");
            // 请求的参数
            String url_para = getQueryPara(ACCOUNT_SID, content, phone,
                    timeStamp, sig, "JSON");
            writer.write(url_para);
            System.out.println(url_para);
            writer.flush();
            /*
             * reader = new
             * InputStreamReader(httpUrlConnection.getInputStream(),"UTF-8");
             */
            bufferedReader = new BufferedReader(new InputStreamReader(
                    httpUrlConnection.getInputStream(), "UTF-8"));
            String stringline = "";
            while ((stringline = bufferedReader.readLine()) != null) {
                sb.append(stringline);
            }

} catch (Exception e) {

e.printStackTrace();
        }
        JSONObject object = new JSONObject(sb.toString());
        System.out.println(object);
        String defaultResponse = "00000";
        String str = (String) object.get("respCode");
        if (str.equals(defaultResponse)) {
            return code;
        } else {
            return defaultResponse;
        }

}

/**
     * 请求的参数集合
     *
     * @param accountSid
     * @param smsContent
     * @param to
     * @param timestamp
     * @param sig
     * @param resultDataType
     * @return
     */
    public static String getQueryPara(String accountSid, String smsContent,
            String to, String timestamp, String sig, String resultDataType) {

String url = "accountSid=" + accountSid + "&smsContent=" + smsContent
                + "&to=" + to + "&timestamp=" + timestamp + "&sig=" + sig
                + "&respDataType=" + resultDataType;
        return url;
    }

/**
     * 获取时间戳
     *
     * @return
     */
    public static String getTimeStamp() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return sdf.format(new Date());
    }

/**
     * 签名 MD5 加密
     *
     * @return
     */
    public static String getSig(String account_Sid, String auth_Token,
            String timeStamp) {

String sig = account_Sid + auth_Token + timeStamp;
        StringBuilder sb = new StringBuilder();
        // 获取 MD5 加密
        try {
            // 获取MD5加密类
            MessageDigest digest = MessageDigest.getInstance("MD5");
            byte[] bytes = digest.digest(sig.getBytes());
            for (byte b : bytes) {
                String hex = Integer.toHexString(b & 0xff);
                if (hex.length() == 1) {
                    sb.append("0" + hex);
                } else {
                    sb.append(hex);
                }
            }

} catch (Exception e) {

e.printStackTrace();
        }

return sb.toString();
    }

/**
     * 获取发送的验证码
     *
     * @return
     */
    public static String getCode() {
        String code = new Random().nextInt(1000000) + "";
        if (code.length() < 6) {
            return getCode();
        }
        return code;
    }

public static void main(String[] args) {

System.out.println(sendCode("13189031999"));
    }
}

使用java短信验证的更多相关文章

  1. java短信验证和注册

    最近公司需要用到短信验证注册,所以申请了阿里云的短信服务.我的项目是分布式的spring boot 原理: 利用第三方发送短信 获取回执消息,然后存入缓存里面 将用户填写的验证码与缓存里面的验证码对比 ...

  2. JAVA短信验证登录

    短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...

  3. 阿里云短信验证~JAVA后台

    maven :中的 pom.xml添加 <dependency> <groupId>com.aliyun</groupId> <artifactId>a ...

  4. Mob.com 短信验证的简单使用

    1.环境配置 http://wiki.sharesdk.cn/android-短信sdk集成文档/ a.sdk下载 http://www.mob.com/#/downloadDetail/SMS/an ...

  5. Mob短信验证的具体使用

    原文著作权地址:http://www.jb51.net/article/84946.htm demo地址:http://git.oschina.net/lizhanqi/MobSMSDemo 一.前言 ...

  6. 短信验证登陆-中国网建提供的SMS短信平台

    一.JAVA发送手机短信常见的有三种方式(如下所列): 使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 使用短信mao的方式进行短信 ...

  7. 『实践』Android之短信验证码(用的Mob短信验证)

    1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...

  8. Wex5短信验证

    调了好几天短信验证测试,终于成功,现将全部源代码发给大家,希望对各位有所帮助,少走弯路        Model.prototype.saveUserBtnClick = function(event ...

  9. 【mob】Android短信验证+源码

    在很多的应用当中,都涉及到了短信验证的功能,比如在注册或者找回密码的时候,那么我们如何通过第三方的平台来完成这个功能呢? 本面博文就实现短信验证,来做一个小的栗子. 第一步-下载开发包 第二步-将SD ...

随机推荐

  1. CentOS-TFTP服务搭建

    title date tags layout CentOS6.5 TFTP搭建 2018-08-26 Centos6.5服务器搭建 post 1.安装TFTP服务 yum install tftp-s ...

  2. Qt QString的arg()方法的使用

    1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...

  3. Excel-DNA开发包:ExcelDna-0.34.6.zip下载

    Excel-DNA可以用VB.Net或C#开发Excel自定义函数.制作.xll格式的加载宏. 点此下载 ExcelDna-0.34.6.zip

  4. golang seelog使用

    golang中自带的有log包,但是功能并不能满足我们.很多人推荐seelog,我们今天一起学习下. 安装 go get github.com/cihub/seelog 快速开始 引用seelog w ...

  5. 从CVPR 2014看计算机视觉领域的最新热点

    2014看计算机视觉领域的最新热点" title="从CVPR 2014看计算机视觉领域的最新热点"> 编者按:2014年度计算机视觉方向的顶级会议CVPR上月落下 ...

  6. JS做深度学习3——数据结构

    最近在上海上班了,很久没有写博客了,闲下来继续关注和研究Tensorflow.js 关于深度学习的文章我也已经写了不少,部分早期作品可能包含了不少错误的认识,在后面的博文中会改进或重新审视. 今天聊聊 ...

  7. Mybatis-Plus的分页插件

    使用的是:Mybatis-Plus的分页插件https://baomidou.gitee.io/mybatis-plus-doc/#/?id=%E7%AE%80%E4%BB%8B 1.Mapper.j ...

  8. ffmpeg android移植

    CMake语法简介(androidstudio中利用CMake开发NDK): http://blog.csdn.net/u013718120/article/details/62883711FFmpe ...

  9. 挑战中英实时语音翻译——Skype Translator 中文预览版登陆中国

    Translator 中文预览版登陆中国" title="挑战中英实时语音翻译--Skype Translator 中文预览版登陆中国"> 今天,我们正式宣布在中国 ...

  10. XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]

    1)DOM(JAXP Crimson解析器)    DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定 ...