# 工具类函数
# setup
初始化 axios
,配置 axios
默认参数,简化使用。
axios.defaults.baseURL = SERVER_URL
# nonce
生成用于签名的 6 位随机数和毫秒时间戳。
//#region nonce
export default function genNonce() {
const nonce = `${Math.floor(100000 + Math.random() * 900000)}`
const timestamp = `${Math.floor(new Date().getTime() / 1000)}`
return { nonce, timestamp }
}
//#endregion nonce
# sign
使用 Open API 统一签名算法,生成签名。
function genSignature(params: Object, secret: string) {
let entries = Object.entries(params).sort()
const querystring = entries
.map(([key, value]) => {
return [key, encodeURIComponent(value)]
})
.map(([key, value]) => {
return `${key}=${value}`
})
.join('&')
const hmac = crypto.createHmac('sha1', secret)
hmac.update(querystring)
const signature = hmac.digest('base64')
return signature
}
type HTTPMethod = 'POST' | 'GET' | 'PUT' | 'DELETE'
export default function sign(
method: HTTPMethod,
path: string,
nonce: string,
timestamp: string
): string {
const appId = APPID
const signature = genSignature(
{
appId,
method,
nonce,
path,
timestamp,
},
APPSECRET
)
return signature
}
# authorization
按照约定规则,将请求签名和 APPID
拼接为请求头部 Authorization
字段的值。
export default function authorization(sign: string) {
return `${APPID}:${sign}`
}