1. 程式人生 > >java實現網易雲簡訊介面

java實現網易雲簡訊介面

httpclient-4.3.6.jar和httpcore-4.3.3.jar jar包

首先去網易雲註冊賬號得到分配的app key 和 App Secret  開通簡訊有20條試用。使用的是httpclient post提交

請求資訊分為 請求頭和請求引數

 請求頭:必須5個引數,分別是:AppKey。Nonce。CurTime。CheckSum。Content-Type。  區分大小寫

 請求引數:mobile(手機號碼),code(驗證碼),templateid(模板id),codeLen(驗證碼長度)  非必填的。

 建立一個生成隨機驗證碼的類:

import java.security.MessageDigest;
/**
 * 驗證碼生成工具類
 */
public class CheckSumBuilder {

    // 計算並獲取CheckSum
    public static String getCheckSum(String appSecret, String nonce, String curTime) {
        return encode("sha1", appSecret + nonce + curTime);
    }


    // 計算並獲取md5值
    public static String getMD5(String requestBody) {
        return encode("md5", requestBody);
    }


    private static String encode(String algorithm, String value) {
        if (value == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
            messageDigest.update(value.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }


    private static final char[] HEX_DIGITS =
            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
}

根據api提供的java程式碼建立一個測試類

import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;


/**

*傳送請求到網易雲

*success:網易雲成功傳送驗證碼到手機

*/

public class SendCode {
    public static void main(String[] args) throws Exception {
   
        System.out.println(sendMsg("******************"));


    }


    private static final String SERVER_URL = "https://api.netease.im/sms/sendcode.action";//傳送驗證碼的請求路徑URL
    private static final String APP_KEY = "***************************************";//網易雲信分配的賬號
    private static final String APP_SECRET = "*********";//網易雲信分配的金鑰
    private static final String NONCE = "123456";//隨機數
    //簡訊模板ID
    private static final String TEMPLATEID="3094150";
    //驗證碼長度,範圍4~10,預設為4
    private static final String CODELEN="6";
    /**
     * 
     * @param phone  手機號
     * @return
     * @throws IOException
     */
    public static MessageVo sendMsg(String phone) throws IOException {
   
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost post = new HttpPost(SERVER_URL);


        String curTime = String.valueOf((new Date().getTime() / 1000L));
        /*通過驗證碼工具類生成隨機數*/
        String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);
        System.out.println("驗證碼:"+checkSum);
        //設定請求的header  請求頭
        post.addHeader("AppKey", APP_KEY);
        post.addHeader("Nonce", NONCE);
        post.addHeader("CurTime", curTime);
        post.addHeader("CheckSum", checkSum);
        post.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");


        //設定請求引數
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        /*啟用簡訊模板*/
        nameValuePairs.add(new BasicNameValuePair("templateid", TEMPLATEID));
        /*手機號*/
        nameValuePairs.add(new BasicNameValuePair("mobile",phone));
        /*驗證碼長度*/
        nameValuePairs.add(new BasicNameValuePair("codeLen",CODELEN));
        /*將請求頭資訊和請求引數放入一個entity裡面*/
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));


        //執行請求
        HttpResponse response = httpclient.execute(post);
        /*獲取返回的資訊 是一個json字串*/
        String responseEntity = EntityUtils.toString(response.getEntity(),"utf-8");

        MessageVo messageVo=new MessageVo();


        //判斷是否傳送成功,傳送成功返回true  獲取返回的狀態碼
        String code = JSON.parseObject(responseEntity).getString("code")

        System.out.println("狀態嗎:"+code);
        messageVo.setCode(code);
        messageVo.setObj(obj);
        return messageVo;


//        if (code.equals("200")) {
//            return "success";
//        }
//        return "error";
    }
}

然後就是一個輸入手機號碼和驗證碼的校驗類

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;


/**
 * 校驗驗證碼輸入是否正確
 */
public class MobileMessageCheck {


