2

PEAR SOAPを介してAPIと通信しようとしています。次のコードでSOAPリクエストを作成できますが、完全ではありません。

    <?php
    require_once 'SOAP/Client.php';

    $client = new SOAP_Client('https://api.mindbodyonline.com/0_5/SiteService.asmx?
    wsdl',true);

    $options = array('namespace' => 'http://schemas.xmlsoap.org/soap/envelope/',
        'trace' => 1,
        'SOAPAction' =>     'http://clients.mindbodyonline.com/api/0_5/GetLocations',
         'Host'=> 'clients.mindbodyonline.com'
    );

    $ret = $client->call( 
    'GetLocations', 
    array( 
    'Request'=>array('SourceCredentials' =>  array('SourceName'=>'*****','Password'=>'*****************','siteIDs'=> array('int'=>'23661'))),'XMLDetail'=>'Full','PageSize'=>'10','CurrentPageIndex'=>'0')
    ,$options);
    echo '<pre>'.htmlspecialchars($client->getLastRequest()).'</pre>';
    ?>

これにより、次のSOAPリクエストが発生します。

    POST /0_5/SiteService.asmx HTTP/1.0
    User-Agent: PEAR-SOAP @version@-beta
    Host: api.mindbodyonline.com
    Content-Type: text/xml; charset=UTF-8
    Content-Length: 464
    SOAPAction: "http://clients.mindbodyonline.com/api/0_5/GetLocations"
    Connection: close

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:ns4="http://clients.mindbodyonline.com/api/0_5">
    <SOAP-ENV:Body>
    <ns4:GetLocations>
    <Request>Array</Request></ns4:GetLocations>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

この形式にする必要がある場合:

    POST http://clients.mindbodyonline.com/api/0_5/SiteService.asmx HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: "http://clients.mindbodyonline.com/api/0_5/GetLocations"
    Host: clients.mindbodyonline.com
    Content-Length: 795

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
      <GetLocations xmlns="http://clients.mindbodyonline.com/api/0_5">
     <Request>
        <SourceCredentials>
           <SourceName>{SourceName}</SourceName>
           <Password>{Password}</Password>
           <SiteIDs>
              <int>{SiteID}</int>
           </SiteIDs>
        </SourceCredentials>
        <XMLDetail>Bare</XMLDetail>
        <PageSize>10</PageSize>
        <CurrentPageIndex>0</CurrentPageIndex>
        <Fields>
           <string>Locations.Name</string>
           <string>Locations.City</string>
        </Fields>
     </Request>
  </GetLocations>
     </soapenv:Body>
    </soapenv:Envelope>

何時間もいじっていたので、これを見るには新鮮な目が必要かもしれません。任意の入力または提案をいただければ幸いです。

WSDLリンクは次のとおりです:https ://api.mindbodyonline.com/0_5/SiteService.asmx?wsdl

更新:SOAP_ClientクラスではなくSOAP_WSDLクラスを使用することで、XMLSOAP要求を必要なバージョンの要求に少し近づけることができました。

<?php   
$WSDL=new SOAP_WSDL('https://api.mindbodyonline.com/0_5/SiteService.asmx?wsdl',array    (trace=>1));  


$proxy=$WSDL->getProxy();  

$params = array('Request'=>array('SourceCredentials' => array('SourceName'=>'StudioSevaYoga','Password'=>'******','siteIDs'=>array('int'=>'23661')),'XMLDetail'=>'Full','PageSize'=>'10','CurrentPageIndex'=>'0'));

$options=array('soapaction'=> 'http://clients.mindbodyonline.com/api/0_5/GetLocations');

$ret = $proxy->call("GetLocations",$params,$options);

var_dump($ret);
?>

次に、このXMLSOAPENVELOPEをvar_dumpから引き出すことができます。

["outgoing_payload"]=>
      string(1118) "POST /0_5/SiteService.asmx HTTP/1.0
User-Agent: PEAR-SOAP @version@-beta
Host: api.mindbodyonline.com
Content-Type: text/xml; charset=UTF-8
Content-Length: 862
SOAPAction: "http://clients.mindbodyonline.com/api/0_5/GetLocations"
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <SOAP-ENV:Body>
<GetLocations>
<Request>
<SourceCredentials>
<SourceName xsi:type="xsd:string">StudioSevaYoga</SourceName>
<Password xsi:type="xsd:string">*****</Password>
<siteIDs>
<int xsi:type="xsd:string">23661</int></siteIDs></SourceCredentials>
<XMLDetail xsi:type="xsd:string">Full</XMLDetail>
<PageSize xsi:type="xsd:string">10</PageSize>
<CurrentPageIndex xsi:type="xsd:string">0</CurrentPageIndex></Request></GetLocations>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

var_dumpでもこのエラーが発生します:サーバーはリクエストを処理できませんでした。 - - オブジェクト参照がオブジェクト インスタンスに設定されていません

誰かがvar_dumpから問題を引き出すことに目を向けているなら、それはここで見つけることができます: ペアーズソープリクエストページそれは同じ情報を何度も繰り返すようです。ガイダンスやご意見をいただければ幸いです。ありがとうございます。

PEARSOAP0.9.1とPHP5.2を使用しています

4

1 に答える 1

2

ここで与えられたアドバイスを使用して、この作業を行うことができました:PHPのsoapクライアントコードを生成する方法は?..... PEAR SOAP generateProxyCode()メソッドは、XMLSOAP要求をサーバーに正しく渡すためのすべての適切なPEARSOAP呼び出しと引数を提供しました。次のphpコードを生成されたサービスコードに結び付けて成功しました。

<?php
 require_once 'SOAP/Client.php'; 
 require_once 'wsdl_proxy.php';

 $proxyLocations= new WebService_Site_x0020_Service_Site_x0020_ServiceSoap();

 $site=array('int'=>23661);
 $Request = array('SourceCredentials' => array('SourceName'=>'StudioSevaYoga','Password'=>'*********','SiteIDs'=>$site),'XMLDetail'=>'Full','PageSize'=>10,'CurrentPageIndex'=>0);

 $ret=$proxyLocations->GetLocations($Request);
 print_r($Request);
 var_dump($ret);
?>
于 2013-04-08T03:48:18.653 に答える