[ node | koa2 ] 喜馬拉雅JSSDK簽名服務
Github項目
支持sdk版本: @xmly-fem/web-jssdk v1.1.1
服務端 Node 版本:v10.16.0
配置
在 config.js 中配置 app_secret (在喜馬拉雅開發平臺-管理中心-應用中心-網頁應用中查看)
module.exports = {
app_secret: ''
}
簽名路由源碼
router.post('/signature', async (ctx, next) => {
let { params } = ctx.request.body
params = JSON.parse(params)
let list = []
// 按照 key 字典排序
Object.keys(params)
.sort()
.forEach(key => {
list.push([key, params[key]])
})
// 將排序後的參數鍵值對用&拼接,即拼接成key1=val1&key2=val2&...
const search = new URLSearchParams(list).toString()
console.log('[search]', search)
// 將上一步得到的字符串進行 Base64 編碼(注意 Base64 編碼時要設置字符集爲 utf8),假設 Base64 編碼後的字符串爲 base64EncodedStr;
const base64 = Buffer.from(search, 'utf8').toString('base64')
console.log('[base64]', base64)
// 用 app_secret 作爲 HMAC-SHA1 哈希 key(即sha1Key),使用 sha1Key 對base64EncodedStr 進行 HMAC-SHA1 哈希得到字節數組(注意是字節數組,不要轉成十六進制字符串,否則簽名計算會出錯;一般的 HMAC-SHA1 算法得到的結果是字節數組的十六進制表示,請務必留意這裏和一般情況不太一樣)
const hmac = crypto.createHmac('sha1', config.app_secret)
hmac.update(base64)
const sha1ResultBytes = hmac.digest()
console.log('[sha1]', sha1ResultBytes)
// 對上面得到的 sha1ResultBytes 進行 MD5 得到 32 位字符串,即爲 sig
const md5 = crypto.createHash('md5')
const signature = md5.update(sha1ResultBytes).digest('hex')
console.log('[md5]', signature)
ctx.body = { code: 0, message: '', signature }
})
本地開發
啓動腳本
npm run dev
or yarn run dev
默認端口3111
網頁端
添加 @xmly-fem/web-jssdk 依賴
import { config, XMLY } from '@xmly-fem/web-jssdk'
config({
app_key: '', // 必傳,根據實際情況填寫
sig_url: '//localhost:3111/signature', // 必傳
device_id: 'dasffasddafs12345', // 必傳
timeout: 10 * 1000,
debug: true
})
const xmly = new XMLY()
// 獲取分類列表
xmly
.getCategories()
.then(({ code, data }) => {
if (code === 0) {
console.log(data)
}
})
.catch(error => {
console.log(error)
})