創藍短信驗證碼接口相關內容?

短信驗證碼在各類App和網站中廣泛使用,這裡介紹一些技術對接中常用的接口以及相關實例為各位提供參考。

首先,預先提供短信模板,保證通道提供穩定服務,平臺進行內容審核,而後方能使用通用發送接口發短信,該接口能夠自動匹配已經審核通過的模板進行發送。調用模板發送接口時需要用POST或GET方式提交各類參數,如:tpl_id、tpl_value。在創藍技術平臺開發的接口包括:ASP,ASP.NET(C#),C(C++),GO,JAVA,PHP,PYTHON等,不同的接口語音中,在任意應用場景中,各類模板的使用方法基本類似,設置對應的模板id(tpl_id)和相關的變量值(tpl_value)即可。

以下專門挑出兩大常見短信驗證碼接口語言進行實例說明:

創藍短信驗證碼接口相關內容

方法/步驟

一、JAVA語言文檔

a) 短信接口

package com.bcloud.msg.http;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.net.URLDecoder;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpStatus;

import org.apache.commons.httpclient.NameValuePair;

import org.apache.commons.httpclient.URI;

import org.apache.commons.httpclient.methods.GetMethod;

/**

* @author Beyond

*/

public class HttpSender {

/**

*

* @param url 應用地址,類似於

* @param account 賬號

* @param pswd 密碼

* @param mobile 手機號碼,多個號碼使用","分割

* @param msg 短信內容

* @param needstatus 是否需要狀態報告,需要true,不需要false

* @return 返回值定義參見HTTP協議文檔

* @throws Exception

*/

public static String send(String url, String account, String pswd, String mobile, String msg,

boolean needstatus, String product, String extno) throws Exception {

HttpClient client = new HttpClient();

GetMethod method = new GetMethod();

try {

URI base = new URI(url, false);

method.setURI(new URI(base, "HttpSendSM", false));

method.setQueryString(new NameValuePair[] {

new NameValuePair("account", account),

new NameValuePair("pswd", pswd),

new NameValuePair("mobile", mobile),

new NameValuePair("needstatus", String.valueOf(needstatus)),

new NameValuePair("msg", msg),

new NameValuePair("product", product),

new NameValuePair("extno", extno),

});

int result = client.executeMethod(method);

if (result == HttpStatus.SC_OK) {

InputStream in = method.getResponseBodyAsStream();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

while ((len = in.read(buffer)) != -1) {

baos.write(buffer, 0, len);

}

return URLDecoder.decode(baos.toString(), "UTF-8");

} else {

throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText());

}

} finally {

method.releaseConnection();

}

}

/**

*

* @param url 應用地址,類似於

* @param account 賬號

* @param pswd 密碼

* @param mobile 手機號碼,多個號碼使用","分割

* @param msg 短信內容

* @param needstatus 是否需要狀態報告,需要true,不需要false

* @return 返回值定義參見HTTP協議文檔

* @throws Exception

*/

public static String batchSend(String url, String account, String pswd, String mobile, String msg,

boolean needstatus, String product, String extno) throws Exception {

HttpClient client = new HttpClient();

GetMethod method = new GetMethod();

try {

URI base = new URI(url, false);

method.setURI(new URI(base, "HttpBatchSendSM", false));

method.setQueryString(new NameValuePair[] {

new NameValuePair("account", account),

new NameValuePair("pswd", pswd),

new NameValuePair("mobile", mobile),

new NameValuePair("needstatus", String.valueOf(needstatus)),

new NameValuePair("msg", msg),

new NameValuePair("product", product),

new NameValuePair("extno", extno),

});

int result = client.executeMethod(method);

if (result == HttpStatus.SC_OK) {

InputStream in = method.getResponseBodyAsStream();

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

while ((len = in.read(buffer)) != -1) {

baos.write(buffer, 0, len);

}

return URLDecoder.decode(baos.toString(), "UTF-8");

} else {

throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText());

}

} finally {

method.releaseConnection();

}

}

}