    public static void main(String[] args) throws Exception {
        System.out.println(checkMsg("187********","626712"));


    }


    private static final String SERVER_URL = "https://api.netease.im/sms/verifycode.action";//校驗驗證碼的請求路徑URL
    private static final String APP_KEY = "*********************************";//網易雲信分配的賬號
    private static final String APP_SECRET = "***************";//網易雲信分配的金鑰
    private static final String NONCE = "123456";//隨機數
  
    /**
     * 
     * @param phone  手機號
     * @param sum     驗證碼
     * @return
     * @throws IOException
     */
    public static MessageVo checkMsg(String phone, String sum) throws IOException {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost post = new HttpPost(SERVER_URL);


        String curTime = String.valueOf((new Date().getTime() / 1000L));
        String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET, NONCE, curTime);


        //設定請求的header
        post.addHeader("AppKey", APP_KEY);
        post.addHeader("Nonce", NONCE);
        post.addHeader("CurTime", curTime);
        post.addHeader("CheckSum", checkSum);
        post.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");


        //設定請求引數
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("mobile", phone));
        nameValuePairs.add(new BasicNameValuePair("code", sum));


        post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));


        //執行請求
        HttpResponse response = httpclient.execute(post);
        String responseEntity = EntityUtils.toString(response.getEntity(), "utf-8");

        MessageVo messageVo=new MessageVo();
        //判斷是否傳送成功,傳送成功返回true
        String code = JSON.parseObject(responseEntity).getString("code");

        System.out.println("狀態嗎:"+code);
        messageVo.setCode(code);
        return messageVo;
//        if (code.equals("200")) {
//           return "success";
//        }
//        return "error";
    }
}

建立實體類MessageVo用來儲存狀態碼與驗證碼屬性

package cn.vo;public class MessageVo {
 private String code;//狀態碼
 private String obj;//驗證碼
 public String getCode() {
  return code;
 }
 public void setCode(String code) {
  this.code = code;
 }
 public String getObj() {
  return obj;
 }
 public void setObj(String obj) {
  this.obj = obj;
 }
 
}

建立UsreServlet類,與jsp互動。通過ajax傳值,判斷

public class UserServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  String action = request.getParameter("action");
  
  if(action.equals("verifyingCode")){
   //傳送請求到網易雲,返回請求處理狀態
   String phone = request.getParameter("phone");
   MessageVo messageVo= SendCode.sendMsg(phone);
   String code=messageVo.getCode();
   if(code.endsWith("200")){
    //將驗證碼塞入session,可以這樣就可以自己寫驗證驗證碼的方法了,
    request.getSession().setAttribute("verifyingCode", messageVo.getObj());
    response.getWriter().print("success");
   }else{
    response.getWriter().print("error");
   }
  }else if(action.equals("register")){
   //檢測驗證碼是否正確,這個是呼叫網易雲平臺的方法檢驗,也可以自己寫程式碼檢驗
 //  String  phone = request.getParameter("phone");
//   System.out.println(phone);     String yzmStr = request.getsession().getAttribute("verifyingCode");    System.out.println(yzmStr);
     String yzm = request.getParameter("yzm");
     System.out.println(yzm);
//   MessageVo messageVo= MobileMessageCheck.checkMsg(phone, yzm);
//   String code=messageVo.getCode();
//   if(code.endsWith("200")){
//    response.getWriter().print("success");
 //  }else{
//    response.getWriter().print("error");if(yzm.equals(yzmStr)){    response.getWriter().print("success");
}else{    response.gerWriter().print("error");
}
   }
  }
 }}

前臺Ajax程式碼

