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