平臺對接
V5驗證前后端對接流程如下圖所示:
前后端調用時序圖
對接V5驗證分為業務網站后臺api對接以及業務前端代碼引入兩部分。
業務網站后臺
獲取驗證Token及驗證服務器(getToken)
用于網站后臺定時通過V5控制臺刷新獲取驗證所需要的Token及驗證服務器地址。Token有效期為24小時。
請求方式:GET
調用示例:
curl -X GET 'https://{host}/openapi/getToken?appid=dff58e0476e34b5899d4027733f8c14b×tamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68'
Request入參說明:
參數名
說明
示例
appid
當前網站應用對應的App Id
dff58e0476e34b5899d4027733f8c14b
timestamp
當前提交時的Unix時間戳,即北京時間1970-1-1 0:0:0到現在經過的毫秒數
1564220208945
signature
當前提交時的簽名。詳細見簽名規則
6c8e8e38d11dddb08d5b5a8fc750db68'
Response返回格式:
{
"success": true,//請求是否成功標識
"data": {??????????????//請求返回的消息體,詳細以下列表說明
"expiresIn": "86400000",
"token": "e3e3d5d1aa4445e9bdde0bdb7eac37d6"
}
}
返回參數說明:
參數名
說明
示例
token
返回當前有效的token
e3e3d5d1aa4445e9bdde0bdb7eac37d6
expiresIn
token有效時長單位毫秒
86400000'
獲取驗證結果(verify)
在前端完成驗證后,業務網站后臺向V5驗證服務器調用接口獲取驗證結果。驗證結果最長保留5分鐘,在業務網站后臺成功獲取結果后立即刪除。
請求方式:GET
調用示例:
curl -X GET 'https://{host}/openapi/verify?&verifyid=ee92ede662aa43c3a68c2a369fa19c70&token=644112d89ac54bac97cee06d42e2137c×tamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68'
Request入參說明:
參數名
說明
示例
host
驗證節點域名
xxxx.verify5.com
verifyid
前端驗證時返回的票據,由前端驗證后返回
ee92ede662aa43c3a68c2a369fa19c70
token
當前有效的token
644112d89ac54bac97cee06d42e2137c
timestamp
當前提交時的Unix時間戳,即北京時間1970-1-1 0:0:0到現在經過的毫秒數
1564220208945
signature
當前提交時的簽名。詳細見簽名規則
注:host不參與簽名
6c8e8e38d11dddb08d5b5a8fc750db68
Response返回格式:
{
"success": true,//請求是否成功或失敗標識,true/false
}
前端對接
Web前端
1. 引入JS
在需要進行V5驗證的頁面,引入v5.js:
2. 樣式表
默認情況下,v5.js會檢測當前頁面環境并自動植入v5.css,開發者也可手動在頁面植入css代碼樣式表:
3. JS API校驗
var v5=new com.strato.Verify5({//每次驗證都要創建新的Verify5實例
host:"Host",//從后臺getToken接口獲得
token:"(Token)"//從后臺getToken接口獲得
});
v5.on("CANCEL",function(){
//當用戶取消驗證時觸發
});
v5.verify(function(result){
var success=result.success;
if(success){
var verifyId=result.verifyId;
//TODO 將verifyId提交到應用服務器請求二次驗證
}
});
4. npm引入方式
npm install verify5-html --save
import Verify5 from 'verify5-html'
let v5=new Verify5({//每次驗證都要創建新的Verify5實例
host:"Host",//從后臺getToken接口獲得
token:"(Token)"//從后臺getToken接口獲得
};
v5.on("CANCEL",function(){
//當用戶取消驗證時觸發
});
v5.verify(function(result){
var success=result.success;
if(success){
var verifyId=result.verifyId;
//TODO 將verifyId提交到應用服務器請求二次驗證
}
});
5. Data API校驗
V5支持通過自定義屬性v5-config自動初始化UI控件。語法為:
v5.js會在頁面加載完成后自動生成驗證按鈕組件,如下圖效果:
當用戶點擊按鈕并驗證通過時,會自動在div內生成hidden input:
其中,{name}為v5-config中傳入的name(示例中為 "v5" ),{verifyId}為控件自動生成的唯一通過碼,該字段需同業務表單一起提交至后臺,并提交到驗證服務器進行二次驗證。
簽名規則
簽名生成方法如下:
對所有請求參數(包括公有參數和私有參數,但不包括 signature 參數),按照參數名ASCII碼表升序順序排序。如:foo=1f, bar=2B, foo_bar=3FB, baz=4baz 排序后的順序是 bar=2B, baz=4baz, foo=1f, foobar=3FB。
將排序好的參數名和參數值構造成字符串,格式為:key1value1key2value2… 。根據上面的示例得到的構造結果為:bar2Bbaz4bazfoo1ffoobar3FB 。
選擇與 appid 配對的 appkey ,加到上一步構造好的參數字符串之后,如 app=6308afb129ea00301bd7c79621d07591 ,則最后的參數字符串為:bar2Bbaz4bazfoo1ffoobar3FB6308afb129ea00301bd7c79621d07591。
把第3步拼裝好的字符串采用 utf-8 編碼,使用 MD5 算法對字符串進行摘要,計算得到 signature 參數值,將其加入到接口請求參數中即可。MD5 是128位長度的摘要算法,用16進制表示,一個十六進制的字符能表示4個位,所以簽名后的字符串長度固定為32位十六進制字符(小寫)。
簽名生成示例代碼(java):
/**
* 生成簽名信息
* @paramappKey產品私鑰
* @param params 接口請求參數名和參數值map,不包括signature參數名
* @return
*/
public static String genSignature(String appKey, Mapparams){
// 1. 參數名按照ASCII碼表升序排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 2. 按照排序拼接參數名與參數值
StringBuilder sb = newStringBuilder();
for (String key : keys) {
sb.append(key).append(params.get(key));
}
// 3. 將secretKey拼接到最后
sb.append(appKey);
// 4. MD5是128位長度的摘要算法,轉換為十六進制之后長度為32字符
return DigestUtils.md5Hex(sb.toString().getBytes("UTF-8"));
}
API接口一覽
/openapi/getToken
該接口用于網站后臺定時通過V5控制臺刷新獲取驗證所需要的Token及驗證服務器地址。Token有效期為24小時。
請求方式:GET
調用示例:
curl -X GET 'https://{host}/openapi/getToken?appid=dff58e0476e34b5899d4027733f8c14b×tamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68'
Request入參說明:
參數名
說明
示例
appid
當前網站應用對應的App Id
dff58e0476e34b5899d4027733f8c14b
timestamp
當前提交時的Unix時間戳,即北京時間1970-1-1 0:0:0到現在經過的毫秒數
1564220208945
signature
當前提交時的簽名。詳細見簽名規則
6c8e8e38d11dddb08d5b5a8fc750db68
Response返回格式:
{
"success": true,//請求是否成功標識
"data": {????????//請求返回的消息體,詳細以下列表說明
"expiresIn": "86400000",
"token": "e3e3d5d1aa4445e9bdde0bdb7eac37d6"
}
}
返回參數說明:
參數名
說明
示例
token
返回當前有效的token
e3e3d5d1aa4445e9bdde0bdb7eac37d6
expiresIn
token有效時長單位毫秒
86400000
/openapi/verify
獲取驗證結果。在前端完成驗證后,業務網站后臺向V5驗證服務器調用接口獲取驗證結果。驗證結果最長保留5分鐘,在業務網站后臺成功獲取結果后立即刪除。
請求方式:GET
調用示例:
curl -X GET 'https://{host}/openapi/verify?&verifyid=ee92ede662aa43c3a68c2a369fa19c70&token=644112d89ac54bac97cee06d42e2137c×tamp=1564220208945&signature=6c8e8e38d11dddb08d5b5a8fc750db68'
Request入參說明:
參數名
說明
示例
host
驗證節點域名
xxxx.verify5.com
verifyid
前端驗證時返回的票據,由前端驗證后返回
ee92ede662aa43c3a68c2a369fa19c70
token
當前有效的token
644112d89ac54bac97cee06d42e2137c
timestamp
當前提交時的Unix時間戳,即北京時間1970-1-1 0:0:0到現在經過的毫秒數
1564220208945
signature
當前提交時的簽名。詳細見簽名規則
注:host不參與簽名
6c8e8e38d11dddb08d5b5a8fc750db68'
Response返回格式:
{
"success": true,//請求是否成功或失敗標識,true/false
}
JS方法一覽
class com.strato.Verify5(Object config)
v5構造函數,config參數包括:
ssl:boolean值,可以是true或者false,可不傳,生產環境下默認為true。
host:即應用中的域名host
token:應用令牌,由服務端調用API(/openapi/getToken)獲得
void on(String eventName,Function callback)事件監聽。
eventName包括:
CANCEL:用戶取消校驗
DESTROY:控件控件銷毀(當校驗成功、取消、失敗時均會觸發,可用作校驗結束標記)。
void verify(Function callback)
喚起校驗窗口,當成功后觸發callback。
callback接收result參數,包含兩個屬性:
success:校驗是否通過
verifyId:校驗通過后返回的唯一通過碼
static com.strato.verify5.v5Field $(String id)
根據 id獲取data api的對象實例,例如:
var field=com.strato.Verify5.$(" v5container" );
class com.strato.Verify5.v5Field()
data api的控件構造函數,一般無需手動實例化,可通過com.strato.Verify5.$方法獲得對應的實例。
String getValue()
得到控件的校驗結果(verifyId)
com.strato.Verify5 getVerify5()
得到對應的v5實例。
Android
待補充
Ios
待補充
小程序
待補充