如何在php中使用SOAP1.2获取引号?
我是XML和SOAP的高手 你能给出一些建议,至少从哪里开始,或者举个例子吗 (我不是乞求为我写代码) 以下是规格: 我只希望收到两个双倍值。最简单的方法是什么如何在php中使用SOAP1.2获取引号?,php,soap,Php,Soap,我是XML和SOAP的高手 你能给出一些建议,至少从哪里开始,或者举个例子吗 (我不是乞求为我写代码) 以下是规格: 我只希望收到两个双倍值。最简单的方法是什么 POST /CurrencyConvertor.asmx HTTP/1.1 Host: www.webservicex.net Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding
POST /CurrencyConvertor.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConversionRate xmlns="http://www.webserviceX.NET/">
<FromCurrency>PHP</FromCurrency>
<ToCurrency>USD or EUR</ToCurrency>
</ConversionRate>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConversionRateResponse xmlns="http://www.webserviceX.NET/">
<ConversionRateResult>double</ConversionRateResult>
</ConversionRateResponse>
</soap12:Body>
</soap12:Envelope>
什么是动作,我应该把什么作为版本,我知道-一个soap版本1.2,但是参数是int
,所以不能为它分配1.2
值lol
EDIT2:
好吧,这是我目前得到的,但它给了我一个空字符串
$client = new SoapClient(null, array('location'=>'http://www.webservicex.net/CurrencyConvertor.asmx','uri'=>''));
$client->__doRequest ( <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConversionRate xmlns="http://www.webserviceX.NET/">
<FromCurrency>PHP</FromCurrency>
<ToCurrency>USD or EUR</ToCurrency>
</ConversionRate>
</soap12:Body>
</soap12:Envelope>
EOD
, "http://www.webservicex.net/CurrencyConvertor.asmx" , "ConversionRate", 2 );
echo "Response :<br>", htmlentities($client->__getLastResponse());
$client=新的SoapClient(空,数组('location'=>)http://www.webservicex.net/CurrencyConvertor.asmx“,”uri'=>”);
$client->\u doRequest(基本上,您需要的是两部分
SOAPClient类解决了通信问题,它知道服务器URL,发送请求并接收响应(您在问题中用XML表示),还触发#2,即:
第二部分是XML解析器/封送器,它可以将请求对象(包含fromCurrency和toCurrency)转换为服务器可以理解的正确XML字符串(根据WSDL)并再次使用WSDL将一些XML转换为响应对象。这一部分有点棘手,但我找到了很多关于这方面的文档,搜索“SOAP PHP”,您会得到一些示例)。这两个过程被称为编组和解编组(帮助您通过Google更快地找到内容)。StockQuote Web服务并没有真正提供WSDL,它基本上是对所有可能操作的描述(在您的例子中只有一个:GetQuote
)及其可用对象(在您的例子中只有简单类型string
,它们不需要定义,因为它们是WSDL标准)
我没有用PHP做过SOAP,但花了很多时间用Java+SOAP,我能理解这有多困难。理论上,您只需向服务器发送一些XML,然后返回一些XML。但是发送的XML必须采用正确的格式,当您收到响应时,您希望将响应转换为对象,而不是处理一些XML字符串
对于这样的简单Web服务,可以考虑手工构建XML请求(简单地将XML字符串组合起来)和<代码>子字符串< /代码>响应以找到所请求的答案。我将按您所说的那样尝试,因为确实如此,请求字符串是常量,按原样发送可能是个好主意。但是似乎有几个php的SOAP客户端,我将尝试对它们进行快速研究,看看是否可以开始。好吧,我在一个standart php课程上停了下来,但是我不太明白在这个
\uuu doRequest
方法中,作为请求的“action”和“version”参数,请求什么:$action ishttp://www.webservicex.net/ConversionRate
或只是转换率
。对于$version,我不是100%确定,但它不是1.2就是1.1(首选1.2)。由于参数是一个整数,因此它应该是2
。soapClient类还需要一个“uri”参数作为选项之一。我想知道我应该在这里把什么作为uri:$client=newsoapclient(null,array('location'=>)http://www.webservicex.net/CurrencyConvertor.asmx“,”uri“=>”$??“)代码>“uri是SOAP服务的目标命名空间”。请检查XML名称空间(此快速介绍应包括:)。在您的案例中,示例请求显示:xmlns:soap12=”http://www.w3.org/2003/05/soap-envelope“
,因此名称空间(“soap”)的URI是:PHP
和USD或EUR
似乎可疑。好吧,这正是规范中所说的:问题一定是在其他地方……哦,对了PHP
代表菲律宾比索。对不起,是的,需要兑换成其他货币。
$client = new SoapClient(null, array('location'=>'http://www.webservicex.net/CurrencyConvertor.asmx','uri'=>''));
$client->__doRequest ( <<<EOD
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ConversionRate xmlns="http://www.webserviceX.NET/">
<FromCurrency>PHP</FromCurrency>
<ToCurrency>USD or EUR</ToCurrency>
</ConversionRate>
</soap12:Body>
</soap12:Envelope>
EOD
, "http://www.webservicex.net/CurrencyConvertor.asmx" , "ConversionRate", 2 );
echo "Response :<br>", htmlentities($client->__getLastResponse());