eBay · Azure Functions · .NET
Webhook di cancellazione account eBay su Azure Functions (.NET/C#)
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.