b) 後臺示例

import com.bcloud.msg.http.HttpSender;

public class HttpSenderTest {

public static void main(String[] args) {

String url = ";;// 應用地址

String account = "詢問對接人";// 賬號

String pswd = "詢問對接人";// 密碼

String mobile = "13800210021,13800138000";// 手機號碼,多個號碼使用","分割

String msg = "親愛的用戶,您的驗證碼是123456,5分鐘內有效。";// 短信內容

boolean needstatus = true;// 是否需要狀態報告,需要true,不需要false

String product = null;// 產品ID

String extno = null;// 擴展碼

try {

String returnString = HttpSender.batchSend(url, account, pswd, mobile, msg, needstatus, product, extno);

System.out.println(returnString);

// TODO 處理返回值,參見HTTP協議文檔

} catch (Exception e) {

// TODO 處理異常

e.printStackTrace();

}

}

}

二、PHP語言文檔

a) 賬戶配置信息

/* *

* 配置文件

* 版本:1.2

* 日期:2014-07-16

* 說明:

* 以下代碼只是為了方便客戶測試而提供的樣例代碼,客戶可以根據自己網站的需要自行編寫,並非一定要使用該代碼。

* 該代碼僅供學習和研究接口使用,只是提供一個參考。

*/

//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

//創藍髮送短信接口URL, 如無必要,該參數可不用修改

$chuanglan_config['api_send_url'] = 'http://222.73.117.158/msg/HttpBatchSendSM';

//創藍短信餘額查詢接口URL, 如無必要,該參數可不用修改

$chuanglan_config['api_balance_query_url'] = ';;

//創藍賬號 替換成你自己的賬號

$chuanglan_config['api_account'] = 'jiekou-clcs-07';

//創藍密碼 替換成你自己的密碼

$chuanglan_config['api_password'] = 'Clwh2009';

//↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

?>

b) 短信接口

/* *

* 類名:ChuanglanSmsApi

* 功能:創藍接口請求類

* 詳細:構造創藍短信接口請求,獲取遠程HTTP數據

* 版本:1.3

* 日期:2014-07-16

* 說明:

* 以下代碼只是為了方便客戶測試而提供的樣例代碼,客戶可以根據自己網站的需要,按照技術文檔自行編寫,並非一定要使用該代碼。

* 該代碼僅供學習和研究創藍接口使用,只是提供一個參考。

*/

require_once("chuanglan_config.php");

class ChuanglanSmsApi {

/**

* 發送短信

*

* @param string $mobile 手機號碼

* @param string $msg 短信內容

* @param string $needstatus 是否需要狀態報告

* @param string $product 產品id,可選

* @param string $extno 擴展碼,可選

*/

public function sendSMS( $mobile, $msg, $needstatus = 'false', $product = '', $extno = '') {

global $chuanglan_config;

//創藍接口參數

$postArr = array (

'account' => $chuanglan_config['api_account'],

'pswd' => $chuanglan_config['api_password'],

'msg' => $msg,

'mobile' => $mobile,

'needstatus' => $needstatus,

'product' => $product,

'extno' => $extno

);

$result = $this->curlPost( $chuanglan_config['api_send_url'] , $postArr);

return $result;

}

/**

* 查詢額度

*

* 查詢地址

*/

public function queryBalance() {

global $chuanglan_config;

//查詢參數

$postArr = array (

'account' => $chuanglan_config['api_account'],

'pswd' => $chuanglan_config['api_password'],

);

$result = $this->curlPost($chuanglan_config['api_balance_query_url'], $postArr);

return $result;

}

/**

* 處理返回值

*

*/

public function execResult($result){

$result=preg_split("/[,\r\n]/",$result);

return $result;

}

/**

* 通過CURL發送HTTP請求

* @param string $url //請求URL

* @param array $postFields //請求參數

* @return mixed

*/

private function curlPost($url,$postFields){

$postFields = http_build_query($postFields);

$ch = curl_init ();

curl_setopt ( $ch, CURLOPT_POST, 1 );

curl_setopt ( $ch, CURLOPT_HEADER, 0 );

curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt ( $ch, CURLOPT_URL, $url );

curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields );

$result = curl_exec ( $ch );

curl_close ( $ch );

return $result;

}

