IVAN CAPPONI.NET/C# · Microsoft Azure

eBay · Azure Functions · .NET

Webhook di cancellazione account eBay su Azure Functions (.NET/C#)

Ultimo aggiornamento: giugno 20269 min di letturaAvanzato

Endpoint di cancellazione account eBay implementato come Azure Function in C#
Lo stesso endpoint di cancellazione account eBay, questa volta in C#/.NET su Azure Functions.

L'endpoint di Marketplace Account Deletion è obbligatorio per ottenere il keyset di produzione eBay. La guida completa al setup developer ne mostra il flusso con un esempio AWS Lambda; qui vediamo la variante .NET/C# su Azure Functions, per chi sta già su Azure.

Cosa deve fare l'endpoint

Due responsabilità su un unico URL HTTPS. In GET eBay invia un challenge_code e si attende l'hash SHA-256 di challenge_code + verification_token + endpoint, in JSON. In POST arrivano le notifiche di cancellazione: si valida la firma e si eliminano/anonimizzano i dati dell'utente.

L'esempio in C# su Azure Functions

[Function("ebayAccountDeletion")]
public async Task<HttpResponseData> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
    // 1) GET = verifica del challenge
    var challenge = HttpUtility.ParseQueryString(req.Url.Query)["challenge_code"];
    if (challenge is not null)
    {
        var token = Environment.GetEnvironmentVariable("EBAY_VERIFICATION_TOKEN");
        var endpoint = "https://app.example.com/api/ebayAccountDeletion";
        var bytes = Encoding.UTF8.GetBytes(challenge + token + endpoint);
        var hash = Convert.ToHexString(SHA256.HashData(bytes)).ToLowerInvariant();
        var ok = req.CreateResponse(HttpStatusCode.OK);
        await ok.WriteAsJsonAsync(new { challengeResponse = hash });
        return ok;
    }
    // 2) POST = notifica di cancellazione: valida la firma, poi cancella i dati
    return req.CreateResponse(HttpStatusCode.OK);
}

La risposta al challenge deve avere Content-Type: application/json e contenere esattamente il campo challengeResponse. L'endpoint va esposto in HTTPS con un URL stabile.

Configurazione: token e segreti

Il verification token e le credenziali non vanno hardcoded: tienili in app settings o, meglio, in un secret manager con identità gestita, come descritto nella guida su come proteggere segreti e credenziali con Azure Key Vault. Lo stesso vale per i token OAuth della eBay Sell API.

Validare la notifica POST

Le notifiche POST vanno autenticate verificando la firma fornita da eBay (header di firma e chiave pubblica del mittente) prima di agire. Rispondi rapidamente con 200/204 e svolgi la cancellazione in modo asincrono, così non vai in timeout e non perdi notifiche.

Deploy e configurazione nel portale

  • pubblica la Function su un dominio HTTPS stabile;
  • inserisci URL e verification token nel portale eBay e completa la validazione del challenge;
  • verifica che la GET risponda con l'hash corretto prima di passare in produzione.

Errori comuni

  • concatenare i tre valori in ordine errato o con spazi: l'hash non combacia;
  • restituire l'hash come testo invece che nel JSON con challengeResponse;
  • elaborare la cancellazione in modo sincrono e andare in timeout;
  • token e segreti hardcoded nel codice.

Conclusione

La variante Azure Functions in C# è compatta: gestisci challenge e notifica nello stesso trigger HTTP, validi la firma e tieni i segreti fuori dal codice. Per il flusso completo del setup developer fai riferimento alla guida principale. Riferimenti: Documentazione Azure Functions e eBay Developers Program.