- Conversietracking voor CCV Shop is het meest volledig als elke betaalde bestelling op de server uit de bestelgegevens van CCV wordt verstuurd, met een snippet op de succespagina van de bestelling die de bestelling aan de advertentieklik koppelt.
- Met één klik op Create webhook meldt CCV Shop elke bestelling zodra hij als betaald is gemarkeerd, en elke levering moet het privétoken van je webshop meesturen.
- Bestellingen in CCV Shop bevatten niet het IP-adres van de shopper, dus de snippet op de succespagina van de bestelling is bij CCV Shop belangrijker dan bij de meeste platforms.
- De 5-minutencontrole kijkt alleen naar recent aangemaakte bestellingen, dus bestellingen die dagen later worden betaald, hangen af van de webhook: houd hem actief.
- Meta wijst serverevents af die meer dan 7 dagen na het aanmaken van de bestelling binnenkomen, dus een zeer late bankoverschrijving bereikt Meta niet.
Conversietracking voor CCV Shop betekent dat je elke betaalde bestelling in je CCV Shop-webshop meldt aan advertentieplatforms zoals Meta en TikTok, zodat die de juiste advertenties belonen en optimaliseren op echte verkopen. De meest volledige manier is om elke aankoop op de server uit de bestelgegevens van CCV te versturen en een korte snippet toe te voegen aan de succespagina van de bestelling die de bestelling aan de advertentieklik koppelt.
CCV Shop is een gehost webshopplatform van het Nederlandse bedrijf CCV, dat zegt 17,000 webshops te draaien. Deze gids legt uit hoe ROASaurus aan CCV Shop koppelt, hoe bestellingen aan advertentieklikken worden gekoppeld, wat Meta en TikTok bereikt, de installatie, het testen en hoe late betalingen werken. Lees voor het algemene idee wat server-side tracking is.
Hoe koppelt ROASaurus aan CCV Shop?
ROASaurus gebruikt drie onderdelen van CCV Shop, alle beschreven in de API-documentatie van CCV:
| Onderdeel van CCV Shop | Waarvoor ROASaurus het gebruikt |
|---|---|
| REST API, met een publieke sleutel en een geheime sleutel | Leest elke betaalde bestelling en de bijbehorende orderregels |
Webhook voor het event orders.updated.ispaid | CCV meldt een bestelling zodra de betaalstatus verandert |
De succespagina van de bestelling, met Vertoshop.js | De snippet leest daar het bestel-id uit en koppelt de bestelling aan de bezoeker |
Waarom missen browserpixels aankopen in CCV Shop?
Een browserpixel meldt alleen een aankoop als de browser van de shopper de succespagina van de bestelling laadt en het pixelscript draait. Een paar veelvoorkomende situaties doorbreken dat:
- De shopper betaalt via een redirect, bijvoorbeeld met iDEAL, en sluit het tabblad voordat de succespagina is geladen.
- Een adblocker of een privacyinstelling van de browser blokkeert het pixelscript.
- De bezoeker weigert marketingcookies, dus de pixel mag niet laden.
- De bestelling wordt later betaald, per bankoverschrijving of bij levering, wanneer er geen browser aan te pas komt.
In elk geval markeert CCV Shop de bestelling nog steeds als betaald. ROASaurus verstuurt die bestelling vanaf de server, dus de aankoop wordt gemeld wat er ook in de browser gebeurde. De snippet op de succespagina heeft een andere taak: hij vertelt ROASaurus bij welke bezoeker, en dus bij welke advertentieklik, de bestelling hoort.
De order-paid-webhook en de 5-minutencontrole
Wat Create webhook doet
Als je op Create webhook drukt, registreert ROASaurus een CCV-webhook voor het event orders.updated.ispaid, dat CCV activeert wanneer de eigenschap betaald van een bestelling verandert. Het adres is de webhook-URL van je webshop in ROASaurus, die je winkelsleutel en een privétoken bevat. CCV voegt niets toe aan een webhook waaraan de webshop te herkennen is, en de documentatie raadt aan een identificatie in het adres op te nemen. De winkelsleutel doet dat.
CCV geeft elke webhook een eigen geheime sleutel van 32 tekens. Als CCV die sleutel teruggeeft, slaat ROASaurus hem op, en vanaf dat moment moet elke levering een geldige x-hash-header bevatten. Elke levering moet ook het token van je webshop bevatten. Als ROASaurus een levering ontvangt, negeert het bestellingen die niet betaald zijn, leest het de volledige bestelling en de orderregels uit de API en verstuurt het de bestelling alleen als CCV zegt dat hij betaald is.
Ondertekende API-aanroepen
CCV vereist dat elke API-aanroep is ondertekend. ROASaurus verstuurt drie headers: x-public met je publieke sleutel, x-date met de huidige tijd en x-hash. CCV wijst een tijdstempel af die meer dan 5 minuten afwijkt van zijn servertijd. Je geheime sleutel zelf wordt nooit verstuurd.
API call (ROASaurus → CCV) x-hash = HMAC-SHA512( public_key|METHOD|uri|body|timestamp , secret_key ) Webhook (CCV → ROASaurus) x-hash = HMAC-SHA512( address|payload , webhook_key )
De controle van 5 minuten
Elke 5 minuten vraagt ROASaurus CCV ook om betaalde bestellingen die sinds de vorige controle zijn aangemaakt, met 30 minuten overlap, en legt het de bestellingen vast die het nog niet heeft. CCV filtert bestellingen alleen op aanmaakdatum. De controle vindt dus bestellingen die kort na het plaatsen worden betaald, en een bestelling die dagen later wordt betaald, bereikt ROASaurus alleen via de webhook.
CCV beschouwt een antwoord van 200, 201, 202 of 204 als geslaagd. Na een antwoord van 307, 408, 503 of 504 houdt CCV een levering open en probeert het de volgende keer opnieuw, en elk ander antwoord markeert het als mislukt. Het wacht 2 seconden op een verbinding en 5 seconden op het antwoord.
Hoe wordt een CCV Shop-bestelling aan de advertentieklik gekoppeld?
Om een advertentie te belonen, heeft het platform de klik-identificaties nodig van de bezoeker die heeft besteld, zoals het Meta-click-id (fbc) en het TikTok-click-id (ttclid). Het ROASaurus-script slaat ze per bezoeker op wanneer die vanuit een advertentie binnenkomt. ROASaurus krijgt dat bezoeker-id niet uit de CCV-bestelling, dus het koppelt bestellingen op andere manieren aan bezoekers:
| Methode | Bij CCV Shop | Hoe het werkt |
|---|---|---|
| 1. Snippet op de succespagina van de bestelling | Ja | Leest het bestel-id met Vertoshop.getOrder().getId(), plus het bestelbedrag en de valuta, en vuurt een ROASaurus-aankoop af met het event-id order-58213 |
| 2. Eerder e-mailadres | Ja | Een gehasht e-mailadres dat de bezoeker eerder op je site heeft opgegeven, in een popupformulier of via een Identify-aanroep |
| 3. IP-adres en browser | Nee | Bestellingen in CCV Shop bevatten niet het IP-adres of de browser van de shopper, dus deze terugvaloptie heeft niets om mee te vergelijken |
ROASaurus wacht even voordat het elke aankoop verstuurt, zodat het event van de succespagina eerst kan aankomen, en probeert de koppeling op het moment van versturen opnieuw. De pagina Orders toont het resultaat per bestelling in de kolom Matched by: thank_you, email of not matched.
Een bestelling die niet is gekoppeld, gaat nog steeds naar je advertentieplatforms met gehashte klantgegevens uit de bestelling. Hij heeft geen click-id's, en omdat CCV-bestellingen geen IP-adres of browser bevatten, ook niets daarvan. Dat verlaagt het aandeel events dat Meta aan een persoon kan koppelen; Event Match Quality legt uit hoe Meta dit scoort. In de attributie van ROASaurus verschijnt een niet-gekoppelde bestelling als direct of onbekend.
Wat bereikt Meta en TikTok vanuit een CCV-bestelling?
| CCV-bestelgegevens | Verstuurd als |
|---|---|
id | Het event-id order-58213 en het bestel-id |
total_price, currency | Waarde en valuta (EUR als CCV geen valuta meegeeft) |
create_date | De eventtijd |
| E-mailadres, mobiel of vast telefoonnummer, voor- en achternaam van de klant | Gehasht met SHA-256 |
| Factuurplaats, postcode en landcode | Gehasht met SHA-256 |
| Klant-id | Gehasht extern id |
| Orderregels: productnummer, product-id, aantal, prijs en naam | Producten met id, aantal en prijs |
| IP-adres en browser | Niet in CCV-bestellingen: afkomstig uit het event van de succespagina of de gekoppelde bezoeker |
Meta ontvangt een Purchase via zijn Conversions API en TikTok een CompletePayment via zijn Events API, beide met het event-id order-58213. TikTok toont CompletePayment in zijn rapporten nu als Purchase. Als je de optie aanvinkt om ook de browserpixel te laden, vuurt de snippet op de succespagina dezelfde events in de browser af met hetzelfde event-id, en bewaren Meta en TikTok één exemplaar. Dezelfde bestellingen gaan naar Snapchat, Pinterest, Reddit, X, Microsoft Ads, Taboola, LinkedIn en de andere advertentieplatforms als je die koppelt. Aankoopconversies voor Google Ads worden alleen vanuit de Shopify-checkout verstuurd, dus ROASaurus verstuurt ze niet vanuit CCV Shop.
Zo stel je conversietracking voor CCV Shop in
- Voeg de webshop toe in ROASaurus
Ga naar Add a store, kies CCV Shop en vul het adres van je webshop in. Het tabblad Connection toont dan je scripttag en de snippet voor de succespagina.
- Zoek je API-sleutels
Ga in CCV Shop naar My webshop › Settings › General › API settings en klik op New API key. Zie je die niet, installeer dan eerst de API-app uit de CCV App Store.
- Voeg het script toe aan elke pagina
Plak de scripttag in de Header HTML van je webshop. In het helpcentrum van CCV staat die onder Mijn webshop › Instellingen › Lay-out › Layout, onderaan de pagina. Een app-codeblok in de header werkt ook.
- Voeg de snippet toe aan de succespagina
Ga naar Mijn webshop › Instellingen › Algemeen › Teksten, open de tekst die na het plaatsen van een bestelling wordt getoond, schakel over naar Source en plak daar het snippet. CCV Shop voert het dan uit op de bedankpagina van de bestelling.
- Koppel de API
Vul op het tabblad Connection de publieke sleutel en de geheime sleutel in. Vul Shop URL alleen in als je API op een ander domein draait dan je webshop. Sla op, druk op Test connection en vervolgens op Create webhook.
- Koppel je advertentieplatforms
Gebruik op Tracking & platforms Connect with Facebook of Add pixel voor Meta, en Add pixel voor TikTok. Vink de optie aan om ook de browserpixel te laden.
Toestemming
Buiten Shopify leest het ROASaurus-script de keuze van de bezoeker uit gangbare toestemmingstools: Cookiebot, OneTrust, IAB TCF-banners en Google consent mode. Bij een andere cookiebanner roep je tlq('consent', true) aan wanneer de bezoeker marketingcookies accepteert en tlq('consent', false) wanneer die ze weigert. Totdat de bezoeker accepteert, heeft die geen bezoeker-id of click-id's en gaan er geen browserpixels af. De betaalde bestelling wordt nog steeds vanaf de server verstuurd, met gehashte klantgegevens uit de bestelling. De helppagina over toestemming legt de details uit.
Hoe test je conversietracking voor CCV Shop?
- Open je webshop met
?roasaurus=connectedin het adres. Een melding bevestigt dat het script draait.?roasaurus=debuglogt wat het naar de browserconsole stuurt. - Onder Collected events in de Event log moeten paginaweergaven een bezoeker-id tonen.
- Plaats een bestelling en betaal hem, of markeer hem als betaald. Onder Collected events moet de Event log een Purchase tonen met het CCV-bestel-id in de gegevens. Ontbreekt die, dan is de snippet op de succespagina niet gedraaid.
- Op het tabblad Connection toont Last order received de bestelling en Last sync de laatste 5-minutencontrole, met eventuele fouten van CCV.
- Onder Server deliveries in de Event log krijgt elk gekoppeld platform een regel met de status sent en het antwoord van het platform.
PageView visitor 51c0e9a7Script op elke paginaPurchase order-58213Snippet op de succespagina van de bestellingwebhook orders.updated.ispaidHandtekening gecontroleerd, bestelling betaaldMeta Purchase sentMatched by thank_youTikTok CompletePayment sentZelfde event-id, ontdubbeldOm het event in Meta te zien, plak je de code uit Events Manager › Test events in het veld Test event code van je Meta-pixel in ROASaurus. Verwijder hem weer als je klaar bent.
Late betalingen en andere beperkingen
Bankoverschrijvingen en betalingen bij levering worden betaald nadat de bestelling is geplaatst. Dit gebeurt er met een voorbeeldbestelling per bankoverschrijving, vanaf de dag van plaatsing:
| Wanneer | Wat er gebeurt | Resultaat |
|---|---|---|
| Dag 0, bij de checkout | De bestelling wordt aangemaakt, niet betaald | Niet verstuurd: de 5-minutencontrole vraagt alleen om betaalde bestellingen |
| Dag 0, ongeveer 35 minuten later | De aanmaaktijd van de bestelling valt buiten het controlevenster | Vanaf nu kan alleen de webhook hem nog melden |
| Dag 3 | Jij markeert de bestelling als betaald | De webhook komt binnen, ROASaurus verstuurt hem. De eventtijd van dag 0 is 3 dagen oud: Meta accepteert hem |
| In plaats daarvan dag 9 | Jij markeert de bestelling als betaald | De webhook komt binnen, ROASaurus verstuurt hem. 9 dagen is meer dan 7: Meta wijst hem af |
- Betaling bij levering. ROASaurus verstuurt deze bestellingen wanneer CCV ze als betaald markeert, meestal na levering. Zie tracking bij betaling bij levering voor wanneer je zulke bestellingen moet meetellen.
- Browseraankopen vóór betaling. De snippet op de succespagina draait wanneer de bestelling wordt geplaatst, dus de browserpixels melden een bestelling per bankoverschrijving voordat hij is betaald. Komt de betaling meer dan 48 uur later, dan kunnen Meta en TikTok de browser- en serverkopieën niet samenvoegen.
- Geen IP-terugvaloptie. Voeg de snippet voor de succespagina toe en leg waar mogelijk eerder op je site e-mailadressen vast.
- Annuleringen en terugbetalingen worden niet verstuurd. Zodra een aankoop is verstuurd, blijft hij in het advertentieplatform staan.
- Alleen paginaweergaven, zonder code. Productweergaven en add-to-carts worden alleen op Shopify automatisch gedetecteerd. Bij CCV Shop kan een ontwikkelaar ze versturen met een
tlq-trackaanroep.
De integratiepagina voor CCV Shop zet de verbindingsgegevens op één plek, en de helppagina voor andere webshops vergelijkt CCV Shop met de andere platforms waarmee ROASaurus koppelt, zoals Lightspeed.
Bronnen
- CCV Shop: API Documentatie
- CCV: Webshop API
- Meta for Developers: Server Event Parameters
- Meta for Developers: Handling Duplicate Pixel and Conversions API Events
- TikTok Ads Manager: About Event Deduplication