WWeydub API

Guida API

Autenticazione e firma

Le richieste API di Weydub utilizzano le intestazioni AppKey e AppSign. Conserva AppSecret esclusivamente lato server.

Struttura della richiesta

ElementoValore
URL di basehttps://api.zhaoli.com
ProtocolloHTTPS
MetodoPOST per le chiamate API documentate
CodificaUTF-8
Tipo di contenutoapplication/json
Corpo della richiestaJSON, serializzato in forma compatta per ottenere firme stabili

Intestazioni

text
Content-Type: application/json
AppKey: your_app_key
AppSign: computed_signature

AppSecret non viene mai inviato come intestazione o campo del corpo. Viene utilizzato esclusivamente sul tuo server per calcolare AppSign.

Formula della firma

text
AppSign = md5(md5(request_body) + AppSecret)

La firma deve essere calcolata sul corpo JSON esattamente come viene trasmesso in rete. Per ottenere firme stabili, serializza JSON senza spazi aggiuntivi.

Se un endpoint consente un corpo vuoto, firma l'esatta sequenza di byte che invii. Nella maggior parte delle integrazioni, per le chiamate senza corpo è preferibile inviare {} e firmare {}.

Endpoint senza firma

L'endpoint enum non richiede la firma:

text
POST /v-w-c/enum/query2

Utilizzalo per recuperare enumerazioni dinamiche relative a lingue e stati, come sourceLang, Lang, ProcessStatus e ImageTaskStatus.

Funzione ausiliaria Python per la firma

python
import hashlib
import json


def signed_body_and_headers(payload: dict, app_key: str, app_secret: str):
    body = json.dumps(payload, ensure_ascii=False, separators=(",", ":"))
    body_md5 = hashlib.md5(body.encode("utf-8")).hexdigest()
    app_sign = hashlib.md5((body_md5 + app_secret).encode("utf-8")).hexdigest()
    return body, {
        "Content-Type": "application/json",
        "AppKey": app_key,
        "AppSign": app_sign,
    }

Funzione ausiliaria Node per la firma

js
import crypto from "node:crypto";

export function signedBodyAndHeaders(payload, appKey, appSecret) {
  const body = JSON.stringify(payload);
  const bodyMd5 = crypto.createHash("md5").update(body).digest("hex");
  const appSign = crypto.createHash("md5").update(bodyMd5 + appSecret).digest("hex");
  return {
    body,
    headers: {
      "Content-Type": "application/json",
      AppKey: appKey,
      AppSign: appSign,
    },
  };
}

Modello cURL

Utilizza il tuo backend per calcolare AppSign, quindi invia esattamente il corpo usato per il calcolo:

bash
curl -X POST "https://api.zhaoli.com/v-w-c/gateway/ve/work/status" \
  -H "Content-Type: application/json" \
  -H "AppKey: $WEYDUB_APP_KEY" \
  -H "AppSign: $WEYDUB_APP_SIGN" \
  --data '{"idWorks":[488026661]}'

Firma dei callback

Quando Weydub invia un callback, questo include:

text
Callback-Sign: computed_callback_signature

Verifica i callback con la stessa formula, utilizzando il corpo non elaborato della richiesta di callback:

text
expected = md5(md5(raw_callback_body) + AppSecret)

Confronta expected con Callback-Sign. Rifiuta o metti in quarantena i payload dei callback che non superano la verifica.

Errori comuni

  • Firmare JSON con una formattazione leggibile, ma inviare JSON in formato compatto.
  • Modificare il payload dopo la firma.
  • Utilizzare modalità di escape delle stringhe diverse tra la firma e l'invio.
  • Firmare un oggetto in memoria anziché i byte finali inviati tramite HTTP.
  • Dimenticare che extraOptions, wyVoiceParam, videoInpaintMasks, downloadInfo e il result del redo potrebbero dover rimanere stringhe JSON compatte all'interno del corpo JSON esterno.
  • Inserire le credenziali nel codice frontend.
  • Condividere AppSecret con estensioni del browser, applicazioni lato client, screenshot, log o prompt pubblici.

Regole per gli agenti

  • Leggere le credenziali da variabili di ambiente o da un gestore di segreti.
  • Non mostrare mai AppSecret.
  • Non scrivere mai le credenziali nei file di esempio generati.
  • Quando si producono esempi eseguibili, utilizzare segnaposto o variabili di ambiente.
  • Durante il debug di un errore di firma, confrontare i byte del corpo e gli hash non segreti del corpo senza visualizzare i segreti.
  • Verificare Callback-Sign per i gestori di webhook.