javaweb调用第三方短信接口

这是个存在一个bug(自己去发现哈哈,不安全)的短信验证接口,调用第三方的平台,原理就是你这边随机生成一个六位字符串,字符串放到人家的平台上,让人家帮你通过短信的方式发送到指定的人的手机号上,开始。

1.前期准备

(1)jar包 我用的是maven管理jar包,所以这里放上依赖的代码

<dependency>
    <groupId>net.sf.json-libgroupId>
    <artifactId>json-libartifactId>
    <version>2.4version>
dependency>
<dependency>
    <groupId>org.jsongroupId>
    <artifactId>jsonartifactId>
    <version>20160810version>
dependency>

两个包 用来解析json用的 用到了ajax

(2)第三方平台的账号申请,这里我使用的首次申请就送200条的秒嘀(给你们推荐)

javaweb调用第三方短信接口_第1张图片

申请后会在个人控制中心看到自己的密钥之类的东西(

ACCOUNT_SID  
AUTH_TOKEN

这两个东西是需要保存的

2.工具类(向第三方发送请求的方法)

GetMessageCode.java

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

import org.json.JSONObject;

public class GetMessageCode {
   private static final String QUERY_PATH="https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
   private static final String ACCOUNT_SID="";//我写的很清楚这两条填写你们的就行了
   private static final String AUTH_TOKEN="";



   public static String getCode(String phone){
      String rod=smsCode();
      String timestamp=getTimestamp();
      String sig=getMD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);
      String tamp="【美乎网】登录验证码:"+rod+",如非本人操作,请忽略此短信。";
      OutputStreamWriter out=null;
      BufferedReader br=null;
      StringBuilder result=new StringBuilder();
      try {
         URL url=new URL(QUERY_PATH);
         HttpURLConnection connection=(HttpURLConnection) url.openConnection();
         connection.setRequestMethod("POST");
         connection.setDoInput(true);//设置是否允许数据写入
         connection.setDoOutput(true);//设置是否允许参数数据输出
         connection.setConnectTimeout(5000);//设置链接响应时间
         connection.setReadTimeout(10000);//设置参数读取时间
         connection.setRequestProperty("Content-type","application/x-www-form-urlencoded");
         //提交请求
         out=new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
         String args=getQueryArgs(ACCOUNT_SID, tamp, phone, timestamp, sig, "JSON");
         out.write(args);
         out.flush();
         //读取返回参数

         br=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
         String temp="";
         while((temp=br.readLine())!=null){
            result.append(temp);
         }
      } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      JSONObject json=new JSONObject(result.toString());
      String respCode=json.getString("respCode");
      String defaultRespCode="00000";
      if(defaultRespCode.equals(respCode)){
         return rod;
      }else{
         return defaultRespCode;
      }
   }
   //定义一个请求参数拼接方法
   public static String getQueryArgs(String accountSid,String smsContent,String to,String timestamp,String sig,String respDataType){
      return "accountSid="+accountSid+"&smsContent="+smsContent+"&to="+to+"×tamp="+timestamp+"&sig="+sig+"&respDataType="+respDataType;
   }
   //获取时间戳
   public static String getTimestamp(){
      return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
   }
   //sing签名
   public static String getMD5(String sid,String token,String timestamp){

      StringBuilder result=new StringBuilder();
      String source=sid+token+timestamp;
      //获取某个类的实例
      try {
         MessageDigest digest=MessageDigest.getInstance("MD5");
         //要进行加密的东西
         byte[] bytes=digest.digest(source.getBytes());
         for(byte b:bytes){
            String hex=Integer.toHexString(b&0xff);
            if(hex.length()==1){
               result.append("0"+hex);
            }else{
               result.append(hex);
            }
         }
      } catch (NoSuchAlgorithmException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }


      return result.toString();
   }
   //创建验证码
   public static String smsCode(){
      String random=(int)((Math.random()*9+1)*100000)+"";
      return random;
   }
}

3.一个servlet做中转

我顺便放上jsp的demo

control:

public void resetSend(String tel,HttpServletRequest request, HttpServletResponse response)
      throws IOException {

   //根据获取到的手机号发送验证码
   String code = GetMessageCode.getCode(tel);
   response.getWriter().print(code);

}

jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    




登录页面



 





       
jsp页面的这些js我觉的你们应该能看到,毕竟我这样垃圾的都可以看懂55555555

你可能感兴趣的:(javaweb调用第三方短信接口)