CVR-opslag i PHP

Uanset om du bygger en webshop, et CRM eller en faktureringsløsning, kan du hente CVR-data i PHP med cURL eller file_get_contents. Der er ingen nøgle at holde styr på.

Slå en virksomhed op på CVR-nummer

Med cURL kan du se HTTP-statuskoden og skelne mellem en ukendt virksomhed og en egentlig fejl.

php
<?php
function get_company(int $cvr): ?array
{
    $ch = curl_init("https://apicvr.dk/api/v1/$cvr");
    curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($status === 404) {
        return null;
    }
    if ($status !== 200) {
        throw new RuntimeException("CVR-API svarede $status");
    }
    return json_decode($body, true);
}

$company = get_company(24256790);
echo $company["name"] . ", " . $company["zipcode"] . " " . $company["city"] . PHP_EOL;

Søg på virksomhedsnavn

Til hurtige scripts er file_get_contents nok. Brug rawurlencode, så mellemrum og æøå bliver kodet korrekt.

php
<?php
$name = rawurlencode("novo nordisk");
$hits = json_decode(file_get_contents("https://apicvr.dk/api/v1/search/fuzzy/$name"), true);

foreach (array_slice($hits, 0, 5) as $hit) {
    echo $hit["cvr_number"] . " " . $hit["name"] . PHP_EOL;
}

Håndter fejl

StatusBetydning
200Virksomheden blev fundet. Svaret er JSON.
404Der findes ingen virksomhed med det CVR-nummer. Body: {"detail": {"error": "NOT_FOUND"}}
422CVR-nummeret er ikke et tal.
502CVR-registret svarede ikke. Prøv igen om lidt.

Ejere, direktion og reklamebeskyttelse

php
<?php
$company = get_company(24256790);

foreach ($company["ejere"] as $owner) {
    echo $owner["name"] . " " . $owner["ownership_range"] . PHP_EOL;
}
foreach ($company["direktion"] as $person) {
    echo $person["role"] . ": " . $person["name"] . PHP_EOL;
}
if ($company["protected"]) {
    echo "Reklamebeskyttet" . PHP_EOL;
}
Tjek altid protected, før du bruger data til markedsføring. Er feltet true, har virksomheden frabedt sig reklamehenvendelser.

Ofte stillede spørgsmål

Virker det med Laravel og Symfony?

Ja. Brug Laravels Http::get() eller Symfonys HttpClient på samme URL. Svaret er almindelig JSON.

Bør jeg cache svarene?

Ja, hvis du slår de samme virksomheder op tit. Virksomhedsdata ændrer sig sjældent, så en cache på et par timer er fin.