1. 程式人生 > >阿里雲簡訊服務(傳送簡訊驗證碼)

阿里雲簡訊服務(傳送簡訊驗證碼)

//阿里雲簡訊的jar包
        <!--阿里雲簡訊 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-cms</artifactId>
            <version>5.0.4</version>
        </dependency>

程式碼入下:

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 傳送簡訊相關工具
 *
 * @author Ray & 
[email protected]
& http://github.com/coffeefoam * @(#)Supplier.java 1.0 08/07/2016 */ public class MessageUtils { /** * 傳送簡訊訊息方法,返回驗證碼 * * @param phone * @return */ public static String sendMsg(String phone) throws Exception { //設定超時時間-可自行調整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); //初始化ascClient需要的幾個引數 final String product = "Dysmsapi";//簡訊API產品名稱(簡訊產品名固定,無需修改) final String domain = "dysmsapi.aliyuncs.com";//簡訊API產品域名(介面地址固定,無需修改) //替換成你的AK String access = PropertiesUtil.getValue("aliyun_access_key_id");//這裡是讀取properties工具類,我把變數寫到配置檔案類裡了 String secret = PropertiesUtil.getValue("aliyun_access_key_secret"); final String accessKeyId = access;//你的accessKeyId,參考本文件步驟2 final String accessKeySecret = secret;//你的accessKeySecret,參考本文件步驟2 //初始化ascClient,暫時不支援多region(請勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); //組裝請求物件 SendSmsRequest request = new SendSmsRequest(); //使用post提交 request.setMethod(MethodType.POST); //必填:待發送手機號。支援以逗號分隔的形式進行批量呼叫,批量上限為1000個手機號碼,批量呼叫相對於單條呼叫及時性稍有延遲,驗證碼型別的簡訊推薦使用單條呼叫的方式 request.setPhoneNumbers(phone); //必填:簡訊簽名-可在簡訊控制檯中找到 request.setSignName("卓慧教育雲"); //必填:簡訊模板-可在簡訊控制檯中找到 request.setTemplateCode("SMS_121857177"); String checkCode = CoreUtils.randomString(6, true);//此處是生成6位數驗證碼工具類 //request.setTemplateParam("{\"code\":\"123\"}");//測試用,此處json一定要嚴格按照json格式書寫 request.setTemplateParam("{\"code\":\""+checkCode+"\"}"); //可選-上行簡訊擴充套件碼(擴充套件碼欄位控制在7位或以下,無特殊需求使用者請忽略此欄位) //request.setSmsUpExtendCode("90997"); //可選:outId為提供給業務方擴充套件欄位,最終在簡訊回執訊息中將此值帶回給呼叫者 request.setOutId("yourOutId"); //請求失敗這裡會拋ClientException異常 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { //請求成功 System.out.println(sendSmsResponse.getCode()); return checkCode; } return null; } //測試傳送簡訊 @Test public void test1() throws Exception { String s = this.sendMsg("17191085645");//手機號 System.out.println(s); } }
讀取properties工具類
import java.io.IOException;
import java.util.Properties;

public class PropertiesUtil {
    private static Properties p = new Properties();

