← Tilbage til formularen
StromSignup – Dokumentation
Denne side beskriver tilmeldingsformularen (index.html + form.js):
felter og validering, bannere der vises ved retur fra MitID/betaling, og selve submit-flowet.
1. Konfiguration
Al konfiguration sættes i CONFIG-objektet øverst i form.js:
var CONFIG = {
adressevaelgerToken: 'adressevaelger123', // token fra confluence.sdfi.dk
saveUrl: 'https://dev.modstroem.dk', // UmbracoSaveUrl
apiKey: 'GEgvf0O83Re', // UmbracoSaveApiKey (X-Api-Key header)
mitIdBaseUrl: 'https://identifikationdev.modstroem.dk', // MitID base URL
successUrl: 'https://peladev.modstroem.dk', // redirect efter succesfuldt MitID-flow
failUrl: 'https://peladev.modstroem.dk', // redirect efter fejlet/afbrudt MitID-flow
clientIp: '127.0.0.1', // klient-IP sendt til SaveRecord
cssUrl: 'https://peladev.modstroem.dk/site.css' // absolut URL til site.css — sendes som formUrl
};
2. Formularfelter
Skjulte systemfelter
| name | Værdi | Bemærkning |
elProductGuid | E19F93CC-8A31-4432-AB10-9398C1022444 | Fast |
egenSpotProductGuid | F4442BA9-7AE1-4FD2-A42B-0FA994B8943E | Fast |
partnerGuid | c2395993-6786-4a39-9027-be392ace496c | Fast |
sellerID | 123731 | Fast |
form_type | signup_stroem | Fast |
produkt | EnkEL | Fast – bruges i mails |
Adresse
| name | Type | Validering |
adresse | Søgefelt (Adressevælger autocomplete) | Påkrævet "Adresse er påkrævet" |
streetName | hidden | Auto Udfyldes af JS ved valg |
houseNumber | hidden | Auto Udfyldes af JS ved valg |
floor | hidden | Auto Udfyldes af JS ved valg |
door | hidden | Auto Udfyldes af JS ved valg |
subCity | hidden | Auto Udfyldes af JS ved valg |
zipCode | hidden | Auto Udfyldes af JS ved valg |
cityName | hidden | Auto Udfyldes af JS ved valg |
Situation
| name | Type | Værdier | Validering |
FlytteValg |
radio |
leverandørskifte, flytte, afbrudt |
Påkrævet "Vælg venligst en mulighed" |
vaelgIndflytningsdato |
date |
– |
Betinget Påkrævet når FlytteValg = flytte |
Til- og fravalg (toggles)
| name | Type | Bemærkning |
Produktionsaftale | checkbox | Ingen validering |
Consent | checkbox | Marketing samtykke – ingen validering |
Personoplysninger
| name | Type | Validering |
name | text | Påkrævet "Navn er påkrævet" |
email | email | Påkrævet + gyldig e-mail |
emailconfirm | email | Påkrævet + skal matche email |
telefonnummer | tel | Påkrævet 8 cifre, uden +45 — ^\d{8}$ |
Betalingstype
| name | Type | Værdier | Validering |
BetalingstypeValg |
radio |
mobilepay, betalingsservice, applepay, cardfrisbii |
Påkrævet "Vælg venligst en betalingstype" |
registreringsnummer |
text |
4 cifre |
Betinget Påkrævet + ^\d{4}$ når betalingsservice |
kontonummer |
text |
6–10 cifre |
Betinget Påkrævet + ^\d{6,10}$ når betalingsservice |
3. Bannere ved retur fra MitID / betaling
Bannere vises øverst på siden (over formkortet) baseret på query string når brugeren vender tilbage:
| Query string | Banner | Betydning |
?error=<besked> |
⚠ Amber advarsel med beskeden |
MitID/kampagne-flowet returnerede en fejl |
?id=cs_...&customer=<id> |
⚠ Amber – "Betaling blev afbrudt" |
Brugeren afbrød betalingsflow (checkout session + customer begge til stede) |
?formSubmitted=AppForm&cno=<nummer> |
✓ Grøn – "Kunde oprettet med kundenummer: <cno>" |
Kunden er oprettet. cno er det nye kundenummer |
4. Submit-flow
-
DOM-snapshot – HTML fra
<main>-elementet fanges som UTF-8 base64 (clone0).
Kun <main> sendes (ikke hele siden) for at undgå at Cloudflare WAF blokerer den store POST-body.
- Formdata indsamles – alle navngivne inputs samles i et
formData-objekt.
-
Payload bygges:
{
"identifier": "<klient-genereret GUID>",
"formId": "AppForm",
"formUrl": "<window.location.pathname>",
"clone0": "<base64 af <main> HTML>",
"formData": { ... alle felter ... },
"formDataJson": "{ ... JSON-streng ... }",
"clientIp": "<CONFIG.clientIp>"
}
-
SaveRecord –
POST {saveUrl}/umbraco/api/MitIdApi/SaveRecord
med headerne Content-Type: application/json og X-Api-Key: {apiKey}.
Gemmer en record på Modstrøm-sitet med alle formdata, så den kan hentes af andre applikationer senere i processen.
Fejler kaldet vises en rød fejlbanner og submit-knappen genaktiveres — brugeren blokeres ikke men omdirigeres heller ikke.
-
Redirect til MitID – ved succesfuldt svar navigeres til:
{mitIdBaseUrl}/MitId/Index
?identifier={identifier}
&ticks={DateTime.UtcNow.Ticks-ækvivalent}
&successUrl={CONFIG.successUrl}
&failUrl={CONFIG.failUrl}
userType sendes ikke — den modtagende applikation defaulter til private.
-
Betaling / kundeoprettelse – efter MitID:
mobilepay, applepay, cardfrisbii → viderestilles til betalingsudbyder og tilbage igen.
betalingsservice → kunde oprettes direkte efter MitID (ingen betalings-redirect).
- Retur – brugeren lander tilbage på siden, og et banner (afsnit 3) rapporterer resultatet.
5. Test
MitID testbruger
Brugernavn: Ben18
Adgangskode: Modstroem1234
Betalingstest
I testmiljøet kan kun disse to betalingstyper gennemføres:
- Betalingsservice
- Betalingskort (
cardfrisbii) – indtast testkortoplysninger når betalingsudbyderen beder om det
MobilePay og Apple Pay kan ikke gennemføres i testmiljøet – de kræver ekstra opsætning og fungerer i øvrigt på samme måde som Betalingskort.
6. cURL-eksempel
curl -X POST https://dev.modstroem.dk/umbraco/api/MitIdApi/SaveRecord \
-H "Content-Type: application/json" \
-H "X-Api-Key: GEgvf0O83Re" \
-d '{
"identifier": "b0c1d2e3-f4a5-4b6c-8d7e-9f0a1b2c3d4e",
"formId": "AppForm",
"formUrl": "/",
"clone0": "",
"clientIp": "127.0.0.1",
"formData": {
"adresse": "Jagtvej 120, 2200 København N",
"streetName": "Jagtvej",
"houseNumber": "120",
"zipCode": "2200",
"cityName": "København N",
"FlytteValg": "leverandørskifte",
"name": "Test Testesen",
"email": "test@example.dk",
"emailconfirm": "test@example.dk",
"telefonnummer": "12345678",
"BetalingstypeValg": "mobilepay"
},
"formDataJson": "{\"name\":\"Test Testesen\",\"email\":\"test@example.dk\"}"
}'
7. Prisdata (GetElPrices)
Prisdata hentes per elProductGuid fra Modstrøm's pris-API.
Brug E19F93CC-8A31-4432-AB10-9398C1022444 som produktguid (samme som den skjulte elProductGuid-felt i formularen).
Endpoints
| Miljø | Base URL |
| Dev | https://apidev.modstroem.dk |
| Test | https://apitest.modstroem.dk |
| Produktion | https://api.modstroem.dk |
cURL-eksempel
curl --location 'https://apidev.modstroem.dk/PriceController/GetElPrices \
?apiKey=<din-api-nøgle> \
&encryptionKey=ModInfinity \
&product=E19F93CC-8A31-4432-AB10-9398C1022444'
Respons
Responsen indeholder topniveau-felter samt et ElPrices-array med alle delpriser. Vigtige topniveau-felter:
| Felt | Beskrivelse | Eksempelværdi |
ElPriceEast | Samlet elpris øst (øre/kWh inkl. moms) | 128.9675 |
ElPriceWest | Samlet elpris vest (øre/kWh inkl. moms) | 119.24 |
ModstroemSubscription | Abonnement (kr/md) | 10 |
DiscountProfitMargin | Rabat på avance | 0 |
AdvancePrice | Avancepris (øre/kWh) | 2 |
Description1East / West | Beskrivelsestekst linje 1 | gennemsnitsprisen betalt af vores kunder i uge 28 2026 |
Description2East / West | Beskrivelsestekst linje 2 (region) | i Østjylland / på Sjælland |
Description3East / West | Netselskab | Konstant / Radius |
ElPrices-arrayet indeholder delpriserne opdelt på ProductType og Region (1 = øst, 2 = vest):
| ProductType | Navn | Eksempel øst | Eksempel vest |
13 | Markedspris | 90.04 øre/kWh | 93.40 øre/kWh |
14 | Tarif + Afgifter | 38.93 øre/kWh | 25.84 øre/kWh |
15 | Abonnement Net | 64.92 kr/md | 55.29 kr/md |
16 | Handels- og balanceomkostninger | 0 | 0 |
17 | Elafgift | 1 øre/kWh | 1 øre/kWh |
18 | Systemtarif | 9 øre/kWh | 9 øre/kWh |
19 | Transmission nettarif | 5.37 øre/kWh | 5.37 øre/kWh |
21 | Nettarif time | 23.56 øre/kWh | 10.74 øre/kWh |
23 | Balancetarif Egenproduktion | 0.53 øre/kWh | 0.53 øre/kWh |
24 | Indfødningstarif Egenproduktion | 0.50 øre/kWh | 0.50 øre/kWh |
25 | Rådighedstarif Egenproduktion | 32.44 kr/md | 32.44 kr/md |
102 | Tillæg til nettransport | 0 | 0 |
Abonnement til visning på siden svarer til ModstroemSubscription fra topniveauet i responsen.