| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

21-05-2010, 20:39
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Perfekt, und warum wird die Funktion nicht erkannt bzw. warum bekomme ich einen 500er Error? Wenn ich vor $server ein:
PHP-Code:
echo file_get_contents('Amazon/FWSInventory/Mock/ListUpdatedInventorySupplyResponse.xml', TRUE);
eingebe, bekomme ich ein SOAP-ENV:ClientBad Request.
Bei:
PHP-Code:
function ListUpdatedInventorySupply($request){
return file_get_contents('Amazon/FWSInventory/Mock/ListUpdatedInventorySupplyResponse.xml', TRUE);
}
$server = new SoapServer("AmazonFBAInventory.wsdl");
$server->addFunction("ListUpdatedInventorySupply");
$server->handle();
gibt es einen 500er. Muss ich die Funktionen in eine Klasse einbinden und dann die Klasse an $server übergeben?
|

21-05-2010, 21:24
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Alles was das Serverskript ausgibt, landet beim Client als Antwort. Insofern sind deine Beobachtungen nur logisch. Wenn du dort was debuggen willst, musst du es in ein Logfile oder ins Syslog schreiben.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-05-2010, 00:07
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Bekomme jetzt folgenden Fehler im Client angezeigt, wenn die Server Datei fehlerhaft ist:
Warning: DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 2...
Wenn nicht, gibt es einen Error 500.
Geändert von herrentor (22-05-2010 um 00:37 Uhr)
|

24-05-2010, 16:41
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
SoapServer XML Datei übertragen
Hey,
ich komme einfach nicht weiter. Ich will doch einfach nur eine XML Datei durch Soap übertragen. Wird die Datei lokal eingelesen, klappt es auch, aber irgendwas stimmt nicht mit dem Webservice.
Mein SoapServer:
PHP-Code:
function ListUpdatedInventorySupply($request){
return $xml = file_get_contents('Amazon/FWSInventory/Mock/ListUpdatedInventorySupplyResponse.xml', TRUE);
}
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("https://fba.herrentor.de/AmazonFBAInventory.wsdl");
$server->addFunction("ListUpdatedInventorySupply");
$server->addFunction("GetInventorySupply");
$server->handle();
Mein SoapClient:
PHP-Code:
public function listUpdatedInventorySupply($request)
{
require_once ('Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php');
return Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse::fromXML(
$this->_invoke('ListUpdatedInventorySupply',$this->_convertListUpdatedInventorySupply($request)));
}
private function _convertListUpdatedInventorySupply($request) {
$parameters = array();
$parameters['Action'] = 'ListUpdatedInventorySupply';
if ($request->isSetNumberOfResultsRequested()) {
$parameters['NumberOfResultsRequested'] = $request->getNumberOfResultsRequested();
}
if ($request->isSetQueryStartDateTime()) {
$parameters['QueryStartDateTime'] = $request->getQueryStartDateTime();
}
if ($request->isSetResponseGroup()) {
$parameters['ResponseGroup'] = $request->getResponseGroup();
}
return $parameters;
}
private function _invoke($actionName, $request)
{
$_soapClient = new SoapClient('http://web542.srv1.sysproserver.de/amazon/AmazonFBAInventory.wsdl');
return $_soapClient->$actionName($request);
}
So funktioniert der Client:
PHP-Code:
public function listUpdatedInventorySupply($request)
{
require_once ('Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php');
return Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse::fromXML(
file_get_contents('Amazon/FWSInventory/Mock/ListUpdatedInventorySupplyResponse.xml', TRUE));
}
Die ausgegebene Fehlermeldung ist:
Warning: DOMDocument::loadXML() expects parameter 1 to be string, object given in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 77 Fatal error: Uncaught exception 'Exception' with message 'Unable to construct Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse from provided XML. Make sure that ListUpdatedInventorySupplyResponse is a root element' in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php:84 Stack trace: #0 /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/SOAPClient.php(90): Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse::fromXML(Object(stdClass)) #1 /var/www/web542/html/oscommerce/catalog/admin/Amazon/functions.inc.php(106): Amazon_FWSInventory_SOAPClient->listUpdatedInventorySupply(Object(Amazon_FWSInventory_Model_ListUpdatedInventorySupplyRequest)) #2 /var/www/web542/html/oscommerce/catalog/admin/amazon_stock.php(68): invokeListUpdatedInventorySupply(Object(Amazon_FWSInventory_SOAPClient), Object(Amazon_FWSInventory_Model_ListUpdatedInventorySupplyRequest)) #3 {main} thrown in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 84
Wie kann ich die XML Datei übergeben, damit sie so ankommt, als wenn Sie lokal geladen worden wäre? Vielleicht etwas in der WSDL Datei falsch?
https://fba.herrentor.de/AmazonFBAInventory.wsdl
Habe einfach die fertige WSDL Datei von Amazon genommen und ganz unten die Soap Adresse bei Service geändert, so dass zu meinem Server weitergeleitet wird. Der Name des Service ist AmazonFBAInventory, eventuell das als Klasse dem SoapServer übergeben?
Danke Euch im voraus schon mal.
|

