1. 程式人生 > >java 實現傳送簡訊驗證碼(網易雲)

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

連結:https://pan.baidu.com/s/1saRmzciNQWpFxHJRN0ISTg 密碼:siyt
實現傳送驗證碼的工程下載

1、我們開啟這個工程,檢視其中的程式碼

package com.ghj.test;

import java.io.IOException;
import java.util.Scanner;

import com.ghj.tool.SMSUtils;

/**
 * 測試驗證碼類簡訊
 */
public class CaptchaMsgTest {
	
	private static String mobile = "xxxxxxxxxxxx";
	
	/**
	 * 簡訊內容:您的驗證碼為%s,10分鐘內有效。
	 */
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		if(SMSUtils.isMobile(mobile)){
			try {
				SMSUtils.sendCode(mobile,"3943633");//傳送驗證碼
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.print("請輸入您收到的簡訊驗證碼:");
		String code = new Scanner(System.in).next();
		try {
			if(SMSUtils.verifyCode(mobile, code)){//校驗驗證碼
				System.out.println("驗證碼正確...");
			}else{
				System.out.println("驗證碼錯誤...");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

mobile屬性可以改為你想要傳送到的手機號碼 sendCode方法中的第二個引數為驗證碼模板id   其中呼叫了smsutil中的sendcode方法來向手機發送驗證碼

package com.ghj.tool;

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.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 簡訊相關的工具類
 */
public class SMSUtils {

    private static final String NONCE = "123456";
	private static final String APP_SECRET = "87ae5a14b7e3";
    private static final String APP_KEY = "c5e7dd7648b871180f53063cf1d3f869";
    
    /**
     * 檢測手機號有效性
     * 
     * @param mobile 手機號碼
     * @return 是否有效
     */
    public static final boolean isMobile(String mobile){
        Pattern pattern = Pattern.compile("^((1[3578][0-9])|(14[57]))\\d{8}$");
        Matcher matcher = pattern.matcher(mobile);
        return matcher.matches();
    }
    
    /**
     * 驗證碼類簡訊,注意:該簡訊中驗證碼不能自己生成,由網易雲幫我們生成
     * 
     * @param mobile 手機號碼
     * @param templateId 驗證碼模板ID
     * @return 是否傳送成功
     */
    public static final boolean sendCode(String mobile, String templateId) throws IOException {
        HttpPost httpPost = new HttpPost("https://api.netease.im/sms/sendcode.action");

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

        //set header
        httpPost.setHeader("AppKey",APP_KEY);
        httpPost.setHeader("CurTime",currentTime);
        httpPost.setHeader("Nonce",NONCE);
        httpPost.setHeader("CheckSum",checkSum);
        httpPost.setHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

        //set data
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(new BasicNameValuePair("mobile",mobile));
        nameValuePairList.add(new BasicNameValuePair("templateid", templateId));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList,"utf-8"));

        //start request
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
        HttpResponse httpResponse = closeableHttpClient.execute(httpPost);
        String responseResult = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
        System.out.println("responseResult:"+responseResult);

        String stateCode = JSON.parseObject(responseResult).getString("code");
        if(stateCode.equals("200")){
            return true;
        }
        return false;
    }

    /**
     * 判斷使用者輸入驗證碼與網易雲生成的驗證碼是否一致
     * 
     * @param mobile 電話號碼
     * @param code 傳送到mobile上的簡訊
     */
    public static final boolean verifyCode(String mobile, String code) throws IOException {
        HttpPost httpPost = new HttpPost("https://api.netease.im/sms/verifycode.action");

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

        //set header
        httpPost.setHeader("AppKey",APP_KEY);
        httpPost.setHeader("CurTime",currentTime);
        httpPost.setHeader("Nonce",NONCE);
        httpPost.setHeader("CheckSum",checkSum);
        httpPost.setHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");

        //set data
        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(new BasicNameValuePair("code",code));
        nameValuePairList.add(new BasicNameValuePair("mobile",mobile));
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList,"utf-8"));

        //start request
        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
        HttpResponse httpResponse = closeableHttpClient.execute(httpPost);
        String responseResult = EntityUtils.toString(httpResponse.getEntity(),"utf-8");
        System.out.println("responseResult:"+responseResult);

        String stateCode = JSON.parseObject(responseResult).getString("code");
        if(stateCode.equals("200")){
            return true;
        }
        return false;
    }
    
   
    
   
}

因為我們是通過網易的第三方驗證碼服務來實現,所以其中app_key和app_secret兩個屬性的值需要網易雲提供
http://netease.im/sms 我們登陸這個網站 註冊賬戶並登陸

建立應用,建立完成後,在下面未開通的服務中找到簡訊並申請免費試用,在最上方找到appkey管理,點進去後就有app key和app secret,將這兩個值複製到smsutil類中的屬性,點選簡訊管理模板跳轉後在點選驗證碼模板可以自定義簡訊格式,每個驗證碼模板都有對應的id,選擇一個複製到第一個程式sendCode方法的第二個引數中。

此時執行上面的第一個程式,手機就能收到驗證碼了。

2、下面我們通過驗證碼來實現網頁登陸功能
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>使用者登陸</title>
		<script type="text/javascript" src="./js/jquery-3.3.1.js"></script>
		<script type="text/javascript" >
			function sendcode(){
				var ajaxObject={
					url:"./SendcodeServlet",
					type:"GET",
					data:"phonenumber="+document.getElementById("phonenumber").value,
					dataType:"text",
					success:function(data){						
					}
				}
				$.ajax(ajaxObject);
			}
			
