create_auction recebe o número de slots, os IDs dos produtos, seus quality scores, um ID de categoria, uma busca e o opaqueUserId do comprador, nessa ordem. Passe null nos argumentos que você não usar.
<?phpuse Topsort\SDK;$topsort_client = new SDK("my_api_key");$opaque_user_id = "<YOUR_OPAQUE_USER_ID>"; // The same persistent id for this shopper$products = ["i8bfHPJaxcAb3", "gDG0HV97ed2s"];$slots = 1;$auction_result = $topsort_client->create_auction($slots, $products, null, null, null, $opaque_user_id)->wait();$winners = $auction_result["results"][0]["winners"];
Para um leilão de banners, use create_banner_auction:
Reporte um render quando o seu servidor inserir um vencedor na página, e uma impressão quando esse vencedor se tornar visível para o comprador. Envie o mesmo opaqueUserId para um comprador em todos os leilões e eventos, por exemplo um id que você mantém em um cookie ou na sua sessão de login. Um novo id por evento quebra a atribuição. O SDK não gera um: os métodos report_* lançam uma Topsort\InvalidEventException quando ele está ausente ou vazio, antes de enviar qualquer coisa.Cada método report_* retorna uma promise, e nada é enviado até você chamar ->wait() nela. wait() bloqueia até o Topsort responder, então, sempre que possível, reporte os eventos depois de enviar a resposta ao comprador, por exemplo depois de fastcgi_finish_request().
Se a página também carrega o analytics.js, ele já reporta renders, impressões e cliques para todo elemento com data-ts-resolved-bid. Não reporte esses eventos novamente com o SDK.
<?phpuse Topsort\SDK;use Topsort\TopsortException;$topsort_client = new SDK("my_api_key");$opaque_user_id = "<YOUR_OPAQUE_USER_ID>"; // The same id you sent on the auction$placement = ["path" => "/categories/shoes"];$winner = $winners[0]; // A winner from the auction result
Um render registra que um anúncio patrocinado foi inserido na página, independentemente de ele chegar a ficar visível. Os renders são exclusivos de anúncios patrocinados, portanto report_render recebe o resolvedBidId como primeiro argumento e não existe o campo entity.
Uma impressão registra que um anúncio ou produto ficou visível para o comprador. O seu servidor não consegue ver isso, então reporte-a a partir da requisição que o seu frontend envia quando o elemento entra no viewport. report_impressions recebe uma impressão por chamada.
Todos os eventos também aceitam um id, gerado pelo SDK quando você o omite, e um occurredAt do tipo DateTime, que por padrão é o horário atual. Consulte a referência da API de eventos para ver todos os campos de evento.
Todos os erros do SDK estendem Topsort\TopsortException, então um único catch trata todos eles:
Topsort\InvalidEventException é lançada pela própria chamada report_* quando o evento é inválido, antes de qualquer envio. Mantenha a chamada dentro do try, não apenas o ->wait().
Topsort\TopsortException é lançada por ->wait() quando a API rejeita a requisição ou não pode ser alcançada. Para um erro da API, a mensagem inclui o corpo da resposta, por exemplo Event creation failed: Content: {"errors":[...]}.