Kodeeksempler - CPR Services
Alle kodeeksempler kommer i C# (.NET), Java, og Node.js varianter. Kodeeksemplerne kan downloades fra: CPR Code samples Bitbucket. Bemærk dog at kun java eksempler er fuldt udbygget.
Systemkrav
For at kunne anvende kodeeksemplerne, er det nødvendigt at have et idriftsættelsesmiljø installeret, i de downloadede kodeeksemplers sprog.
Environment | Minimum Version | Notes |
---|---|---|
Java | JDK 17 | No implementation-specific notes. |
.NET (C#) | 8.0 | No implementation-specific notes. |
Node.js | På vej. |
Samtlige kodeeksempler er blevet testet i Windows 10 (x64).
Modtagelse af eksempler
Kodeeksempler til CPR interface kan dowloades med Git:
.NET: git clone https://bitbucket.org/cprcodesamples/gctp-examples-csharp.git Java: git clone https://bitbucket.org/cprcodesamples/gctp-examples-java.git Node.js: På vej
Hvis du ikke har Git installeret (eller foretrækker et grafisk user interface), kan du downloade kodeeksemplerne fra CPR code samples Bitbucket:
- Naviger til Bitbucket.
- Klik på knappen DirekteMatch source code repositories (Java, .NET, or Node.js).
- Klik på ikonet i "Navigation" menuen.
- Klik på "Download repository" link. Alternativt, kan der vælges et specifikt tag eller en branch for at downloade.
Eksekvering af kodeeksempler
Så snart kodeeksemplerne er downloadet, vil det være muligt at pakke arkivet ud til en mappe efter eget valg.
For instruktioner om de kommandoer, der er nødvendige for at køre de specifikke kodeeksempler, se Bitbucket repository, som du hentede eksemplet fra.
HTTP forespørgsel-svar eksempler
Her vises eksempler på hvordan forskellige GCTP forespørgsler og responser ser ud inklusiv visse HTTP header nogle HTTP header værdier undlades.
Login forespørgsel:
POST /cpr-online-gctp/gctp HTTP/1.1 Host: gctp.cpr.dk User-Agent: CPR/1.0 Content-Length: 184 Content-Type: text/xml <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <root xmlns="http://www.cpr.dk"> <Gctp v="2.0"> <Sik function="signon" userid="PERSONKODE" password="PASSWORD"/> </Gctp> </root>
Bemærk at "userid" og "password" værdier skal udfyldes korrekt.
Login respons, userid og password OK:
HTTP/1.1 200 Date: Thu, 25 Nov 2021 15:29:22 GMT Set-Cookie: Token=...; Max-Age=7200; Expires=Thu, 25-Nov-2021 17:29:22 GMT Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 118 Set-Cookie: AlteonP=201618953; path=/; secure; HttpOnly; SameSite=Lax <root xmlns="http://www.cpr.dk"> <Gctp v="2.0"> <Sik> <Kvit r="returKode" t="Signon udført" v="900"/> </Sik> </Gctp> </root>
Bemærk at der findes flere Set-Cookie HTTP headers. Brugerens login token er angivet som cookie i en Set-Cookie header og GCTP-respons kvitteringen har værdi 900 (signon udført).
VIGTIGT
Kunder opfordres til at benytte RFC6265-kompatibel Cookie parsers i deres GCTP integrationer. Nye attributter kan blive tilføjet til Token Cookies uden varsel.
Login respons, brugernavn (userid) og/eller password forkert:
HTTP/1.1 200 Date: Thu, 25 Nov 2021 15:29:22 GMT Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 130 Set-Cookie: AlteonP=201618953; path=/; secure; HttpOnly; SameSite=Lax <root xmlns="http://www.cpr.dk"> <Gctp v="2.0"> <Sik> <Kvit r="returKode" t="Ugyldig kodeord indtastet" v="905"/> </Sik> </Gctp> </root>
Bemærk at HTTP statuskoden er 200 og brugeren er ikke logget på systemet (ingen Set-Cookie HTTP header der indeholder et token). GCTP-respons kvitteringen har værdi 905 (Ugyldig kodeord indtastet).
Personopslag forespørgsel til STAMP (stamdata til private) service:
POST /cpr-online-gctp/gctp HTTP/1.1 Host: gctp.cpr.dk User-Agent: CPR/1.0 Cookie: Token=... Content-Type: text/xml Content-Length: 260 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <root xmlns="http://www.cpr.dk"> <Gctp v="2.0"> <System r="CprSoeg"> <Service r="STAMP"> <CprServiceHeader r="STAMP"> <Key> <Field r="PNR" v="0000009999"/> </Key> </CprServiceHeader> </Service> </System> </Gctp>
Bemærk at login token er angivet som den eneste cookie i Cookie HTTP-headeren.
Personopslag respons fra STAMP service hvor personnummeret eksisterer:
HTTP/1.1 200 Date: Thu, 25 Nov 2021 15:49:06 GMT Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 1136 Set-Cookie: AlteonP=257126245; path=/; secure; HttpOnly; SameSite=Lax <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <root xmlns="http://www.cpr.dk"> <Gctp v="2.0" env=""> <System r="CprSoeg"> <Service r="STAMP"> <CprServiceHeader r="STAMP" ts="20211125165745906505"/> <CprData u="O"> <Rolle r="HovedRolle"> <Praes r="STAMPNR"> <Field r="PNR" v="0000009999"/> <Field r="I_VENT_MRK"/> <Field r="ADRNVN" v="Efternavn,Fornavn Mellemnavn" t="Fornavn Mellemnavn Efternavn"/> <Field r="KOEN" v="K"/> <Field r="STATUS" v="01"/> <Field r="STARTDATOSTATUS"/> <Field r="PNRGAELD"/> <Field r="FOEDDATO" v="19700101"/> <Field r="FOEDDATOUSM"/> <Field r="BESKYT"/> <Field r="CONVN"/> <Field r="ETAGE"/> <Field r="HUSNR" v="007"/> <Field r="SIDEDOER"/> <Field r="BNR"/> <Field r="KOMKOD" v="0000" t="Kommunenavn" tl="Udvidet kommunenavn"/> <Field r="VEJKOD" v="0000" t="Testvej"/> <Field r="BYNVN"/> <Field r="LOKALITET"/> <Field r="POSTNR" v="0000" t="Postdistriktsnavn"/> <Field r="UDR_LANDEKOD"/> <Field r="UDLANDSADR1"/> <Field r="UDLANDSADR2"/> <Field r="UDLANDSADR3"/> <Field r="UDLANDSADR4"/> <Field r="UDLANDSADR5"/> <Field r="STADR" v="Vejnavn 7"/> </Praes> </Rolle> </CprData> <Kvit r="Ok" t="" v="0"/> </Service> </System> </Gctp> </root>
Bemærk at GCTP-respons kvitteringen har værdi 0 (Ok).
Personopslag respons fra STAMP service hvor personnummeret ikke eksisterer:
HTTP/1.1 200 Date: Thu, 25 Nov 2021 15:49:06 GMT Content-Type: text/xml;charset=ISO-8859-1 Content-Length: 308 Set-Cookie: AlteonP=257126245; path=/; secure; HttpOnly; SameSite=Lax <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <root xmlns="http://www.cpr.dk"> <Gctp v="2.0" env=""> <System r="CprSoeg"> <Service r="STAMP"> <CprServiceHeader r="STAMP" ts="20211125170558453023"/> <Kvit r="Fejl" t="Personen 000000-9999 findes ikke i CPR." v="172"/> </Service> </System> </Gctp> </root>
Bemærk at HTTP statuskoden er 200 og GCTP-respons kvitteringen har værdi 172 (Personen findes ikke i CPR).
Generelt om fortolkning af GCTP-responserne
Som udgangspunkt returneres der altid statuskode 200 i HTTP-responsen hvis den pågældende GCTP-service har svaret. I så fald skal GCTP-responsen i HTTP-responsens "body" fortolkes for at afgøre resultatet af forespørgslen.
Der anbefales følgende i forhold til fortolkning af GCTP-responserne:
- Kontroller HTTP statuskoden og ikke HTTP statusteksten i fortolkningsprogrammerne.
- Indlæs GCTP-responsen som XML fremfor at navigere rundt i responsen som en stor tekstværdi.
- Kontroller altid fejlkoden i GCTP-kvitteringen inden viderebehandling af GCTP-responsens indhold.