vrijdag 6 maart 2009

API van TransIP.nl aanroepen vanuit .Net

Smallweb maakt sinds kort gebruikt van een aantal diensten van TransIP. TransIP biedt hierbij de mogelijkheid om gebruik te maken van een API. Deze API is een service die SOAP gebaseerd is en biedt functionaliteit om domeinen te bekijken die je via TransIP geregistreerd hebt, maar ook om domeinen te registreren, DNS records te wijzigen, enz.

TransIP heeft op haar website documentatie geplaatst welke PHP gerelateerd is. Zelf ontwikkel ik voornamelijk op het Microsoft platform en had dus de behoefte om deze API in .Net te gebruiken. Hieronder een korte uitleg om dit eenvoudig op te zetten.

  1. Om gebruik van de API te kunnen maken dien je eerst klant te worden bij TransIP. Hierna kan je in het controlepaneel de API inschakelen, waarbij je een wachtwoord voor je gebruikersnaam op kan geven.
    Let op: dit wachtwoord hoeft niet hetzelfde wachtwoord te zijn als van je reguliere TransIP account.

  2. Maak in Microsoft Visual Studio een project aan (in dit voorbeeld heb ik een Web Application project in Visual Studio 2008 aangemaakt)

  3. Voeg aan dit project een web reference toe door met de rechter muisknop op het project in de Solution Explorer te klikken en Add Web Reference te selecteren.

  4. Vul in het nieuwe venster de volgende URL in: https://api.transip.nl/wsdl/?service=DomainService (deze kan je terugvinden in de API documentatie van TransIP) en klik op Go.
    Hierna krijg je een aantal keer onderstaand venster te zien, maar hier kan je gewoon op Ja / Yes klikken.


    Geef de service reference de naam 'DomainService' en klik op "Add reference"


    De Web Reference wordt nu aan het project toegevoegd.


  5. Om met de API van TransIP te kunnen communiceren dien je 3 cookies in het service request mee te sturen, namelijk:
    login = het account bij TransIP
    hash = een string die volgens het volgende formaat opgebouwd is: 'login:password@ipadres', waarbij login het account bij TransIP is; het password is het wachtwoord wat je hebt ingesteld bij de API instellingen in het controlepaneel van TransIP; het IP adres is het internet IP adres van de computer waarmee je een verbinding maakt met de SOAP service.
    Deze string dient geëncrypt te worden met behulp van MD5.
    mode = readonly of readwrite. Met readonly kan je de API testen en met readwrite worden wijzigingen daadwerkelijk doorgevoerd.
    Voor het doorgeven van deze waardes heb ik een aantal constanten aangemaakt. Natuurlijk is het veel beter om deze waardes uit een configuratiebestand te lezen, maar voor dit voorbeeld houden we het even simpel.

    private const string TransIpLogin = "username";
    private const string TransIpPassword = "password";
    private const string TransIpIpAddress = "192.168.1.1";
    private const string TransIpMode = "readonly";

  6. Nu voegen we een 'Connect' methode toe aan de klasse waarin we aan het programmeren zijn, om de verbinding met de SOAP service tot stand te brengen

    public DomainServiceService Connect()
    {
    //Instancieer service
    DomainServiceService service = new DomainServiceService();

    //Valideer de server certicicaat (vanwegde de HTTPS conenctie)
    ServicePointManager.ServerCertificateValidationCallback =
    new RemoteCertificateValidationCallback(
    delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
    return true;
    });

    //Genereer de hash voor authenticatie
    string hashData = string.Format("{0}:{1}@{2}", TransIpLogin, TransIpPassword, TransIpIpAddress);
    string hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(hashData, "MD5").ToLower();

    //Voeg de 3 authenticatie/configuratie cookies toe
    CookieContainer cookies = new CookieContainer();
    cookies.SetCookies(new Uri(service.Url), string.Format("login={0}", TransIpLogin));
    cookies.SetCookies(new Uri(service.Url), string.Format("hash={0}", hash));
    cookies.SetCookies(new Uri(service.Url), string.Format("mode={0}", TransIpMode));
    service.CookieContainer = cookies;

    //Retourneer de service instantie
    return service;
    }
    Deze 'Connect' methode geeft een instantie van de service klasse terug, waarmee we domeinen kunnen gaan beheren.

  7. Nu kunnen we bijvoorbeeld de lijst met geregistreerde domeinnamen (geregistreerd via TransIP) ophalen:

    DomainServiceService service = this.Connect();
    this.txtDomains.Text = string.Join("\r\n", service.getDomainNames());
    In dit voorbeeld wordt de lijst met domeinen in een TextBox control getoont

    óf WHOIS gegevens van een domein ophalen:

    DomainServiceService service = this.Connect();
    this.txtWhois.Text = service.getWhois(this.txtDomain.Text);
    In dit voorbeeld wordt de WHOIS informatie in een TextBox control getoont.

  8. Voor een overzicht van alle functies in de API verwijs ik je door naar de API documentatie van TransIP

Bovenstaande voorbeeld Web Project kan je hier eventueel downloaden.

Succes ermee !!

4 opmerkingen:

Unknown zei

Heb je deze toevallig ook voor Visual studio 2010 beschikbaar? Het lukt me helaas niet goed om zelf over te zetten. Alvast bedankt!

Danny Scheelings zei

Wat lukt er dan niet? Ik heb net de Solution geopend met VS2010. Deze heeft het project geconverteerd en het werkt gewoon.

Unknown zei

Laat maar hij werkt, top dat je dit gemaakt hebt scheelt mij weer uitzoeken!

Unknown zei

Een mooie post, helaas is die alleen verouderd. Is er iemand die misschien voor de nieuwe TransIP API 4.0 een voorbeeld heeft in .net?