Content-Type application/json
App-Key
Timestamp
Signature

{"sn":["sn_test"]}

var timestamp = Math.round(new Date()/1000);
var appKey = "AK";
var requestBody = pm.request.body.raw;
var secretKey = "SK";
pm.environment.set("Timestamp", timestamp);
var signContent = appKey + timestamp + requestBody;
console.log("signContent:" + signContent);
var signature = CryptoJS.HmacSHA256(signContent, secretKey).toString();
pm.environment.set("Signature", signature);

var timestamp = Math.round(new Date()/1000);
var appKey = "AK";
var secretKey = "SK";
// 将URL查询参数序列化为JSON字符串(值为数组形式)
var params = {};
pm.request.url.query.each(function(param) {
    if (!params[param.key]) {
        params[param.key] = [];
    }
    params[param.key].push(param.value);
});
var requestContent = JSON.stringify(params);
pm.environment.set("Timestamp", timestamp);
var signContent = appKey + timestamp + requestContent;
console.log("signContent:" + signContent);
var signature = CryptoJS.HmacSHA256(signContent, secretKey).toString();
pm.environment.set("Signature", signature);

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

/**
 * Signature Utility
 */
public class SignatureUtils {

    private static final String ALGORITHM = "HmacSHA256";

    public static String createSignature(String accessKey, String secretKey, Long timeStamp, String param) {
        String data = accessKey + timeStamp + param;
        try {
            Mac mac = Mac.getInstance(ALGORITHM);
            mac.init(new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), ALGORITHM));
            byte[] bytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));

            StringBuilder builder = new StringBuilder(bytes.length * 2);
            for (byte b : bytes) {
                builder.append(String.format("%02x", b & 0xff));
            }
            return builder.toString();
        } catch (Exception e) {
            throw new RuntimeException("Build Signature error", e);
        }
    }
}

https://developer.tbbpower.com

POST /pdm/firmwarepackage

primaryKey

code
msg
rows

name
primaryKey ID
version
firmwareList

firmwareDetail
upgradePrompt
languageSetting
[{
    "language":"zh",  // Language: zh-Chinese, en-English, de-German, fr-French, es-Spanish, it-Italian, nl-Dutch, no-Norwegian
    "text":"升级更新"  // Prompt text
}]

name
externalVersion
itemCode
itemName
attachmentList

name
url
format
size

GET /pdm/rsaPublicKey

sn

code
msg
data

id
keyType
bizSource
bizId
publicKey
signHex
createTime

{
  "success": true,
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": "01kq6ac7hy9yy3ke5t91zv4kxw",
    "keyType": "RSA_2048",
    "bizSource": "OTA",
    "bizId": "sn_test",
    "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjAN...\n-----END PUBLIC KEY-----",
    "signHex": "213800D2C5E56626F6152A4D22C08142...",
    "createTime": "2026-04-27 09:55:32"
  }
}

GET /pdm/signature

sn
firmwareAttachmentId

code
msg
data

bizSource
bizId
dataHex
signHex

{
  "success": true,
  "code": 200,
  "msg": "操作成功",
  "data": {
    "bizSource": "OTA",
    "bizId": "sn_test",
    "dataHex": "A1B2C3D4E5F6...",
    "signHex": "3F8D1A2B4C5E6F7..."
  }
}

POST /pdm/download

url


POST /pdm/downloadSoftware

itemCode
cardAddr
type


GET /pdm/itemCodeList

sn

code
msg
data

itemCode
itemName
classifyName
url

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "itemCode": "S12345678",
      "itemName": "主控软件",
      "classifyName": "主控",
      "url": "https://minio.example.com/bucket/path/to/file"
    }
  ]
}