Не могу подключиться к веб-сервису с помощью простого PHP-скрипта - PullRequest
1 голос
/ 14 октября 2011

Я пытаюсь подключиться к этому веб-сервису: http://magnetledavet.com/GetStuffed/Service.asmx?WSDL

Я использую этот простой скрипт, чтобы проверить его, но мне кажется, что я ничего не получаю обратно, и я не уверено том, что вызывает проблему.

Вот мой тестовый скрипт, кто-нибудь может увидеть, что не так?

<?php

if(!class_exists("SoapClient")){ die("Catch"); }


$client = new SoapClient('http://magnetledavet.com/GetStuffed/Service.asmx?WSDL',     array('soap_version'  => SOAP_1_2));
echo "test";
//var_dump($client->__getFunctions());


echo("Dump Start:<br>");
var_dump($client->SendOrder( array(
                               "merchant_id"    => 1, 
                               "order_id"       => "445",
                               "username"       => "test",
                               "password"       => "test123",
                               "products"       => array( 
                                                    array("qty" => 1, "product_id" =>"1", "product_name" => "Product Test 1", "price" =>15), 
                                                    array("qty" => 1, "product_id" =>"2", "product_name" => "Product Test 2", "price" =>25)
                                                        ),
                               "order_details"  => "Dont add cheese !!",
                               "amount"         => 40,
                               "point"          => 40,
                               "payment_type"   => "test",
                               "webdate"        => date("Y-m-d").'T'.date("H:i:s"),
                               "customer_name"  => "Steve Jobs",
                               "address"        => "4th Floor Grosvenor House, 1 High Street Edgware",
                               "state"          => "test",
                               "phone"          => "+447711111111",
                               "postcode"       => "HA8 7TA",
                               "email"          => "abc@abc.com",
                               "delivery_time"  => date("Y-m-d").'T'.date("H:i:s"),
                               "delivery_notes" => "test"
                               ) 
                        ));
//var_dump($client->__soapCall("SendOrder", array( 'merchant_id' => 1 )));
print("Dump End:<br>");

 ?>

получаю следующую ошибку мыла: SOAP-ERROR: Синтаксический анализ WSDL: Не удалось загрузить с 'magnetledavet.com/GetStuffed/Service.asmx?WSDL ';: не удалось загрузить внешнюю сущность "magnetledavet.com/GetStuffed/Service.asmx?WSDL";в C: \ xampp \ htdocs \ get_stuffed \ webservice.php: 6 Трассировка стека: # 0 C: \ xampp \ htdocs \ get_stuffed \ webservice.php (6): SoapClient-> SoapClient ('magnetle ...';; Array)) # 1 {main} в C: \ xampp \ htdocs \ get_stuffed \ webservice.php

1 Ответ

0 голосов
/ 14 октября 2011

Код правильный. Проблема с веб-сервером, который обслуживает файл WSDL. Оказывается, он не отправит его вам, если вы укажете заголовок user-agent и keep-alive. Я думаю, что это не может быть установлено через SoapClient. Но все же вы можете скачать руководство по wsdl. Я создал скрипт, который будет загружать файл WSDL через cURL один раз в час. SoapClient будет использовать локально кэшированный файл.

if(!is_file('test.wsdl') || filemtime('test.wsdl') < time()-3600) {

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, "http://magnetledavet.com/GetStuffed/Service.asmx?WSDL");
  $header = array('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
  , 'Connection: keep-alive');
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  $wsdl = curl_exec($ch);
  file_put_contents('test.wsdl', $wsdl);
}

$client = new SoapClient('test.wsdl',     array('soap_version'  => SOAP_1_2));

Попробуйте удалить пользовательский агент, чтобы увидеть, что файл WSDL не может быть получен без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...