//魔術獲取

public function __get($name){

return $this->$name;

}

//魔術設置

public function __set($name,$value){

$this->$name=$value;

}

}

?>

c) 平臺示例

/* *

* 功能:創藍髮送信息DEMO

* 版本:1.3

* 日期:2014-07-16

* 說明:

* 以下代碼只是為了方便客戶測試而提供的樣例代碼,客戶可以根據自己網站的需要,按照技術文檔自行編寫,並非一定要使用該代碼。

* 該代碼僅供學習和研究創藍接口使用,只是提供一個參考。

*/

require_once 'ChuanglanSmsHelper/ChuanglanSmsApi.php';

$clapi = new ChuanglanSmsApi();

$result = $clapi->sendSMS('18516590414', '您好,您的驗證碼是888888','true');

$result = $clapi->execResult($result);

if($result[1]==0){

echo '發送成功';

}else{

echo "發送失敗{$result[1]}";

}

var_dump($result);

任何短信接口都是基於其相應語言開發的協議,所有用同種語言開發的程序都可以調用這個接口發送短信,通過其短信接口傳遞參數至創藍短信的服務器,最終完成下發。其實短信接口測試之前,各位專業人士都明白,影響短信驗證碼速度和到達率的因素包含三個方面:

第一,機房的網絡構架。IDG機房的質量參差不齊,從創藍以往選擇機房的經驗來說,上海最好機房是目前我們所在的南匯機房。驗證碼是個持續不斷的長期技術活,服務器的運轉1分鐘都不能斷,如若服務商採用五星機房,配合BGP網絡,自動識別用戶提交短信的網絡,再將移動號碼分包到移動機房,再提交到移動網關,電信號碼分包到電信機房,再提交到電信網關,這就解決了短信timeout的問題,保證驗證碼的到達率。同時,在多個重點城市進行中心機房布點,備份兩條以上的鏈路,集群模式服務,防止任何時間的中斷,保證驗證碼在任何一分鐘都不會因為網絡而出現延遲或者收不到。

第二,平臺的發送機制的問題。若大家都是做App項目的,關於如何解決大批量延遲問題,都很好理解,對於事實發送創藍採用:一,內存數據庫技術,HASH散列存儲,並採用二級索引進行快速排序,查找;二,在實時處理的信息時,按照大數概率和正態分佈控制實時內存窗口,提高實時短信發送效率;第三,對於低優先級的數據,按照權重進行發送流速均衡分配;第四,短信流控採用令牌獲取機制,做到原子操作,實現流速精確均衡控制。

第三,通道的帶寬問題。10690時代,短信的通道資源非常珍貴。一家企業,註冊資金1000萬,只能申請1跟通道,並且從申請到能用的週期很長,超過2年。一根通道的流速上限是1000,也就是說一根通道每小時的發送量是360萬,創藍在單根通道上面的使用率控制在1/30,也就是一個通道,每個小時走的短信不會超過12萬條,這樣放的量越小,通道的壓力越小。同時,為了保證驗證碼不斷流,對每一位合作用戶都採取雙通道備份。這樣以來,大大的提高了驗證碼的穩定性。

最後,由於端口的碼號越短,質量越高,給用戶使用的都是11位短碼,也就是一個手機號的長度。降低了360等軟件的攔截概率,也避免了各省運營商之間的相互屏蔽機制。從而在通道層面保證了短信的速度和成功率。

相關問題答案