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.


EnvironmentMinimum VersionNotes
JavaJDK 17No implementation-specific notes.
.NET (C#)8.0No 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:

Clone repository
.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:

  1. Naviger til Bitbucket.
  2. Klik på knappen DirekteMatch source code repositories (Java, .NET, or Node.js).
  3. Klik på Downloads ikonet i "Navigation" menuen.
  4. 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:

HTTP request
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 response
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 response
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:

HTTP request
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 respons
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 respons
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: 

  1. Kontroller HTTP statuskoden og ikke HTTP statusteksten i fortolkningsprogrammerne.
  2. Indlæs GCTP-responsen som XML fremfor at navigere rundt i responsen som en stor tekstværdi.
  3. Kontroller altid fejlkoden i GCTP-kvitteringen inden viderebehandling af GCTP-responsens indhold.