ImportSOAP

Aus phynx application framework
Wechseln zu: Navigation, Suche

Mit dem ImportSOAP-Plugin können Sie Adressen und Rechnungen, die über eine SOAP-Schnittstelle zur Verfügung gestellt werden, in Ihr open3A importieren.

Schnittstelle

Die SOAP-Schnittstelle muss folgende Methoden zur Verfügung stellen:

public function getAdresse($adresseID);
public function getRechnung($rechnungID);

Rückgabewerte

Die Rückgabewerte der Methoden müssen wie folgt aussehen:

getAdresse()

Es muss eine Instanz der Klasse stdClass zurückgegeben werden, die folgende Attribute enthält:

  • anrede: int-Wert: 1 für "Frau", 2 für "Herr", 3 für "keine/Firma" und 4 für "Familie"
  • firma: string(200)
  • vorname: string(200)
  • nachname: string(200)
  • strasse: string(200)
  • nr: string(5)
  • plz: string(10)
  • ort: string(200)
  • land: string(30)
  • email: string(200)
  • ustidnr: string(50) optional

Also zum Beispiel sollte print_r() zurückgeben

stdClass Object
(
   [anrede] => 3
   [firma] => Firma
   [vorname] => Vorname
   [nachname] => Nachname
   [strasse] => Straße
   [nr] => 123
   [plz] => 12345
   [ort] => Ort
   [land] => Deutschland
   [email] => email@email.de
)

Wenn die Hausnummer (nr) leer ist, wird beim importier-Vorgang die Straße nach Leerzeichen zerlegt und der letzte Teil als Hausnummer eingetragen.

getRechnung()

Diese Methode muss ebenfalls eine Instanz der Klasse stdClass zurückgeben, die die Adresse und die Posten enthalten muss.

Die Adresse hat dabei die gleichen Attribute wie bei getAdresse();

Die Posten sind ebenfalls eine Instanz von stdClass, werden als Array im Attribut "Posten" gespeichert und müssen jeweils folgende Attribute besitzen:

stdClass Object
(
   [artikelNummer] => PL-0001
   [artikelNummerVariante] => PL-0001-2 //optional
   [menge] => 1
   [nettoPreis] => 20.00 //optional
   [mwst] => 19.00 //optional
   [name] => Artikelname aus Shop //optional
   [beschreibung] => Beschreibung aus Shop //optional
)

Die Attribute "artikelNummerVariante", "nettoPreis", "mwst", "name" und "beschreibung" sind dabei optional und können weggelassen werden.
Wenn Sie angegeben werden, überschreiben Sie die Werte aus open3A.

Die Artikel in open3A werden anhand der Artikelnummer in der Artikeldatenbank gesucht und zur Rechnung hinzugefügt.
Wenn eine Artikelnummer doppelt oder nicht vorkommt, wird eine entsprechende Fehlermeldung ausgegeben.

Also im konkreten Fall würde die Ausgabe von print_r() für die Rückgabe von getRechnung() aussehen:

stdClass Object
(
   [Adresse] => stdClass Object
       (
           [anrede] => 3
           [firma] => Firma
           [vorname] => Vorname
           [nachname] => Nachname
           [strasse] => Straße
           [nr] => 123
           [plz] => 12345
           [ort] => Ort
           [land] => Deutschland
           [email] => email@email.de
       )
   [Posten] => Array
       (
           [0] => stdClass Object
               (
                   [artikelNummer] => PL-0001
                   [menge] => 1
                   [nettoPreis] => 20.00
                   [mwst] => 19.00
               )
           [1] => stdClass Object
               (
                   [artikelNummer] => PL-0006
                   [menge] => 1
                   [nettoPreis] => 10.00
                   [mwst] => 19.00
               )
           [2] => stdClass Object
               (
                   [artikelNummer] => PL-0002
                   [menge] => 1
                   [nettoPreis] => 20.00
                   [mwst] => 19.00
               )
       )
)

Authentifizierung

Zur Authentifizierung wird ein APIKey an den SOAP-Server übertragen, der in der Umgebungsvariablen $_SERVER["PHP_AUTH_PW"] zu finden ist.

Beispielimplementierung

Hier sehen Sie eine Implementierung, wie sie für open3A.de verwendet wird:

$S = new SoapServer(null, array('uri' => 'https://www.open3a.de/'));
$S->setClass('o3AdeSOAP');
$S->handle();

class o3AdeSOAP {
	public static $APIKey = "secretKey";

	public function testAuth(){
		if($_SERVER["PHP_AUTH_PW"] != o3AdeSOAP::$APIKey)
			throw new SoapFault("Server","Authentication failed");

		return "Authentifizierung erfolgreich!";
	}

	public function getRechnung($rechnungID){
		if($_SERVER["PHP_AUTH_PW"] != o3AdeSOAP::$APIKey)
			throw new SoapFault("Server","Authentication failed");

		$B = new Bestellung($rechnungID);
		
		$Object = new stdClass();
		$Object->Adresse = $this->getAdresse($B->getAdresseID());

		$Posten = array();

		while($t = $B->getNextElement()){
			$c = new availablePlugins($t[0]);

			$P = new stdClass();
			$P->artikelNummer = $c->A("artikelNummer");
			$P->menge = $t[1];
			$P->nettoPreis = $c->A("preis");
			$P->mwst = $c->A("mwst");

			$Posten[] = $P;
		}

		$Object->Posten = $Posten;

		return $Object;
	}

	public function getAdresse($adresseID){
		if($_SERVER["PHP_AUTH_PW"] != o3AdeSOAP::$APIKey)
			throw new SoapFault("Server","Authentication failed");

		$A = new Adresse($adresseID);

		$Adresse = new stdClass();
		$Adresse->anrede = $A->A("anrede");
		$Adresse->firma = $A->A("firma");
		$Adresse->vorname = $A->A("vorname");
		$Adresse->strasse = $A->A("strasse");
		$Adresse->nr = $A->A("nr");
		$Adresse->plz = $A->A("plz");
		$Adresse->ort = $A->A("ort");
		$Adresse->land = $A->A("land");
		$Adresse->email = $A->A("email");

		return $Adresse;
	}
}