Probleme mit HTTP Basic Authentification um auf API zuzugreifen

Hi Zusammen,
ich müsste Zugang zu einer API (FASTBILL) bekommen, um dort Kunden-Adressen automatisiert anzulegen.

Leider haben bei mir alle Versuche, die benötigten Parameter per HTTPS-Socket zu übergeben versagt und zu Fehlermeldungen geführt,
da ich nicht weiss, wie die Parameter im Rahmen der HTTP Basic Authentification korrekt übergeben werden müssen.

Anbei die Infos, wie ein entsprechender Request zu stellen ist.

Habt ihr da eine Idee?
Sorry, dass ich da auf dem Schlauch stehe.

Viele Grüße
Marc Simon

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

INFOS:
https://www.fastbill.com/api/fastbill/de/fundamentals.html#intro

Einführung
Die FastBill API ist als XML/JSON Webservice angelegt, bei dem alle Ressourcen über eine zentrale URL angesprochen werden. Alle API Anfragen werden als POST Requests mit XML oder JSON formatiertem Body an die Service-URL gesendet. Diese Dokumentation beschreibt die Kommunikation im XML Format

Allgemeine Service-URL:

https://my.fastbill.com/api/1.0/api.php
Jeder Request wird SSL-verschlüsselt übertragen

Authentifizierung
Login in eigenen Acccount

Die Standard-Authentifizierung geschieht über den bestehenden FastBill Benutzer (E-Mail Adresse) und den API-Key des betreffenden FastBill-Kontos. So erhalten Nutzer einen einfachen Zugang in den eigenen Account.

API-Zugriffe sind zustandslos, d.h. es werden keine Sitzungen gespeichert. Bei jedem Request müssen die E-Mail Adresse und der API- Key übermittelt werden.

Die Authentifizierung wird mithilfe der HTTP Basic Authentification durchgeführt:

curl -v -X POST \\ 
-u {E-Mail-Adresse}:{API-Key} \\ 
-H 'Content-Type: application/xml' \\ 
-d '{xml body}' \\ 
https://my.fastbill.com/api/1.0/api.php

Was für eine Fehlermeldung bekommst Du denn? Wie sieht Dein Code aus? Wie machst Du den Curl-Aufruf? Sind alle Daten korrekt escaped?

Bei uns funktioniert das ungefhr so mit curlmbs, ggf. umsetzen fr HTTPSocket. Das Prinzip ist aber das gleiche…

[code]dim nStatus, nHttpResponse, nPort as integer
dim MyHeader(), cURL, user, cpass as string

MyHeader.Append "Authorization: Basic "+EncodeBase64(cuser + “:” + cpass )
curl.OptionHTTPAuth = curl.kAUTH_ANYSAFE
curl.OptionUsername = cuser
curl.OptionPassword = cpass
if DebugBuild then
curl.CollectDebugData = True
end if

curl.OptionVerbose = True
curl.OptionFollowLocation = True
curl.OptionMaxRedirs = 2
curl.CollectOutputData = True
curl.OptionAcceptEncoding = “deflate”

if nPort > 0 then curl.OptionPort =nport // falls anderer Port
curl.OptionConnectionTimeout = 10
curl.OptionFailOnError = False
curl.OptionHTTPVersion = curl.kHTTP_VERSION_1_1
curl.OptionForbitReuse = True
// curl.OptionCustomRequest = yourrequestMethod
//curl.OptionPostFields = cFields // falls Post
curl.OptionHeader = True
curl.SetOptionHTTPHeader(MyHeaders) // von oben

curl.OptionURL = cURL // die URL

nStatus = curl.Perform
nHttpResponse = curl.GetInfoResponseCode()[/code]

@Beatrix:

Ich glaube da ist schon das Problem, dass ich über die XOJO Demo-App “RESTy” die entsprechenden Parameter “von Hand” eingetragen hat (was bei andern API´s aus gut geklappt hat) aber hier kommt immer die Fehlermeldung:

{"RESPONSE":{"ERRORS":["Login Error: Wrong API KEY or user credentials."]}}

Aber ich glaube, da ist auch schon das Problem.

@Dagmar:

Klasse, das hat das Problem gelöst.

Ich war gedanklich bei einer REST API, deswegen hat es nicht funktioniert.
Danke, Marc :slight_smile:

So hat es dann funktioniert:

  
  Dim j As NEW JSONItem
  j.value("SERVICE") = "customer.get"
  
  dim f As NEW JSONItem
  j.value("FILTER") = f
  
  
  dim c as new CURLSMBS
  c.OptionVerbose = true
  c.OptionURL = "https://my.fastbill.com/api/1.0/api.php"
  c.OptionUsername = "uuu"
  c.OptionPassword = "ppp"
  c.OptionPost = true
  c.OptionPostFields = j.ToString
  c.OptionSSLVersion = c.kSSLVersionDefault
  
  dim e as integer = c.Perform
  
  DebugTextArea.Text = c.DebugData
  ResultTextArea.Text = c.OutputData