伯索开放平台
首页API文档SDK文档伯索官网
首页API文档SDK文档伯索官网
  1. SDK帮助文档
  • 快速入门
    • SDK简介
      • SDK简介
    • SDK支持的业务场景
      • SDK支持的业务场景
    • 产品特色
      • 产品特色
  • 产品指南
    • 实时课堂功能介绍
      • 实时课堂功能介绍
    • 微课功能介绍
      • 微课功能介绍
    • 作业批改功能介绍
      • 作业批改功能介绍
    • 上传课件功能介绍
      • 上传课件功能介绍
    • SDK后台功能介绍
      • SDK后台功能介绍
  • 最佳实践
    • 最佳实践
  • 接入流程说明
    • SDK对接标准流程说明
      • SDK对接标准流程说明
    • 基础概念说明
      • 基础概念说明
  • SDK帮助文档
    • 直播SDK接入
      • WEB版本
        • WEB版本
      • iOS版本
        • IOS版本
      • Android版本
        • Android版本
    • 微课SDK接入
      • WEB版本
        • WEB版本
      • iOS版本
        • IOS版本
      • Android版本
        • Android版本
    • 批注SDK接入
      • Web版本
        • Web版本
      • iOS版本
        • IOS版本
      • Android版本
        • Android版本
    • 签名加密
      • 签名加密
    • 回调接口接入流程
      • 回调接口接入流程
    • 文档解析接入方式
      • 文档解析接入方式
    • 历史课堂接入方式
      • 历史课堂接入方式
    • 历史课堂转视频接入方式
      • 历史课堂转视频接入方式
    • 历史课堂/微课下载接口
      • 历史课堂/微课下载接口
  • Open API帮助文档
    • Open API 主要功能
    • Open API集成常用场景
    • 数据字典
    • 接入须知
      • 调用流程
      • 在线调试
      • 通用错误码
    • 用户信息管理
      • 添加用户
      • 修改密码
      • 删除用户
      • 更新用户
      • 用户精确查询
      • 查询多个用户
      • 用户访问Token
      • 验证用户Token有效期
    • 教材包管理
      • 查询机构教材包
      • 查询教材包内教材
      • 向学生分发教材包
    • 实时课堂管理
      • 创建实时课堂
      • 创建实时课堂(班)
      • 更新实时课堂
      • 更新实时课堂(班)
      • 删除实时课堂
      • 查询实时课堂列表
      • 更新实时课堂下听众用户
      • 获取实时课堂监控地址
      • 控制单个学员是否可以回看单次课
      • 获取单个课堂的回看地址
      • 删除单个历史课堂
      • 获取课堂考勤数据
      • 获取历史课堂信息
      • 获取历史课堂观看数据
      • 获取课堂互动信息
    • 班级管理
      • 创建班级
      • 更新班级
      • 删除班级
      • 查询班级列表
      • 向班级中添加学生
      • 从班级中移除学生
      • 更换学生所在班级
      • 老师列表中查询机构分校学科
    • 学情数据
      • 获取学生课堂明细数据
      • 获取学生巩固明细数据
      • 获取学生测验明细数据
      • 获取学生辅导明细数据
      • 获取学生积分明细数据
    • 商城管理
      • 获取商品详情
      • 获取商品列表
      • 获取分校自定义商品栏目列表
      • 订单查询
      • 订单详情查询
    • 作业管理
      • 查询学生作业列表
      • 查询老师作业列表
    • 测验管理
      • 查询机构测评列表
      • 获取测评统计
      • 查询机构测验列表
      • 获取测验明细
  • 产品更新记录
    • Open API 更新日志
    • SDK 更新日志
  • 常见问题
    • PPT制作事项
    • 课件常见问题与解决方法
    • 网络相关问题
    • 声音相关问题
    • 网络测速
  • 推荐
    • 浏览器推荐
    • 常见软件推荐
    • 教育硬件推荐
  1. SDK帮助文档

签名加密

客户的账号资源是属于客户的财产,为了防止盗用,我们在此约定,传递的数据除定义的业务参数外,还需要统一增加签名验证参数,这是签名专属的安全字段:
名称类型定义
appIdString在申请接入时,伯索平台给予的appId
validBeginNumber请求开始生效起始时间的Unix Epoch 时间戳,单位秒
validTimeNumber请求有效时间段,单位秒
signatureString需要计算得出的签名值,服务端会比对验证URL合法性
签名规则:签名过程是将业务参数以 参数名称=参数值 的形式按照 参数名称 的字⺟表升序排序,并⽤ & 拼接, 然后⽤ HMAC-sha1 签名并以 Hex 格式输出 signature 值,再把全部字母转为大写的 signature 和其他参数一起提交到开放平台。
JS示例代码
PHP示例代码
<?php
/** 伯索签名函数 */
function plaso_sign($str, $key) {
    $signature = "";
    if (function_exists('hash_hmac')) {
        $signature = hash_hmac("sha1", $str, $key, false);
    } else {
        $blocksize = 64;
        $hashfunc = 'sha1';
        if (strlen($key) > $blocksize) {
            $key = pack('H*', $hashfunc($key));
        }
        $key = str_pad($key, $blocksize, chr(0x00));
        $ipad = str_repeat(chr(0x36), $blocksize);
        $opad = str_repeat(chr(0x5c), $blocksize);
        $hmac = pack(
            'H*', $hashfunc(
                ($key ^ $opad) . pack(
                    'H*', $hashfunc(
                        ($key ^ $ipad) . $str
                    )
                )
            )
        );
        $signature = bin2hex($hmac);
    }
    return strtoupper($signature);
}
/** 此处参与签名的参数按照字⺟表升序排序  */
$strParam = "name=test测试&phone=1234567890&validBegin=1&validTime=60";
$signKey = "a_secret";
echo(plaso_sign( $strParam, $signKey));
?>
Python示例代码
#!/usr/bin/env python3.6
import hashlib
import hmac
import time
import math

# 签名方法
def plaso_sign(message, key):
    # 签名的两个参数使用UTF-8转为字节
    key = bytes(key, 'UTF-8')
    message = bytes(message, 'UTF-8')
    # 使用指定的Key和指定的算法sha1对message进行哈希
    digester = hmac.new(key, message, hashlib.sha1)
    # 用16进制输出
    signature1 = digester.hexdigest()
    # 根据签名要求转换为大写
    return signature1.upper()


# 业务参数 接口中定义
businessParamDict = {"phone":"1234567890","name":"test测试"}

# 平台分配给开发者的应用秘钥,参与签名加密
signKey = 'a_secret'

# 在业务参数的基础上,补充签名有效期参数
businessParamDict["validTime"] = 60
businessParamDict["validBegin"] = math.floor(time.time())

# 按照Key值正序排列,然后使用&和=号连接成请求字符串,结果类似这样:“name=test测试&phone=1234567890&validBegin=1&validTime=60”
sortedStrParam = '&'.join([k+"="+str(businessParamDict[k]) for k in sorted(businessParamDict.keys())])

print(plaso_sign(sortedStrParam,signKey))
上一页
Android版本
下一页
签名加密
Built with