← 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

nameVærdiBemærkning
elProductGuidE19F93CC-8A31-4432-AB10-9398C1022444Fast
egenSpotProductGuidF4442BA9-7AE1-4FD2-A42B-0FA994B8943EFast
partnerGuidc2395993-6786-4a39-9027-be392ace496cFast
sellerID123731Fast
form_typesignup_stroemFast
produktEnkELFast – bruges i mails

Adresse

nameTypeValidering
adresseSøgefelt (Adressevælger autocomplete)Påkrævet "Adresse er påkrævet"
streetNamehiddenAuto Udfyldes af JS ved valg
houseNumberhiddenAuto Udfyldes af JS ved valg
floorhiddenAuto Udfyldes af JS ved valg
doorhiddenAuto Udfyldes af JS ved valg
subCityhiddenAuto Udfyldes af JS ved valg
zipCodehiddenAuto Udfyldes af JS ved valg
cityNamehiddenAuto Udfyldes af JS ved valg

Situation

nameTypeVærdierValidering
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)

nameTypeBemærkning
ProduktionsaftalecheckboxIngen validering
ConsentcheckboxMarketing samtykke – ingen validering

Personoplysninger

nameTypeValidering
nametextPåkrævet "Navn er påkrævet"
emailemailPåkrævet + gyldig e-mail
emailconfirmemailPåkrævet + skal matche email
telefonnummertelPåkrævet 8 cifre, uden +45 — ^\d{8}$

Betalingstype

nameTypeVærdierValidering
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 stringBannerBetydning
?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

  1. 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.
  2. Formdata indsamles – alle navngivne inputs samles i et formData-objekt.
  3. 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>"
    }
  4. 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.
  5. 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.

  6. Betaling / kundeoprettelse – efter MitID:
  7. 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:

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
Devhttps://apidev.modstroem.dk
Testhttps://apitest.modstroem.dk
Produktionhttps://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:

FeltBeskrivelseEksempelværdi
ElPriceEastSamlet elpris øst (øre/kWh inkl. moms)128.9675
ElPriceWestSamlet elpris vest (øre/kWh inkl. moms)119.24
ModstroemSubscriptionAbonnement (kr/md)10
DiscountProfitMarginRabat på avance0
AdvancePriceAvancepris (øre/kWh)2
Description1East / WestBeskrivelsestekst linje 1gennemsnitsprisen betalt af vores kunder i uge 28 2026
Description2East / WestBeskrivelsestekst linje 2 (region)i Østjylland / på Sjælland
Description3East / WestNetselskabKonstant / Radius

ElPrices-arrayet indeholder delpriserne opdelt på ProductType og Region (1 = øst, 2 = vest):

ProductTypeNavnEksempel østEksempel vest
13Markedspris90.04 øre/kWh93.40 øre/kWh
14Tarif + Afgifter38.93 øre/kWh25.84 øre/kWh
15Abonnement Net64.92 kr/md55.29 kr/md
16Handels- og balanceomkostninger00
17Elafgift1 øre/kWh1 øre/kWh
18Systemtarif9 øre/kWh9 øre/kWh
19Transmission nettarif5.37 øre/kWh5.37 øre/kWh
21Nettarif time23.56 øre/kWh10.74 øre/kWh
23Balancetarif Egenproduktion0.53 øre/kWh0.53 øre/kWh
24Indfødningstarif Egenproduktion0.50 øre/kWh0.50 øre/kWh
25Rådighedstarif Egenproduktion32.44 kr/md32.44 kr/md
102Tillæg til nettransport00
Abonnement til visning på siden svarer til ModstroemSubscription fra topniveauet i responsen.