    /**
     * 讀取properties配置檔案資訊
     */
    static{
        try {
            p.load(PropertiesUtil.class.getClassLoader().getResourceAsStream("global.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 根據key得到value的值
     */
    public static String getValue(String key)
    {
        return p.getProperty(key);
    }
}
生成隨機驗證碼工具類
import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.Random;

/**
 * 關於字串和日期相關的工具
 *
 * @author Ray & [email protected] & http://github.com/coffeefoam
 * @(#)CoreUtils.java 1.0 06/08/2017
 */
public class CoreUtils {
    /**
     * 生成隨機字串
     *
     * @param length
     * @return
     */
    public static String randomString(int length, boolean isNumeric) {
        String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        if (isNumeric) {
            base = "0123456789";
        }

        Random random = new Random();
        StringBuffer buffer = new StringBuffer(length);
        for (int i = 0; i < length; i++) {
            buffer.append(base.charAt(random.nextInt(base.length())));
        }

        return buffer.toString();
    }

    /**
     * 不重複的引數進行拼裝,返回查詢條件字串
     *
     * @param parameters 引數map
     * @param sort       是否按照字典排序
     * @return
     */
    public static String generateQueryString(Map<String, Object> parameters, boolean sort) {
        ArrayList<String> list = new ArrayList<String>();
        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
            // log.debug("引數:{}", entry.getKey());
            if (!"".equals(entry.getValue())) {
                list.add(entry.getKey() + "=" + entry.getValue());
            }
        }

        String[] arrayToSort = list.toArray(new String[list.size()]);
        if (sort) {
            Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
        }
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < list.size(); i++) {
            buffer.append(arrayToSort[i]);
            if (i < (list.size() - 1)) {
                buffer.append("&");
            }
        }
        return buffer.toString();
    }

    /**
     * 根據引數獲得相關簽名
     *
     * @param params  加密引數,ASCII 碼從小到大排序(字典序)
     * @param encrypt 加密方式 SHA1 MD5
     * @return
     */
    public static String signature(String buffer, String encrypt, boolean toUpperCase) {
        String sign = "";

        if ("MD5".equals(encrypt)) {
            // MD5加密
            sign = Hashing.md5().hashString(buffer, Charsets.UTF_8).toString();
        } else if ("SHA1".equals(encrypt)) {
            // SHA1加密
            sign = Hashing.sha1().hashString(buffer, Charsets.UTF_8).toString();
        }

        if (toUpperCase) {
            sign = sign.toUpperCase();
        }

        return sign;
    }

    /**
     * 根據引數獲得相關簽名
     *
     * @param params  加密引數,ASCII 碼從小到大排序(字典序)
     * @param encrypt 加密方式 SHA1 MD5
     * @return
     */
    public static String signature(Map params, String encrypt, boolean toUpperCase) {
        String sign = "";
        // 拼接字串,按照字典排序
        String buffer = generateQueryString(params, true);

        // log.debug("待加密的字串 => {}", buffer.toString());
        if ("MD5".equals(encrypt)) {
            // MD5加密
            sign = Hashing.md5().hashString(buffer, Charsets.UTF_8).toString();
        } else if ("SHA1".equals(encrypt)) {
            // SHA1加密
            sign = Hashing.sha1().hashString(buffer, Charsets.UTF_8).toString();
        }
        // log.debug("加密後的字串 <=> {}", sign);

        if (toUpperCase) {
            sign = sign.toUpperCase();
        }

        return sign;
    }



相關推薦

阿里簡訊服務傳送簡訊驗證

//阿里雲簡訊的jar包 <!--阿里雲簡訊 --> <dependency> <groupId>com.aliyun</groupId> <

阿里 簡訊服務程式碼編寫及使用

1. 引入依賴 pom.xml 檔案 <!-- aliyun簡訊服務API介面依賴的SDK --> <dependency> <groupId>com.aliyun</groupId>

Maven 依賴-映象倉庫替換為 -- 阿里映象倉庫飛快實現 pom 引入

在本地 maven 的 setting 配置檔案中加上阿里雲映象地址就行了:新增配置內容: <!-- 阿里映象倉庫 --> <mirrors> <m

java搭建阿里伺服器環境java環境+mysql+tomcat和部署 JavaWeb 專案到伺服器十分詳細

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。購買一系列的東西其實就是花錢買塊區域,伺服器,域名,雲解析,花了好多money。。。一、租伺服器百度搜索阿里雲進入官網首頁,點選登入進入登入頁面,可以使用郵箱登入或者註冊

阿里ecs伺服器linux之centos系統安裝除錯nginx

購買阿里雲ecs伺服器例項 由於這裡只是測試,我們就隨便買一個(當然我就選最便宜的了,這裡的搶佔式例項測試完可以直接釋放) 選擇

註冊登入設計圖片驗證

圖片驗證碼的實現 (註冊、下單、支付均有涉及) 1. 目的: 1) 驗證操作者是否是人,不是機器。 2) 防止表單重複提交。每次提交要判斷驗證碼的正確與否 生成驗證碼的要點: 1) 使用java程式碼生成圖片物件 2) 使用Random生成隨機字串 3) 將圖片物件用 Imag

Django PIL模組生成隨機驗證

PIL簡介 什麼是PIL PIL:是Python Image Library的縮寫,影象處理的模組。主要的類包括Image,ImageFont,ImageDraw,ImageFilter PIL的匯入 首先需要安裝一下pillow包