<script type="text/javascript">
 $(document).ready(function() {
  var min = 60;
  var time;
  $("#yzm").click(function(){
   
   var phone = $("#phone").val();
   $.ajax({   
                   url:"http://localhost:8080/web0706msg/UserServlet",  
                   type:"post", 
                   data:{"action":"verifyingCode","phone": phone},
                   success:function(e){ 
                       if(e=="success"){
                        alert("驗證碼傳送成功!");
                        if(min != 60){
                   return;
                  }
                  fun();
                  time = setInterval(fun,1000);
                       
                       }else{
                        alert("驗證碼傳送失敗!");
                       }
                   } 
               }); 
  });
  
  function fun(){
   min = --min;
   if(min > 0){
    $("#yzm").html("("+min+")秒後重發");
   } else {
    clearInterval(time);
    min = 60;
    $("#yzm").html("獲取驗證碼");
   }
  }
 }); $(".tableBtn").click(function(){
//  alert("111")
  var phone = $("#phone").val();
  var yzm =$("[name=yzm]").val();
  $.ajax({   
               url:"http://localhost:8080/web0706msg/UserServlet",  
               type:"post", 
               data:{"action":"register","phone": phone,"yzm":yzm},
               success:function(e){ 
                   if(e=="success"){
                  // alert("驗證碼驗證成功!");
                   }else if(e=="error"){
                  // alert("驗證碼驗證失敗!");
                   }
               } 
           }); 
 }); 
 
</script>

相關推薦

java實現簡訊介面

httpclient-4.3.6.jar和httpcore-4.3.3.jar jar包首先去網易雲註冊賬號得到分配的app key 和 App Secret  開通簡訊有20條試用。使用的是httpclient post提交請求資訊分為 請求頭和請求引數 請求頭:必須5個引

Java實現音樂爬蟲(非selenium)

主要內容: 使用httpclient(非模擬瀏覽器) 使用網易雲音樂api 採集:評論和使用者最近聽歌的統計 思路: 用一首歌的id作為入口,得到下面的所有評論 –> 取出

Java呼叫信的簡訊介面程式碼

package yunxintest; import java.io.*; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import

Qt-音樂介面實現-7 訊息中心實現,主要是QListWidget 自定義Item 和QTabwidget使用

最近寫的有點煩躁, 感覺內容真的很多!很多!很多。目前真的想知道網易官方在出這款產品是,用了多少人和多長時間。今天寫的這個訊息中心,有點糙,只是原理實現了沒有完全複製過來,心裡有團火,不想寫了。看下效果吧其實這個訊息中心的內容到時很簡單,最底層一個Qtabwidgte,構成@

用RotateDrawable實現音樂唱片機效果

image 不難 線程 們的 progress ogr icon 什麽 als 有一段時間沒有更新文章了,記得上一篇文章講的是《用ClipDrawable實現音頻錄制麥克風講話效果》,用戶反響也都還不錯,自己也是深受鼓勵。事實上從那之後就一直想寫一篇

零基礎實現音樂播放器

循環 case phone width shadow rec pda user res H5增加了很多的標簽,面試的時候,如果面試官問你H5都有哪些新標簽,你回答header、footer、nav。這麽回答幾乎是無效的,因為這些標簽在H5裏面的角色,相當於雞骨頭、魚刺、蘑菇

java呼叫騰訊簡訊介面,獲取驗證碼例子

1.下載騰訊雲簡訊原始碼; 2.解壓之後放專案中:如下圖 3.簡訊驗證碼獲取:     private final static int APP_ID = 騰訊雲給你分發的appid;     private final static String APP_K

利用AudioContext來實現音樂的鯨魚音效

一直覺得網易雲音樂的使用者體驗是很不錯的,很早就注意到了裡面的鯨魚音效,如下圖,就是一個環形的跟著音樂節拍跳動的特效。 gif動圖可能效果不太理想,可以直接在手機上體驗 身為前端憑著本能的好奇心和探索心當然會研究一番,如何在頁面上實現該效果? 1.AudioCon

自定義外掛實現音樂首頁圖片輪播

編寫html介面 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>網易雲音樂