			function checkcode(){
				var ajaxObject={
					url:"./CheckcodeServlet",
					type:"GET",
					data:{phonenumber:document.getElementById("phonenumber").value,
						  checkword:document.getElementById("checkword").value
						 },
					dataType:"text",
					success:function(data){						
					}
				}
				$.ajax(ajaxObject);
			}
		</script>
	</head>
	<body>
			<input  id="phonenumber"  placeholder="請輸入手機號" value="" /><br />
			<input  id="checkword" placeholder="請輸入驗證碼" value="" />
			<button  onclick="sendcode()">傳送驗證碼</button><br />
			<button  onclick="checkcode()">提交</button>
	</body>
</html>

這是登陸頁面jsp的程式碼,其中有兩個函式,分別來實現傳送驗證碼和校驗驗證碼

package com.xt.userinfo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xt.send_checkcode.tool.SMSUtils;

/**
 * Servlet implementation class CheckServlet
 */
public class SendcodeServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String mobile = request.getParameter("phonenumber");
		System.out.println(mobile);
		if(SMSUtils.isMobile(mobile)){
			try {
				SMSUtils.sendCode(mobile,"3953566");//傳送驗證碼
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}


}

這是實現傳送驗證碼的servlet,它獲取到了登陸頁面上的手機號,並呼叫smsutils中的sendCode方法將手機號傳入,這樣就能將驗證碼傳送到手機了。

 

package com.xt.userinfo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xt.send_checkcode.tool.SMSUtils;

/**
 * Servlet implementation class CheckcodeServlet
 */
public class CheckcodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String code = request.getParameter("checkword");
		String mobile = request.getParameter("phonenumber");
		System.out.println(mobile);
		System.out.println(code);
		if(SMSUtils.verifyCode(mobile, code)) {
			System.out.println("success");
			request.getRequestDispatcher("/success.jsp").forward(request, response);
		}else {
			System.out.println("fail");
			request.getRequestDispatcher("/fail.jsp").forward(request, response);
		}
	}


}

這是實現驗證並登陸的servlet,它獲取到頁面上的手機號和你剛剛收到並輸入的驗證碼,再呼叫smsutils中的verify方法並將這兩個引數傳入,如果返回true就會登陸成功

相關推薦

java 實現傳送簡訊驗證()

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

java 實現傳送簡訊驗證功能

如何使用java + maven的專案環境傳送簡訊驗證碼,本文使用的是榛子云簡訊 的介面。 1. 安裝sdk 下載地址: http://smsow.zhenzikj.com/doc/sdk.html 下載下來是jar檔案,需要將jar釋出到本地的maven倉庫中, 在c

JAVA呼叫中國建介面實現傳送簡訊驗證

import java.io.UnsupportedEncodingException; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.Http

java後臺呼叫簡訊介面,實現傳送簡訊驗證的控制層實現

