SOAP/RPC in PHP

Hilfe zu Znuny Problemen aller Art
Locked
buuh
Znuny newbie
Posts: 4
Joined: 29 Nov 2007, 16:24

SOAP/RPC in PHP

Post by buuh »

Hallo zusammen!
Ich würde gerne einige RPCs in PHP ausführen. Aber irgendwie komme ich dabei nicht wirklich weiter. Hat hier jemand schon Erfahrungen gesammelt bzw. ein funktionierendes Beispiel parat?

Ich denke, mein Hauptproblem ist die Angabe "uri" beim Erstellen des Clients. Was genau muss hier stehen?

Hier mein Ansatz:

Code: Select all

<?php
$client = new SoapClient(null, array('location'  => "http://localhost/otrs/rpc.pl",
                                     'uri'       => "TicketObject",
                                     'trace'     => 1,
                                     'login'     => "http-user",
                                     'password'  => "sein-passwort",
                                     'style'     => SOAP_RPC,
                                     'use'       => SOAP_ENCODED));

$parameters = array(
  new SoapParam(1, 'TicketID'),
  new SoapParam(1, 'UserID')
);

try{
    $client->TicketGet($parameters[0], $parameters[1]);
    // Ebenfalls ausprobiert:
    // $client->__soapCall("TicketGet", $parameters);
} catch (SoapFault $fault) {
    echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
    echo "RESPONSE:\n" . $client->__getLastResponse() . "\n";

    trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
    exit;
}

print_r($result);

?>
Schonmal vielen Dank,
Daniel
buuh
Znuny newbie
Posts: 4
Joined: 29 Nov 2007, 16:24

SOAP/RPC in PHP

Post by buuh »

Nochmals Hallo!
Es funktioniert endlich! Hier der Code:

Code: Select all

<?php

echo "<pre>";

$client = new SoapClient(null, array('location'  => "http://localhost/otrs/rpc.pl",
                                     'uri'       => "Core",
                                     'trace'     => 1,
                                     'login'     => "http-user",
                                     'password'  => "sein-passwort",
                                     'style'     => SOAP_RPC,
                                     'use'       => SOAP_ENCODED));

try{
    $result = $client->__soapCall("Dispatch", array("some_user", "some_pass", "TicketObject", "TicketCreateNumber"));
} catch (SoapFault $fault) {
    echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
    echo "RESPONSE:\n" . $client->__getLastResponse() . "\n";
    echo "</pre>";
    exit;
}

    echo "RESPONSE:\n" . $client->__getLastResponse() . "\n";

echo "</pre>";

?>
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

SOAP/RPC in PHP

Post by Andre Bauer »

Nein, hab ich mich noch nie mit beschäftigt.

Was macht dein Script?
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
buuh
Znuny newbie
Posts: 4
Joined: 29 Nov 2007, 16:24

SOAP/RPC in PHP

Post by buuh »

Das Skript ruft einfach nur die Funktion "TicketCreateNumber" remote über die SOAP Schnittstelle auf und liefert die nächste Ticketnummer. Ist an sich nichts besonderes, allerdings in PHP nicht ganz so einfach wie man es sich vorstellt. So ganz funktioniert es auch noch nicht, sobald man Parameter an die eigentliche Funktion (Also zum Beispiel die TicketID bei TicketGet) und nicht nur an die Dispatch Funktion übergeben muss, gibt es Probleme. Falls hier jemand eine Lösung hat, bitte her damit ;)

Der bisherige Knackpunkt war wie vermutet die URI Angabe beim Erstellen des SoapClients. Hier muss man das Package des Perl-Skripts (also "Core") angeben... Hätte ich eigentlich auch eher drauf kommen können... :)

Zu dem Thema "OTRS-SOAP in PHP nutzen" gibt es leider auch erstaunlich wenig Informationen im Internet... :(

Daniel
buuh
Znuny newbie
Posts: 4
Joined: 29 Nov 2007, 16:24

SOAP/RPC in PHP

Post by buuh »

So, nach langem Probieren klappen jetzt auch die weiteren Parameter. Den Namen des Parameters und den Wert einfach hintereinander übergeben:

Code: Select all

$client->__soapCall("Dispatch", array("some_user", "some_pass", "TicketObject", "TicketGet", "TicketID", 1));
Vielleicht hilft es ja mal dem einen oder anderen...

Cheers,
Daniel
Locked