php-soap客户端连接


php soap client connection

嗨,我有闲置的肥皂

 SOAP 1.1

POST /ServicePeletalk.asmx HTTP/1.1
Host: 82.80.225.186
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://peletop.co.il/GetProducts"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetProducts xmlns="http://peletop.co.il/">
      <query>
        <TerminalNum>string</TerminalNum>
        <ProviderID>int</ProviderID>
        <CardType>All or Virtual or Manual or BillPayment</CardType>
        <Language>Hebrew or Arabic or English</Language>
        <LoadPictures>boolean</LoadPictures>
      </query>
    </GetProducts>
  </soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetProductsResponse xmlns="http://peletop.co.il/">
          <GetProductsResult>
            <Products>
              <clsProduct>
                <ProductIdenfity>string</ProductIdenfity>
                <ProductName>string</ProductName>
                <Description>string</Description>
                <Picture>base64Binary</Picture>
                <Price>double</Price>
                <MaxPrice>double</MaxPrice>
                <CardType>All or Virtual or Manual or BillPayment</CardType>
                <DetailsLink>string</DetailsLink>
              </clsProduct>
              <clsProduct>
                <ProductIdenfity>string</ProductIdenfity>
                <ProductName>string</ProductName>
                <Description>string</Description>
                <Picture>base64Binary</Picture>
                <Price>double</Price>
                <MaxPrice>double</MaxPrice>
                <CardType>All or Virtual or Manual or BillPayment</CardType>
                <DetailsLink>string</DetailsLink>
              </clsProduct>
            </Products>
          </GetProductsResult>
        </GetProductsResponse>
      </soap:Body>
    </soap:Envelope>

肥皂1.2

以下是SOAP 1.2请求和响应的示例。显示的占位符需要替换为实际值。

POST /ServicePeletalk.asmx HTTP/1.1
Host: 82.80.225.186
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>
        <GetProducts xmlns="http://peletop.co.il/">
          <query>
            <TerminalNum>string</TerminalNum>
            <ProviderID>int</ProviderID>
            <CardType>All or Virtual or Manual or BillPayment</CardType>
            <Language>Hebrew or Arabic or English</Language>
            <LoadPictures>boolean</LoadPictures>
          </query>
        </GetProducts>
      </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>
        <GetProductsResponse xmlns="http://peletop.co.il/">
          <GetProductsResult>
            <Products>
              <clsProduct>
                <ProductIdenfity>string</ProductIdenfity>
                <ProductName>string</ProductName>
                <Description>string</Description>
                <Picture>base64Binary</Picture>
                <Price>double</Price>
                <MaxPrice>double</MaxPrice>
                <CardType>All or Virtual or Manual or BillPayment</CardType>
                <DetailsLink>string</DetailsLink>
              </clsProduct>
              <clsProduct>
                <ProductIdenfity>string</ProductIdenfity>
                <ProductName>string</ProductName>
                <Description>string</Description>
                <Picture>base64Binary</Picture>
                <Price>double</Price>
                <MaxPrice>double</MaxPrice>
                <CardType>All or Virtual or Manual or BillPayment</CardType>
                <DetailsLink>string</DetailsLink>
              </clsProduct>
            </Products>
          </GetProductsResult>
        </GetProductsResponse>
      </soap12:Body>
    </soap12:Envelope>

如何用PHP编写

我试过

<?
    // Maximum error reporting
    error_reporting(E_ALL);
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    $wsdl = 'http://82.80.225.186:8000/ServicePeletalk.asmx?WSDL';
    $trace = true;
    $exceptions = true;
    $client = new SoapClient($wsdl, array( 'trace' => $trace, 'exceptions' => $exceptions));

    $xml_array['TerminalNum'] = 5089 ;
    $xml_array['UserType'] = 'SiteUser';
    $xml_array['Language'] = 'English';
    $xml_array['ConnectionOrDeviceID'] = '879d62-EA47-4520-8A29-EB5981A62DD8';
    try
    {
       $client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
       $response = $client->GetSellerProviders($xml_array);
    }
    catch (Exception $e)
    {
       echo "Error!";
       echo $e -> getMessage ();
       echo 'Last response: '. $client->__getLastResponse();
    }
?>

不起作用

请帮助

首先,根据xml文件,您似乎必须调用$client->GetProducts而不是$client->GetSellerProviders,因为xml文件中有一个名为GetProducts的元素。

如果这是一个打字错误,并且你真的调用了$client->GetProducts,那么检查$xml_array的结构是否像这个

$xml_array['query']['TerminalNum'] = 5089 ;
$xml_array['query']['UserType'] = 'SiteUser';
$xml_array['query']['Language'] = 'English';
$xml_array['query']['ConnectionOrDeviceID'] = '879d62-EA47-4520-8A29-EB5981A62DD8';

包括query元素,如xml请求示例中所示。

评论更新

我看到请求xml包含以下元素

<TerminalNum>string</TerminalNum>
<ProviderID>int</ProviderID>
<CardType>All or Virtual or Manual or BillPayment</CardType>
<Language>Hebrew or Arabic or English</Language>
<LoadPictures>boolean</LoadPictures>

因此,$xml_array变量应该有一个数组,其中包含这些元素的名称,如:

$xml_array['query']['TerminalNum'] = 5089 ;
$xml_array['query']['ProviderID'] = 'SiteUser';
$xml_array['query']['CardType'] = 'som card type';
$xml_array['query']['Language'] = 'English';
$xml_array['query']['LoadPictures'] = 'true';