24-05-2010, 17:18
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
|
expects parameter 1 to be string, object given
|
Du übergibts ein Objekt und keine Zeichenkette. Schau dir ggf. mal die magische Methode __toString an. Vielleicht liegt es daran. Aber
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

24-05-2010, 17:31
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Die Fehlermeldung kommt allerdings auch wenn ich einen String übergebe.
|

24-05-2010, 19:41
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von herrentor
Die Fehlermeldung kommt allerdings auch wenn ich einen String übergebe.
|
Ist sie denn wirklich identisch?
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

24-05-2010, 19:58
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Ja, exakt die gleiche XML Datei. Hab gerade auch nochmal die eine überschrieben um sicher zu gehen. Der Fehler bleibt.
Anscheinend wird noch etwas anderes vom Server übergeben. Wenn ich das Übergebene per echo ausgeben will, wird dieser Fehler geworfen:
Catchable fatal error: Object of class stdClass could not be converted to string in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 77
|

24-05-2010, 20:41
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Auch wenn ich herzlich wenig Ahnung von deinem Problem habe, so denke ich, dass du dich wirklich mal mit __toString beschäftigen solltest. Ich bekam diese Meldungen immer, als ich ein Projekt von PHP4 auf 5 umstellen musste. Und das hat immer geholfen.
Peter
PS: Vielleicht liegt es auch an einer alten osCommerce-Version in Kombination mit einer neuen PHP5-Version,
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

24-05-2010, 21:22
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Hab es jetzt mal in einer Testdatei überprüft ob es an osCommerce liegen kann, denke aber nicht, weil ich die gleiche Fehlermeldung bekomme. Die Testdatei habe ich zwar aus einem osCommerce Ordner aufgerufen, aber ansonsten war sie davon unabhängig.
Catchable fatal error: Object of class stdClass could not be converted to string in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 77
Kann es eventuell auch an falschen Server Einstellungen liegen?
Geändert von AmicaNoctis (25-05-2010 um 14:11 Uhr)
Grund: Doppelposting
|

25-05-2010, 14:10
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von herrentor
Kann es eventuell auch an falschen Server Einstellungen liegen?
|
Unwahrscheinlich. Was steht denn in besagter Zeile 77? Du zeigst uns zwar ab und an irgendwelche Dateien, aber nicht die Namen dazu. Ich konnte jedenfalls noch nicht erkennen, welches Script jetzt mit welchem Statement diesen Fehler verursacht.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

