我正在尝试使用PHP Soap Client在下面发送XML请求,但是服务器响应时显示错误Error fetching http headers
。我猜主要问题来自如何正确解释entry
下的 transactionProperties
元素
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ext="http://xxx.xxx.xxx.xxx.com/">
<soapenv:Header/>
<soapenv:Body>
<ext:requestPurchase>
<context>
<channel>xxx</channel>
<prepareonly>xxxx</prepareonly>
<clientReference>12q31a1a456677881</clientReference>
<clientRequestTimeout>500</clientRequestTimeout>
<initiatorPrincipalId>
<id>xxxx</id>
<type>xxxx</type>
<userId>xxxx</userId>
</initiatorPrincipalId>
<password>xxxxx</password>
<transactionProperties>
<entry>
<key>preferredLanguage</key>
<value>en</value>
</entry>
<entry>
<key>productSKU</key>
<value>xxx</value>
</entry>
<entry>
<key>currency</key>
<value>NGN</value>
</entry>
<entry>
<key>purchaseAmount</key>
<value>3</value>
</entry>
</transactionProperties>
</context>
<purchaseOrder>
<productSpecifier>
<productId>xx</productId>
<productIdType>xxx</productIdType>
</productSpecifier>
<purchaseCount>5</purchaseCount>
</purchaseOrder>
</ext:requestPurchase>
</soapenv:Body>
</soapenv:Envelope>
这是我的代码:
<?php
// Setup Host,WSDL location,Soap Client options
$uri = "http://xx.xxx.xx.x.com/";
$wsdl = "http://host-ip/xxx/service?wsdl";
$soapclientOptions = array();
$soapclientOptions['trace'] = TRUE;
$soapclientOptions['exceptions'] = 1;
$soapclientOptions['use'] = 'SOAP_LITERAL';
$soapclientOptions['uri'] = $uri;
$soapclientOptions['connection_timeout'] = 15;
$soapclientOptions['cache_wsdl'] = WSDL_CACHE_NONE;
$e = '';
try
{
$client = new SoapClient($wsdl,$soapclientOptions);
}
catch(Exception $e)
{
die('Error occured on attempt to open Soap Connection. Check log for error details');
}
try
{
$payload = array(
"context"=>array("channel"=>"xxx","prepareonly"=>xxx,"clientReference"=>"12q31a1a456677881","clientRequestTimeout"=>"500","initiatorPrincipalId"=>array("id"=>"xxx","type"=>"xxx","userId"=>"xxx"),"password"=>"xxxx","transactionProperties"=>array(
array("key"=>"preferredLanguage","value"=>"en"),array("key"=>"productSKU","value"=>"VOS"),array("key"=>"currency","value"=>"NGN"),array("key"=>"purchaseAmount","value"=>"3")
)
),"purchaseOrder"=>array("productSpecifier"=>array("productId"=>"xxx","productIdType"=>"xxx"),"purchaseCount"=>"5")
);
$result = $client->requestPurchase($payload);
}
catch (Exception $e)
{
die('Error occured on attempt to process Soap Connection. Check log for error details');
}