I'm having trouble calling a web service I've set up from PHP. The obfuscated adress http://XXX.XXX.XXX.XXX/test.asmx?wsdl in the error message below returns a valid WSDL. I've successfully tried to call it as a web service using a VB.net client, but when I call it from PHP on Debian I get the following message:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL:
Couldn't load from 'http://XXX.XXX.XXX.XXX/test.asmx?wsdl'
in /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php:101
Stack trace:
#0 /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php(101):
SoapClient->SoapClient('http://XXX.XXX.XXX.XXX/', Array) #1 {main} thrown
in /var/www/domain/mywebsite.com/public_html/catalog/fomeus/orders.php
on line 101
What could the problem be? I've included my code for the web service and the PHP client below.
Web Service:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
...
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WebService1
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class
PHP client:
require_once($_SERVER['DOCUMENT_ROOT']."/catalog/fomeus/includes/soap/nusoap.php");
$objClient = new soapclient("http://XXX.XXX.XXX.XXX/test.asmx?wsdl",
array('trace' => 1, 'exception' => 0, 'cache_wsdl' => 0));
print_r($objClient -> HelloWorld());
I'm using PHP version 5.2.6 if that's of any help. I've been going through plenty of posts in different forums trying to figure out what the problem is. Many people have had the same issue, but none of the solutions I've found so far work for me. Any help would be greatly appreciated.
Another option to look at is cURL. You can create your payload as an XML string and send it to the same URL using cURL. You would then need to capture the response code and process as appropriate. When I had issues with SOAPClient, I moved to cURL - works like a charm.
If you're using nusoap (php 5.2 has a native soapclient, which I prefer), the first thing I see is your arguments. Argument #2 for nusoap's soapclient constructor should be boolean TRUE here, if you're using the WSDL, and not an array. Try:
$objClient = new soapclient("http://XXX.XXX.XXX.XXX/test.asmx?wsdl",true);
print_r($objClient->HellowWorld());
That's how i've been able to work with wsdl in the past.
If you're using the native client, and having problems with the wsdl, you can always bypass it and make straight calls, like so:
$objClient = new soapclient(null,array('uri'=>'http://xxx/test.asmx','location'=>'http://xxx/test.asm'));
$objClient->__call('HelloWorld',array());
That should work, but isn't as easy to navigate as wsdl.
try to turn on php_soap.dll and php_openssl.dll in your php.ini.
Located in the apache folder \apache\apache2.4.2\bin
remove the ";"
Adding index.php worked for me working on php application
$client = new SoapClient('http://www.domain.com/api/v2_soap/?wsdl'=1)
$client = new SoapClient('http://www.domain.com/index.php/api/v2_soap/?wsdl'=1)
Related
I'm trying to access this URI: http://143.166.84.118/services/assetservice.asmx?WSDL (Dell warranty info)
In Windows Powershell I can do this no problem:
$service = New-WebServiceProxy -Uri http://143.166.84.118/services/assetservice.asmx?WSDL
But in PHP:
$DELL_URL = "http://143.166.84.118/services/assetservice.asmx?WSDL"; //Access webproxy by IP
$soap = new SoapClient($DELL_URL);
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://143.166.84.118/services/assetservice.asmx?WSDL' in C:\path\to\my\script.php:25 Stack trace: #0 C:\path\to\my\script.php(25): SoapClient->SoapClient('http://143.166....') #1 {main} thrown in C:\path\to\my\script.php on line 25
What am I doing wrong in php? I know the URL works cause it works with powershell.
As per Pete's suggestion I went to http://143.166.84.118/services/assetservice.asmx?WSDL and downloaded a local copy of the file then did this which worked:
$soap = new SoapClient($wsdlfilepath);
Do I always have to download a local copy of the file when using php?
edit: Didn't make any changes but now I'm getting "Uncaught SoapFault exception: [Client] looks like we got no XML document in..." error. Should I be worried about this? You can view the wsdl file by going to the link. Are there problems with it or extra white space? I didn't see any.
I have a requirement to write Soap Client in PHP to call a remote web service and get information. For that I got the Soap End Point URL which doesn't seems to be a WSDL.
I got the WSDL file in the IEPD document set for that Soap services.
When I tried to create new instance of the SoapClient using the End Point it is throwing below error.
"Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://...' : failed to load external entity "https://.." in..."
Can you please help me how should I find WSDL url using an endpoint? or is there any other way I can call the Soap using this end point without getting this error?
To add more reference, I have received the complete documentation of the SOAP webservice in a IEPD document.
Thanks
I suggest you have a look at PHP SoapClient documentation. Start with constructor function SoapClient::SoapClient. There are examples of non-WSDL usage
I'm reading a wsdl for SOAP connection :
https://api3.popfax.com/index.php?service=Popfax&wsdl
Other clients (mobile apps, desktop software, ...) are using it and have been doing so for a long time.
When I try to construct a SoapClient from it, I get :
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://api3.popfax.com/index.php?service=Popfax&wsdl' : Start tag expected, '<' not found in D:\Dev\test\sendfax.php:32 Stack trace: #0 D:\Dev\test\sendfax.php(32): SoapClient->SoapClient('https://api3.po...') #1 {main} thrown in D:\Dev\test\sendfax.php on line 32
So I wrote this to test what I got :
$wsdl = 'https://api3.popfax.com/index.php?service=Popfax&wsdl';
$bip = file_get_contents($wsdl);
var_dump($bip);
And the result is string with on the first line :
'ï<?xml version="1.0" encoding="UTF-8"?>
And every time I reload that test script, the first character is different...
Any idea why ?
It's working fine for me. Have you tried using a simple text editor and just saving your code snippet in it, saving it with a .php suffix in your web root and calling it from localhost? (that's what I did)
It may be that the editor you're using has an encoding issue (just a huge guess).
I have a cloud server with CentOS 6, Apache 2.2, PHP 5.4 and i have one site with Magento.
And i try to use a Magento WebService and return this error:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://******.com/dev/index.php/api/soap/index/?wsdl=1' : failed to load external entity "http://******.com/dev/index.php/api/soap/index/?wsdl=1"
I search here and in google, and i try many changes in php.ini, but in all cases i don't have success.
I read in some cases this is a problem in server side, for bad configuration.
Note¹: SOAP is installed in server, in phpinfo() SOAP is enabled.
Note²: On another server was working normally.
Anyone have any ideia how to solve this?
Edit: The server use WHM/CPanel and i use EasyApache for install Apache, PHP. And use default configuration.
Edit2: This is just a simple sample code that uses the SOAP and error it returns:
Code: (first line of this code is a line 9, and line 13 is "$cli = new SoapClient($api_url_v1);")
<?php
$api_url_v1 = "http://site.com/dev/api/soap/?wsdl=1";
$username = '*********';
$password = '*********';
$cli = new SoapClient($api_url_v1);
//retreive session id from login
$session_id = $cli->login($username, $password);
//call customer.list method
$result = $cli->call($session_id, 'customer.list', array(array()));
?>
Error:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://site.com/dev/api/soap/?wsdl=1' : failed to load external entity "http://site.com/dev/api/soap/?wsdl=1" in /home/******/public_html/test_soap.php:13 Stack trace: #0 /home/******/public_html/test_soap.php(13): SoapClient->SoapClient('http://site...') #1 {main} thrown in /home/******/public_html/test_soap.php on line 13
try to fetch the wsdl via webbrowser. if this does not work then you have an error in url. try www version of the urls, check for bad rewrites, check htaccess. you dont need https!
I 'm trying to use PHP SoapClient to consume eBay web service. Just following the eBay official sample:
$client = new SoapClient('http://developer.ebay.com/webservices/latest/ebaysvc.wsdl');
I get an error as below:
SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: unexpected in simpleType in E:\xampp\htdocs\mysite\system\application\libraries\Ebaysvc.php:102 Stack trace: #0
Does anyone know how to solve this?
Please use this url for the wsdl http://developer.ebay.com/webservices/753/eBaySvc.wsdl
I don't knew why the changed the url. Thank to Pakistan for that Post http://www.adeelsarfaraz.com/how-to-remove-the-fatal-error-soap-error-parsing-schema-unexpected-in-sequence-error/