HP限制發送驗證條數防刷驗證

$_server tar ssa 需要 多賬號 路徑 num 驗證碼 clas 因為項目原因,最近在頻繁接觸短信驗證這一功能,前幾天剛接入了短信驗證碼的接口,現在又要準備做一個新功能上去,為了防止被刷,需要增加一個新的限制,限制每天用戶獲取驗證碼的條數。接入的接口是互億無線

模擬登陸之豆瓣手動輸入驗證

from lxml import etree import requests from PIL import Image session=requests.session() def get_html(url,uname,password,zym,va): t

驗證實現方式-------js實現驗證

一.js實現驗證碼: 第一步:建一個login.htm,一個code.js檔案,一個code.css檔案,準備一張圖片code.jpg 第二步:編寫login.htm檔案,內容為: <html>     <head>     <script

Python爬蟲學習4:requests.post模擬登入豆瓣包括獲取驗證

1.  在豆瓣登入網頁嘗試登入後開啟開發者工具,可以查詢後去Headers和Form Data資訊。2. 實現程式碼import requests import html5lib import re from bs4 import BeautifulSoup s = re

點選圖片,圖片src重新載入用於圖片驗證

效果圖: 後臺給的連結直接插入html中img的src裡,點選圖片重新載入這個src因為src的內容一直不變,比如都是 src="http://www.xxx.com/xxx/get?tocken

如何接入阿里簡訊服務 完整指南

目錄 一、註冊並實名認證 二、開通簡訊服務 三、獲取AccessKey 四、設定簡訊內容 五、配置簡訊介面 六、傳送簡訊 七、常見問題FAQ 一、註冊並實名認證 使用阿里雲簡訊服務,使用者需要先在阿里雲註冊,並完成個人/企業實名認證。 注意:要傳送營

阿里簡訊服務JAVA

一,前言 ​ 簡訊驗證碼想必大家都不陌生,在很多網站,APP中都有使用到。比如登入,註冊,身份校驗等場景。不過通常情況下,簡訊服務都是外包給第三方公司的,接下來向大家分享如何使用阿里的簡訊服務。 二,雲通訊 ​ 阿里雲官網:https://www.aliyun.com/ ​ 忘記說了,沒有賬號的可以直接使用阿

javaweb使用JSON格式利用之訊平臺傳送簡訊單條

package foreiger.utils; import net.sf.json.JSONObject; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; im

TP5呼叫阿里簡訊介面實現傳送簡訊功能

因為專案中需要用到阿里雲簡訊驗證碼功能,所以就購買了相應的簡訊包進行測試,以下就是完整程式碼: use Aliyun\Core\Config; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\Defau

繼百度天工物可視之後,阿里Link Develop提供WEB視覺化搭建服務手機瀏覽請橫向

        小邁閘道器最近對接了阿里的Link Develop平臺,並在實際專案中得到應用,阿里雲在平臺側推出了快速web應用,進一步降低了WEB應用的門檻。簡介如下:         Web 應用即完整的基於瀏覽器展示的網頁程式: 在Web端體現為獨立部署的一整

阿里容器服務Kubernetes之Jenkins X1-安裝部署實踐篇

摘要: "Jenkins X is a CI/CD solution for modern cloud applications on Kubernetes." 這是Jenkins社群對於Jenkins X 的官方總結和定義。 本文的部署實踐過程參考了雲棲文章 如何在阿里雲

阿里證書服務使用教程下篇

產品優勢:雲盾證書服務具有以下優勢:簡潔性貼合阿里雲使用者購買習慣,提供簡潔的證書購買流程。安全性提供安全的證書和金鑰儲存方案,免去尋找其他金鑰儲存方案的煩惱。易用性和阿里雲產品聯通,實現一鍵部署數字證書到阿里雲產品。名詞解釋:數字證書數字證書是一個經證書授權中心數字簽名的包

阿裏服務器連接ftp服務軟件的使用

直接 雲服務 text mini 服務器 窗口 clas 技術分享 軟件 首先你需要有一個阿裏雲的ECS服務器 開通了寬帶之後,ECS服務器就可以上網了 可以在本地電腦cmd控制臺運行mstsc.exe啟動遠程桌面連接 windows+R 計算機名輸入ECS服務器的公網