<# aus dem V.O. API - PHP Beispiel, hat man die "Parameter" beim POST in der URL als Variable Verkettet (Das bedeutet - es gibt keine Methodische trennung von POST und GET) #>
function VereinOnlineRequest {
   param(
      [String]$uri,
      [String]$func,
      [String]$user,
      [String]$pass,
      [Hashtable]$daten
   )
   $uri = $uri + "?json&function=$func&token=A/$user/$pass"
   <# Loop fuer jeden durchlauf der "Parameter" die URL mit &key = value erweitern... #>
   $daten.Keys | % { $uri= "$uri&" + $_ + "=" + $daten.Item($_) }
   
   <# Alternativ zu Zeile 12 #>
   # foreach ($key in $ht.Keys) { 
     # if ($key -in 'one', 'two') { "Value for key '$($key)': $($ht.$key)" }
   # }
   
   <# You could replace Invoke-WebRequest with Invoke-RestMethod which auto-converts json response to a psobject #>
   <# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.1#parameters siehe Parameter -token und -Authentication #>
   $response = Invoke-WebRequest -uri $uri
   $resData = ConvertFrom-Json –InputObject $response
   return $resData
}

<# Das Passwort muss in einem MD5 Hash uebergeben werden #>
function createMD5 {
   param(
      [String]$preMD5
   )
   $md5  = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
   $utf8 = New-Object -TypeName System.Text.UTF8Encoding
   $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($preMD5)))
   
   return $hash
}

<# Authentication: Constants #>
$user     = "VOBenutzerAccount"
$pw       = "VOPasswort"
$uri      = "https://www.vereinonline.org/IHREDOMAIN/"
# Generated
$pass     = createMD5 -preMD5 $pw
# Minus entfernen
$pass     = $pass.replace("-","")


<# GetMembers, all #>
$daten    = @{}
$func     = "GetMembers"
# $response = VereinOnlineRequest -uri $uri -func $func -user $user -pass $pass -daten $daten


<# Find member for example: "nachname LIKE asdf%" #>
<# EMailAdressen sind unique (brauchbar, wenn man neuen Datensatz als "neu verifizieren moechte") #>
$varTest  = "mail@test.de"
$daten    = @{ "filter" = "g_email LIKE '$variablenTest'";"rolle" = "Mitglied"; }
$func     = "GetMembers"
# $response = VereinOnlineRequest -uri $uri -func $func -user $user -pass $pass -daten $daten


<# Find member by ID - just returns all not empty/default fields #>
$daten    = @{ "id" = "12345"; }
$func     = "GetMember"
# $response = VereinOnlineRequest -uri $uri -func $func -user $user -pass $pass -daten $daten


<# Create member - returns VereinOnlineID #>
$func          = "CreateMember"
<# Matching VereinOnline-Feldname zu Feld aus der internen Schnittstelle #>
foreach ($item in $myData){
   $daten = @{
      "id"              = "$item.id";
      "anrede"          = "$item.PersFirmaAns_Anrede";
      "titel"           = "$item.PersFirmaAns_Namenstitel";
      "vorname"         = "$item.PersFirmaAns_Vorname";
      "nachname"        = "$item.PersFirmaAns_Nachname";
      "funktion"        = "$item.funktion";
      "suchwoerter"     = "$item.PersFirma_Identnummer";
      "ansprache"       = "per Sie";
      "p_telefon"       = "$item.BezPersFirmaTel_EMail";
      "p_email"         = "$item.BezPersFirmaTel_Telefon";
      "firma"           = "$item.FirmaAns_FirmierungZeile1 $item.FirmaAns_FirmierungZeile2 $item.FirmaAns_FirmierungZeile3 $item.FirmaAns_FirmierungZeile4";
      "g_strasse"       = "$item.FirmaAns_Strasse $item.FirmaAns_Hausnummer $item.FirmaAns_Hausnummerzusatz";
      "g_plz"           = "$item.FirmaAns_Plz";
      "g_ort"           = "$item.FirmaAns_Ort";
      "g_land"          = "$item.FirmaAns_NatKz";
      "g_telefon"       = "$item.FirmaTel_Telefon";
      "g_email"         = "$item.FirmaTel_EMail";
      "beschreibung"    = "$item.Gruppe_Identnummer - $item.GruppeAns_Name1 - $Datum";
      "mandatsreferenz" = "$item.mandatsreferenz";
      "freigabe"        = "nur für Verwaltung";
      "aufnahmemitglied"= "$item.Beziehung_BeginnDatum";
      "gekuendigt"      = "$item.Beziehung_EndeDatum";
      "austrittsgrund"  = "$item.austrittsgrund";
      "rollen"          = "$item.Beziehung_FunktionText";
      "gruppen"         = "$item.gruppen";
      "mitgliedstyp"    = "Mitglied";
      "key_idperson"    = "$item.PersFirma_Identnummer";
      "key_idfirma"     = "$item.Firma_Identnummer";
      "key_periode"     = "$item.key_periode";
   }
   # $response = VereinOnlineRequest -uri $uri -func $func -user $user -pass $pass -daten $daten
}
Write-Host $response