Java實現百度OCR介面識別圖片文字資訊(也包含身份證,銀行卡識別,更新新增通用票據識別)

1.需求背景 因專案需求,需要提取身份證、發票(9/16更新內容)、榮譽證書上的文字資訊,與相關檔案進行匹配,而查閱相關資料,經過對比之後,發現用百度OCR文字識別API服務可以相應解決相關問題,識別率較好。當然,還不能夠做到完全匹配,也有其中不足的地方,例如,發票中公章資訊不能提取;發票周

安卓 實現音樂底部播放欄效果之使用自定義BaseActivity實現

起因: 最近在寫一個音樂專案,發現網易雲音樂的底部播放欄看起來不錯,不同的頁面切換也能做到無縫連線,於是自己打算仿造一個。折磨: 1.一開始我看到知乎有大神說使用Activity+Fragment實現

python利用音樂介面搭建的音樂推薦,根據單曲歌名推薦相關使用者喜愛的歌曲

一、網易雲音樂的相關介面 這邊我想要的資料介面有: * 網易的搜尋功能,根據歌名獲取歌曲的id * 歌曲相關的評論使用者介面 * 使用者的相關資料包括歌單或聽歌記錄,這邊聽歌記錄的介面好像不能用,所以我就用的歌單介面 關於每個介面大家可以自己F12網易官網看看是長什麼樣子,

Java: 根據音樂URL下載歌曲、歌詞、專輯封面和MV

先看最終效果圖: 前提請下載: (1)jsoup-1.11.3.jar (2)JMF 2.1.1e 然後使用開源的JSoup分析框架原始碼得到如下: <script type="application/ld+json"> { "@context"

用系統方法實現音樂VC翻轉動畫

翻轉動畫僅僅是VC切換動效的一種,通過此方法可以方便的實現VC切換的各種動效。 思路: MasterVC作為根檢視控制器 AAVC和BBVC之間切換均通過MasterVC進行。 Master

Flutter 實現音樂字幕

老孟導讀:沒有接觸過音樂字幕方面知識的話,會對字幕的實現比較迷茫,什麼時候轉到下一句?看了這篇文章,你就會明白字幕so easy。 先來一張效果圖: 字幕格式 目前市面上有很多種字幕格式,比如srt, ssa, ass(文字形式)和idx+sub(圖形格式),但不管哪一種格式都會包含2個屬性:時間

傳送簡訊驗證碼java實現

首先,登陸網易雲信註冊賬號然後獲取自己的App Key與App Secret,這裡就不多說了,可以自行百度。 在服務端API中我們可以很容易的找到這段程式碼,這是用來加密用的(關於如何加密也可以找到) import java.security.MessageDiges

Java 實現傳送驗證碼並呼叫介面驗證 (信)

大概流程: 使用者輸入賬號點選獲取驗證碼,驗證是否繫結手機號碼,繫結則傳送驗證碼 使用者輸入驗證碼,呼叫介面驗證是否正確返回響應 首先我們需要在網易雲信註冊賬號,獲取得到App Key和App Secret 需要注意的幾個引數:     &nb

java 實現傳送簡訊驗證碼()

連結:https://pan.baidu.com/s/1saRmzciNQWpFxHJRN0ISTg 密碼:siyt 實現傳送驗證碼的工程下載 1、我們開啟這個工程,檢視其中的程式碼 package com.ghj.test; import java.io.IOExce

Java使用【信】簡訊介面,給手機使用者傳送並校驗驗證碼

package com.web; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.HttpResponse;

安卓仿介面的本地音樂播放器的實現

前言:讀研究生之前,老闆讓學IOS,老老實實看了一個學期的IOS(在這裡強烈安利一下騰訊課堂的小碼哥IOS視訊,基本剛開始只需要10塊買第一部,後面的就可以用可視幣來兌換了,質量還不錯,能學到很多東西,看三部基本IOS就能入門了),結果開學提前兩個月被叫去幹活,一開會,說IO