[ Node | koa2 ] 喜馬拉雅JSSDK簽名服務

[ node | koa2 ] 喜馬拉雅JSSDK簽名服務

Github項目
支持sdk版本: @xmly-fem/web-jssdk v1.1.1
服務端 Node 版本:v10.16.0

喜馬拉雅web-jssdk相關文檔

配置

在 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)
  })
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章