1.設計:使用者填寫手機號,點選獲取驗證碼按鈕,controller層獲得所要傳送驗證碼的手機號,隨機生成六位數的驗證碼。呼叫傳送簡訊介面url向此手機號傳送驗證碼。注意:下面的程式碼採用的是雲信使的簡訊驗證碼介面,不同的驗證碼更換不同的url格式,即可。 `

【原始碼分享】java實現對接簡訊驗證應用功能

今天公司提出一個需求,要在現有專案上收集註冊使用者的真實手機號,由於之前沒有接觸過這一塊,只能尋求度孃的幫助,經過一天的努力,終於完成了,現整理記錄下已備查閱。 1 解決方案:在註冊時要求使用者進行手機驗證。2 尋找簡訊供應商:由於對這一塊不是太懂,大學同學推薦一家他們公司在用的給我。3 程式碼實現 首先到

JAVA實現手機簡訊驗證

手機簡訊驗證碼介面來自於網易雲手機簡訊介面 package com.netease.code; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.H

js實現傳送簡訊驗證後60秒倒計時

1、input[type=‘button’]按鈕 js方法實現 <!DOCTYPE html> <html> <head> <script type="text/javascript"> var countdown=60;

Android開發實現傳送簡訊驗證(使用第三方伺服器Bmob)

呼叫Bmob第三方伺服器實現簡訊驗證的功能,大致思路如下: 隨機產生6位數字,然後呼叫Bmob的請求短髮函式傳送者六位數到伺服器,然後伺服器給指定手機發送這6位驗證碼,然後感覺使用者輸入的數字進行判斷

php傳送簡訊(呼叫實現

呼叫網易雲信,實現簡訊傳送 //網易雲信傳送簡訊 //http://dev.netease.im/docs?doc=server&#傳送模板簡訊 function yx_se

jQuery實現傳送簡訊驗證後60秒倒計時

var countdown=60; function sendemail(){ var obj = $("#btn"); settime(obj); } function settime(obj) { //傳送驗證碼倒計時

java實現傳送手機驗證功能

2. 註冊好之後,點選 使用者中心 -> 賬戶管理,就會進入如下介面 (順便提一下,新註冊的使用者,平臺會免費贈送你10元,足夠大家學習和使用了,所以不用擔心需要充錢)  你需要做的就是獲取你自己的 ACCOUNT SID 和 AUTH TOKEN 3. 需要

傳送簡訊驗證java實現

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

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

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

【Python web 開發】傳送簡訊驗證

傳送簡訊驗證碼 是要使用第三方服務的,運營商是不可能提供對外的個人傳送簡訊服務功能,我們本身也沒有能力去傳送驗證碼,雲片網是目前提供這種服務使用率較高的服務商之一 我們先來看下雲片網國內單條傳送簡訊的api    根據api 寫了一個指令碼,這個appkey 我還沒申請 如

轉:Java實現簡訊驗證(阿里服務商)

1.先去阿里雲開通簡訊服務: 2.新增模板及簽名:需要稽核,個人賬戶稽核就幾分鐘就OK 先解釋一下模板及簽名: 標準參照:https://help.aliyun.com/document_detail/55324.html?spm=5176.sms-sign.0

JS實現註冊登入傳送簡訊驗證動態顯示60S倒計時完整案例

通常在web專案中都會遇到賬戶註冊或者忘記密碼時需要傳送簡訊驗證碼的功能,雖然說這種功能很常見,但是實際開發過程中很多人還會遇到不少坑。筆者經過整理把最近專案中的用到的這個傳送簡訊驗證碼動態顯示60S倒計時的完整實現過程分享給廣大開發者朋友。 1、頁面傳送簡訊驗證碼的表

java整合阿里大於第三方平臺傳送簡訊驗證

閒話不多說,言歸正傳。今天我要分享的是利用阿里大魚實現網站和APP的簡訊驗證。 阿里大魚開放了很多的訊息通知服務,包括簡訊通知,語音通知等。 阿里大魚的簡訊傳送官方API:https://api.alidayu.com/doc2/apiDetail.htm?spm=a3142

java向手機號傳送簡訊驗證

需要下載這三個jar包   commons-logging-1.1.1.jarcommons-httpclient-3.1.jarcommons-codec-1.4.jar 點選sms註冊才可以用簡訊驗證碼 1.註冊完畢就需要登入 2.登入完畢需要檢視簡訊金鑰 &

用Laravel Sms實現 laravel簡訊驗證傳送

阿里雲簡訊服務 使用Laravel Sms這個擴充套件包實現簡訊驗證碼的傳送,這裡以阿里雲的簡訊服務為例: 首先,要建立簡訊簽名和簡訊模板,具體申請詳情如下, 接下來,需要建立AccessKey,由於AccessKey是訪問阿里雲API的金鑰,具有

PHP實現簡訊傳送簡訊驗證功能

簡訊驗證碼是隨機生成的幾位數字,將此數字儲存到資料庫中,傳送簡訊時將該數字 取出來放到下面程式碼填寫簡訊內容處,即可傳送。 注意要傳送的手機號,簡訊寶賬號、密碼,簡訊傳送內容等都要提前存放到資料庫中,下面程式碼中從資料庫中查詢。 <?php header("Cont