簽名生成規則
更新時間:2024-10-21 09:33:43
取得 userId、appId、appSecret 關鍵資訊,詳見取得開發金鑰,
appSecret 金鑰用於生成簽名,作為通訊資料安全的關鍵資訊,嚴禁儲存在用戶端直接使用,所有 API 都必須透過客戶自己的伺服器中轉呼叫 POLYV 伺服器取得回應資料採用 MD5 簽名演算法生成簽名,具體加密計算方法如下:
2.1 將請求所需參數(參數值非空的參數)按照參數名字典順序排列,連接參數名與參數值,例如:ts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1;
2.2 並在拼接字串首尾加上 appSecret,以 appSecret 為 abc 為例,得到:abcts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1abc
2.3 然後採用 UTF-8 編碼計算 MD5,將 MD5 結果轉為大寫字母,作為 sign;
常見問題:
字串拼接時沒有將參數值為 null 的參數剔除;
簽名自用字元集必須為 UTF-8,若不指定,可能採用平台預設字元集,導致錯誤;
快速接入基礎程式碼請下載相關依賴原始碼, 點擊下載原始碼,下載後加入自己的原始碼工程中即可。測試案例中的 HttpUtil.java 和 LiveSignUtil.java 都包含在下載檔案中。
package net.polyv.common;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.polyv.util.LiveSignUtil;
/**
* @author: thomas
**/
public class LiveSignTest {
private static final Logger log = LoggerFactory.getLogger(LiveSignTest.class);
@Test
public void buildSign() throws UnsupportedEncodingException, NoSuchAlgorithmException {
String appId = "XXXXXXXX";
String userId = "XXXXXXXX";
String appSecret = "XXXXXXXXXXXXXXXXXXXXXXXX";
long timestamp = System.currentTimeMillis();
Map<String, String> paramMap = new HashMap<String, String>();
//公共参数
paramMap.put("appId", appId);
paramMap.put("timestamp", Long.toString(timestamp));
//业务参数
paramMap.put("lessonId","2149813");
String sign = LiveSignUtil.getSign(paramMap, appSecret);
log.debug("生成签名:{}",sign);
}
}
