Hallo,
normalerweise verwenden Shopbetreiber die NuSoap Klasse in ihrem Online Shop für die
Anbindung an Payment - Lösungen so z.B bei iclear
http://foren.myoos.de/index.php?showtopic=112
Als MyOOS Shopbetreiber sollte man aber seinen Kunden auch einen eigenen WebService anbieten
Die Entwicklung eines WebServices mit MyOOS ist kein Problem.
Eine Einführung bei Wiki
http://de.wikipedia.org/wiki/SOAP
und
http://www.torsten-horn.de/techdocs/soap.htm
Im Forum habe ich Auszüge aus einem
Soap Server
http://foren.myoos.de/index.php?showtopic=162
und
SoapClient
http://foren.myoos.de/index.php?showtopic=161
veröffentlicht
Und die Nutzung von Soap in Office hier
http://foren.myoos.de/index.php?showtopic=163
Für den Workshop ist eine aktuelle PHP 5.x Version notwendig.
Auf Feedback bin ich immer neugierig.
Eigene Webservices entwickeln
Wir installieren einen Cleint
Bei Amazon würde der Cleint so aussehen
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$wsdl_url =
"http://soap.amazon.com/schemas3/AmazonWebServices.wsdl";
$client = new SoapClient($wsdl_url);
var_dump($client->__getFunctions());<!--c2-->[/align]<!--ec2-->
Ausgabe
array(26) {
[0]=>
string(70) "ProductInfo KeywordSearchRequest(KeywordRequest $KeywordSearchRequest)"
[1]=>
string(79) "ProductInfo TextStreamSearchRequest(TextStreamRequest $TextStreamSearchRequest)"
[2]=>
string(64) "ProductInfo PowerSearchRequest(PowerRequest $PowerSearchRequest)"
[3]=>
string(79) "ProductInfo BrowseNodeSearchRequest(BrowseNodeRequest $BrowseNodeSearchRequest)"
[4]=>
string(61) "ProductInfo AsinSearchRequest(AsinRequest $AsinSearchRequest)"
[5]=>
string(75) "ProductLineArray BlendedSearchRequest(BlendedRequest $BlendedSearchRequest)"
[6]=>
string(58) "ProductInfo UpcSearchRequest(UpcRequest $UpcSearchRequest)"
[7]=>
string(58) "ProductInfo SkuSearchRequest(SkuRequest $SkuSearchRequest)"
[8]=>
string(67) "ProductInfo AuthorSearchRequest(AuthorRequest $AuthorSearchRequest)"
[9]=>
string(67) "ProductInfo ArtistSearchRequest(ArtistRequest $ArtistSearchRequest)"
[10]=>
string(64) "ProductInfo ActorSearchRequest(ActorRequest $ActorSearchRequest)"
[11]=>
string(85) "ProductInfo ManufacturerSearchRequest(ManufacturerRequest $ManufacturerSearchRequest)"
[12]=>
string(73) "ProductInfo DirectorSearchRequest(DirectorRequest $DirectorSearchRequest)"
[13]=>
string(83) "ListingProductDetails ExchangeSearchRequest(ExchangeRequest $ExchangeSearchRequest)"
[14]=>
string(76) "ProductInfo ListManiaSearchRequest(ListManiaRequest $ListManiaSearchRequest)"
[15]=>
string(73) "ProductInfo WishlistSearchRequest(WishlistRequest $WishlistSearchRequest)"
[16]=>
string(90) "SellerProfile SellerProfileSearchRequest(SellerProfileRequest $SellerProfileSearchRequest)"
[17]=>
string(68) "SellerSearch SellerSearchRequest(SellerRequest $SellerSearchRequest)"
[18]=>
string(88) "MarketplaceSearch MarketplaceSearchRequest(MarketplaceRequest $MarketplaceSearchRequest)"
[19]=>
string(79) "ProductInfo SimilaritySearchRequest(SimilarityRequest $SimilaritySearchRequest)"
[20]=>
string(83) "ShoppingCart GetShoppingCartRequest(GetShoppingCartRequest $GetShoppingCartRequest)"
[21]=>
string(89) "ShoppingCart ClearShoppingCartRequest(ClearShoppingCartRequest $ClearShoppingCartRequest)"
[22]=>
string(98) "ShoppingCart AddShoppingCartItemsRequest(AddShoppingCartItemsRequest $AddShoppingCartItemsRequest)"
[23]=>
string(107) "ShoppingCart RemoveShoppingCartItemsRequest(RemoveShoppingCartItemsRequest $RemoveShoppingCartItemsRequest)"
[24]=>
string(107) "ShoppingCart ModifyShoppingCartItemsRequest(ModifyShoppingCartItemsRequest $ModifyShoppingCartItemsRequest)"
[25]=>
string(118) "GetTransactionDetailsResponse GetTransactionDetailsRequest(GetTransactionDetailsRequest $GetTransactionDetailsRequest)"
}
Bei Amazon würde der Cleint so aussehen
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1-->$wsdl_url =
"http://soap.amazon.com/schemas3/AmazonWebServices.wsdl";
$client = new SoapClient($wsdl_url);
var_dump($client->__getFunctions());<!--c2-->[/align]<!--ec2-->
Ausgabe
array(26) {
[0]=>
string(70) "ProductInfo KeywordSearchRequest(KeywordRequest $KeywordSearchRequest)"
[1]=>
string(79) "ProductInfo TextStreamSearchRequest(TextStreamRequest $TextStreamSearchRequest)"
[2]=>
string(64) "ProductInfo PowerSearchRequest(PowerRequest $PowerSearchRequest)"
[3]=>
string(79) "ProductInfo BrowseNodeSearchRequest(BrowseNodeRequest $BrowseNodeSearchRequest)"
[4]=>
string(61) "ProductInfo AsinSearchRequest(AsinRequest $AsinSearchRequest)"
[5]=>
string(75) "ProductLineArray BlendedSearchRequest(BlendedRequest $BlendedSearchRequest)"
[6]=>
string(58) "ProductInfo UpcSearchRequest(UpcRequest $UpcSearchRequest)"
[7]=>
string(58) "ProductInfo SkuSearchRequest(SkuRequest $SkuSearchRequest)"
[8]=>
string(67) "ProductInfo AuthorSearchRequest(AuthorRequest $AuthorSearchRequest)"
[9]=>
string(67) "ProductInfo ArtistSearchRequest(ArtistRequest $ArtistSearchRequest)"
[10]=>
string(64) "ProductInfo ActorSearchRequest(ActorRequest $ActorSearchRequest)"
[11]=>
string(85) "ProductInfo ManufacturerSearchRequest(ManufacturerRequest $ManufacturerSearchRequest)"
[12]=>
string(73) "ProductInfo DirectorSearchRequest(DirectorRequest $DirectorSearchRequest)"
[13]=>
string(83) "ListingProductDetails ExchangeSearchRequest(ExchangeRequest $ExchangeSearchRequest)"
[14]=>
string(76) "ProductInfo ListManiaSearchRequest(ListManiaRequest $ListManiaSearchRequest)"
[15]=>
string(73) "ProductInfo WishlistSearchRequest(WishlistRequest $WishlistSearchRequest)"
[16]=>
string(90) "SellerProfile SellerProfileSearchRequest(SellerProfileRequest $SellerProfileSearchRequest)"
[17]=>
string(68) "SellerSearch SellerSearchRequest(SellerRequest $SellerSearchRequest)"
[18]=>
string(88) "MarketplaceSearch MarketplaceSearchRequest(MarketplaceRequest $MarketplaceSearchRequest)"
[19]=>
string(79) "ProductInfo SimilaritySearchRequest(SimilarityRequest $SimilaritySearchRequest)"
[20]=>
string(83) "ShoppingCart GetShoppingCartRequest(GetShoppingCartRequest $GetShoppingCartRequest)"
[21]=>
string(89) "ShoppingCart ClearShoppingCartRequest(ClearShoppingCartRequest $ClearShoppingCartRequest)"
[22]=>
string(98) "ShoppingCart AddShoppingCartItemsRequest(AddShoppingCartItemsRequest $AddShoppingCartItemsRequest)"
[23]=>
string(107) "ShoppingCart RemoveShoppingCartItemsRequest(RemoveShoppingCartItemsRequest $RemoveShoppingCartItemsRequest)"
[24]=>
string(107) "ShoppingCart ModifyShoppingCartItemsRequest(ModifyShoppingCartItemsRequest $ModifyShoppingCartItemsRequest)"
[25]=>
string(118) "GetTransactionDetailsResponse GetTransactionDetailsRequest(GetTransactionDetailsRequest $GetTransactionDetailsRequest)"
}
Für den WebService habe ich die Subdomains soap für den WebService eingereichtet.
Damit der Cleint für den Anwender übersichtlicher bleibt verwende ich WSDL auf dem Server.
http://soap.myoos.de/wsdl/testserver.wsdl
cleint.php einfach auf dem eigenen Rechner ablegen
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
echo("\nDumping client object functions:\n");
var_dump($client->__getFunctions());<!--c2-->[/align]<!--ec2-->
Ausgabe
Damit erhält der Kunde eine Liste der SOAP-Funktionen zurück. Diese Funktion ist nur
im WSDL-Modus verfügbar.
Information im PHP-Handbuch
http://de3.php.net/manual/de/function.s ... ctions.php
Wir erhalten un unserem Server zurück
mit __soapCall rufen wir die Funktion auf
cleint.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nReturning value of __soapCall() call: ".$return);<!--c2-->[/align]<!--ec2-->
http://de3.php.net/manual/de/function.s ... t-call.php
Ausgabe
mit __getLastRequestHeaders können wir uns den den
SOAP-Anfrage-Header anzeigen lassen
cleint.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nDumping request headers:\n"
.$client->__getLastRequestHeaders());<!--c2-->[/align]<!--ec2-->
http://de3.php.net/manual/de/function.s ... eaders.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> echo("\nDumping request:\n".$client->__getLastRequest());<!--c2-->[/align]<!--ec2-->
Damit der Cleint für den Anwender übersichtlicher bleibt verwende ich WSDL auf dem Server.
http://soap.myoos.de/wsdl/testserver.wsdl
cleint.php einfach auf dem eigenen Rechner ablegen
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
echo("\nDumping client object functions:\n");
var_dump($client->__getFunctions());<!--c2-->[/align]<!--ec2-->
Ausgabe
Damit erhält der Kunde eine Liste der SOAP-Funktionen zurück. Diese Funktion ist nur
im WSDL-Modus verfügbar.
Information im PHP-Handbuch
http://de3.php.net/manual/de/function.s ... ctions.php
Wir erhalten un unserem Server zurück
Dumping client object functions:
array(1) {
[0]=>
string(30) "string hello(string $reqParam)"
}
mit __soapCall rufen wir die Funktion auf
cleint.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nReturning value of __soapCall() call: ".$return);<!--c2-->[/align]<!--ec2-->
http://de3.php.net/manual/de/function.s ... t-call.php
Ausgabe
Returning value of __soapCall() call: Hello world! - With WSDL
mit __getLastRequestHeaders können wir uns den den
SOAP-Anfrage-Header anzeigen lassen
cleint.php
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> $client = new SoapClient("http://soap.myoos.de/wsdl/testserver.wsdl",
array('soap_version' => SOAP_1_2,'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nDumping request headers:\n"
.$client->__getLastRequestHeaders());<!--c2-->[/align]<!--ec2-->
http://de3.php.net/manual/de/function.s ... eaders.php
mit __getLastRequest erhalten wir die letzte SOAP-Anfrage zurückDumping request headers:
POST /test/server.php HTTP/1.1
Host: soap.myoos.de
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.2.6
Content-Type: application/soap+xml; charset=utf-8; action=""
Content-Length: 459
<!--c1--><div class='codetop'>QUELLTEXT[/align]<div class='codemain'><!--ec1--> echo("\nDumping request:\n".$client->__getLastRequest());<!--c2-->[/align]<!--ec2-->
Dumping request:Dumping request headers:
POST /test/server.php HTTP/1.1
Host: soap.myoos.de
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.2.6
Content-Type: application/soap+xml; charset=utf-8; action=""
Content-Length: 459
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns1="urn:xmethodsTestServer"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
<env:Body>
<ns1:hello
env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<reqParam xsi:type="xsd:string">world</reqParam>
</ns1:hello>
</env:Body>
</env:Envelope>