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