25-05-2010, 14:39
|
|
herrentor
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 59
|
|
Ok, sorry. Zeile 77 der Datei ListUpdatedInventorySupplyResponse war für den Fehler echo $xml.
Warning: DOMDocument::loadXML() expects parameter 1 to be string, object given in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 77 Fatal error: Uncaught exception 'Exception' with message 'Unable to construct Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse from provided XML. Make sure that ListUpdatedInventorySupplyResponse is a root element' in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php:84 Stack trace: #0 /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/SOAPClient.php(90): Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse::fromXML(Object(stdClass)) #1 /var/www/web542/html/oscommerce/catalog/admin/Amazon/functions.inc.php(106): Amazon_FWSInventory_SOAPClient->listUpdatedInventorySupply(Object(Amazon_FWSInventory_Model_ListUpdatedInventorySupplyRequest)) #2 /var/www/web542/html/oscommerce/catalog/admin/amazon_stock.php(68): invokeListUpdatedInventorySupply(Object(Amazon_FWSInventory_SOAPClient), Object(Amazon_FWSInventory_Model_ListUpdatedInventorySupplyRequest)) #3 {main} thrown in /var/www/web542/html/oscommerce/catalog/admin/Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php on line 84
Vielleicht nochmal ausführlich:
amazon_stock.php
PHP-Code:
include_once ('Amazon/functions.inc.php');
$array = array('NumberOfResultsRequested' => MAX_DISPLAY_SEARCH_RESULTS,
'QueryStartDateTime' => "2010-01-01T00:00:00Z",
'ResponseGroup' => "Basic");
$request = new Amazon_FWSInventory_Model_ListUpdatedInventorySupplyRequest($array);
invokeListUpdatedInventorySupply($serviceInventory, $request);
functions.inc.php
PHP-Code:
$serviceInventory = new Amazon_FWSInventory_SOAPClient(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
function invokeListUpdatedInventorySupply(Amazon_FWSInventory_Interface $service, $request)
{
try {
$response = $service->listUpdatedInventorySupply($request);
$listUpdatedInventorySupplyResult = $response->getListUpdatedInventorySupplyResult();
$merchantSKUSupplyList = $listUpdatedInventorySupplyResult->getMerchantSKUSupply();
foreach ($merchantSKUSupplyList as $merchantSKUSupply) {
$products_query_raw = "select pd.products_id, pd.products_name, l.name from " .
TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_LANGUAGES . " l where pd.products_id = "
. $merchantSKUSupply->getMerchantSKU() . " and l.languages_id = pd.language_id and l.languages_id = 2";
$products_split = new splitPageResults($HTTP_GET_VARS['page'], 1,
$products_query_raw, $products_query_numrows);
$products_query = tep_db_query($products_query_raw);
while ($products = tep_db_fetch_array($products_query)) {
$rows++;
if (strlen($rows) < 2) {
$rows = '0' . $rows;
}
echo '<tr class="dataTableRow" onMouseOver="rowOverEffect(this)"
onMouseOut="rowOutEffect(this)" onClick="document.location.href='. tep_href_link(FILENAME_CATEGORIES,
'action=new_product_preview&read=only&pID='. $products['products_id'] . '&origin='
. FILENAME_STATS_PRODUCTS_VIEWED . '?page=' . $HTTP_GET_VARS['page'], 'NONSSL') . '">
<td class="dataTableContent" align="center">' . $rows . '. </td>
<td class="dataTableContent">' . $merchantSKUSupply->getMerchantSKU() . '</td>
<td class="dataTableContent"><a href="' . tep_href_link(FILENAME_CATEGORIES,
'action=new_product_preview&read=only&pID=' . $products['products_id'] . '&origin='
. FILENAME_STATS_PRODUCTS_VIEWED . '?page=' . $HTTP_GET_VARS['page'], 'NONSSL') . '">'
. $products['products_name'] . '</a> (' . $products['name'] . ') </td>
<td class="dataTableContent" align="left">' . $merchantSKUSupply->getASIN() . ' </td>
<td class="dataTableContent" align="center">' . $merchantSKUSupply->getTotalSupplyQuantity()
.' </td>
<td class="dataTableContent" align="center">' . $merchantSKUSupply->getInStockSupplyQuantity()
.' </td>
</tr>';
}
}
} catch (Amazon_FWSInventory_Exception $ex) {
echo("Caught Exception: " . $ex->getMessage() . "\n");
echo("Response Status Code: " . $ex->getStatusCode() . "\n");
echo("Error Code: " . $ex->getErrorCode() . "\n");
echo("Error Type: " . $ex->getErrorType() . "\n");
echo("Request ID: " . $ex->getRequestId() . "\n");
echo("XML: " . $ex->getXML() . "\n");
}
}
SOAPClient.php Klasse
PHP-Code:
public function listUpdatedInventorySupply($request)
{
require_once ('Amazon/FWSInventory/Model/ListUpdatedInventorySupplyResponse.php');
return Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse::fromXML(
$this->invoke('ListUpdatedInventorySupply', $this->convertListUpdatedInventorySupply($request)));
}
private function convertListUpdatedInventorySupply($request) {
$parameters = array();
$parameters['Action'] = 'ListUpdatedInventorySupply';
if ($request->isSetNumberOfResultsRequested()) {
$parameters['NumberOfResultsRequested'] = $request->getNumberOfResultsRequested();
}
if ($request->isSetQueryStartDateTime()) {
$parameters['QueryStartDateTime'] = $request->getQueryStartDateTime();
}
if ($request->isSetResponseGroup()) {
$parameters['ResponseGroup'] = $request->getResponseGroup();
}
return $parameters;
}
/**
* Convert paremeters to Url encoded query string
*/
private function getParametersAsString(array $parameters)
{
$queryParameters = array();
foreach ($parameters as $key => $value) {
$queryParameters[] = $key . '=' . $this->_urlencode($value);
}
return implode('&', $queryParameters);
}
private function _urlencode($value) {
return str_replace('%7E', '~', rawurlencode($value));
}
private function invoke($actionName, array $parameters)
{
$soapClient = new SoapClient('http://web542.srv1.sysproserver.de/amazon/AmazonFBAInventory.wsdl');
return $soapClient->$actionName($this->getParametersAsString($parameters));
}
Diese Meldung kommt aus der Funktion loadXML($xml), wenn ich das echo wieder entferne und dieser Funktionsaufruf bei Zeile 77 ist.
ListUpdatedInventorySupplyResponse.php
PHP-Code:
public static function fromXML($xml)
{
$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('a', 'http://fba-inventory.amazonaws.com/doc/2009-07-31/');
$response = $xpath->query('//a:ListUpdatedInventorySupplyResponse');
if ($response->length == 1) {
return new Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse(($response->item(0)));
} else {
throw new Exception ("Unable to construct
Amazon_FWSInventory_Model_ListUpdatedInventorySupplyResponse from provided XML.
Make sure that ListUpdatedInventorySupplyResponse is a root element");
}
}
Kann die Dateien auch anhängen, hab bloß die Befürchtung das es eher abschreckt als Hilft. Werd dann jetzt erstmal bisschen lesen wie ich das mit der print_r Funktion und der LogDatei mache.
Geändert von herrentor (25-05-2010 um 15:00 Uhr)
|

25-05-2010, 14:52
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wenn $xml kein String ist, hast du mal überprüft, was es dann ist (print_r in eine Logdatei) und wo es herkommt?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|