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.