PHP SOAP etrafında başımı almak sorun yaşıyorsanız

3 Cevap php

Peki burada ben kullanmaya çalışıyorum API: http://www.hotelscombined.com/api/LiveRates.asmx?op=HotelSearch

İşte ben denedim kodu:

$client = new SoapClient('http://www.hotelscombined.com/api/LiveRates.asmx?WSDL');

echo '<pre>'; var_dump($client->__getFunctions()); echo '</pre><br /><br /><br />'; 
//since the above line returns the functions I am assuming everything is fine but until this point

try
{
    $client->__soapCall('HotelSearch',
        array(
            'ApiKey' => 'THE_API_KEY_GOES_HERE', // note that in the actual code I put the API key in...
            'UserID' => session_id(),
            'UserAgent' => $_SERVER['HTTP_USER_AGENT'],
            'UserIPAddress' => $_SERVER['REMOTE_ADDR'],
            'HotelID' => '50563',
            'Checkin' => '07/02/2009',
            'Checkout' => '07/03/2009',
            'Guests' => '2',
            'Rooms' => '1',
            'LanguageCode' => 'en',
            'DisplayCurrency' => 'usd',
            'TimeOutInSeconds' => '90'
        )
    );
}
catch (Exception $e)
{
    echo $e->getMessage();
}

Anywho bu bir istisna atar ve aşağıdaki echos:

Server was unable to process request. ---> Object reference not set to an instance of an object.

NOT: bu yüzden ben sadece temelden yanlış bir şey yapıyorum mümkün önce SOAP'ı hiç kullanmadım, bana doğru yönde almak için bile küçük bir ipucu derece mutluluk duyacağız

(Ben her zaman tamsayı şeklinde olması tamsayılar değiştirmeyi denedim ve aynı tarihleri ​​ile): Tom Haigh aynı hata mesajı dönen görünüyor başka bir dizideki değerleri sarma önerdi

try
{
    $client->__soapCall('HotelSearch',
        array('request' =>
        array(
            'ApiKey' => 'THE_API_KEY_GOES_HERE', // note that in the actual code I put the API key in...
            'UserID' => session_id(),
            'UserAgent' => $_SERVER['HTTP_USER_AGENT'],
            'UserIPAddress' => $_SERVER['REMOTE_ADDR'],
            'HotelID' => '50563',
            'Checkin' => '2009-07-02',
            'Checkout' => '2009-07-03',
            'Guests' => 2,
            'Rooms' => 1,
            'LanguageCode' => 'en',
            'DisplayCurrency' => 'usd',
            'TimeOutInSeconds' => 90
        ) )
    );
}
catch (Exception $e)
{
    echo $e->getMessage();
}

3 Cevap

Eğer ihtiyacınız düşündüğünüzden daha fazla dizilerde her şeyi sarma sona PHP'nin SOAP uygulaması kullanırken buluyorum.

Aşağıdaki örnek iş gibi görünüyor, ama aynı zamanda işe önce doğru tarih değerlerini biçimlendirmek gerekir. Ben bunu yapmanın en iyi yolu emin değilim - UNIX zaman temsil eden bir tamsayı geçebilir ve PHP sizin için dönüştürmek olacağını olabilir.

$client->__soapCall('HotelSearch', 
    array(
        array('request' => 
            array(
                'ApiKey' => 'THE_API_KEY_GOES_HERE', // note that in the actual code I put the API key in...
                'UserID' => session_id(),
                'UserAgent' => $_SERVER['HTTP_USER_AGENT'],
                'UserIPAddress' => $_SERVER['REMOTE_ADDR'],
                'HotelID' => '50563',
                'Checkin' => '07/02/2009',
                'Checkout' => '07/03/2009',
                'Guests' => '2',
                'Rooms' => '1',
                'LanguageCode' => 'en',
                'DisplayCurrency' => 'usd',
                'TimeOutInSeconds' => '90'
            ) 
        ) 
    )
);

Gün boyunca beni deli sürdü Bir şey - dizi öğeleri (ApiKey, KullanıcıNo, vb) isimlerini çift kontrol edin. Durumda da doğru olduğundan emin olun. Ben bir yanlış kasalı 'm' üzerine saatlerce boşa.

Sonra sabun çağrı o nesneyi başvururken, bir PHP nesne yapmayı deneyin.

class HotelRequest {
   public $apiKey;
   public $userID;
   public $userAgent;
   public $userIPAddress;
   public $hotelID;
   public $checkin;
   public $checkout;
   public $guests;
   public $rooms;
   public $languageCode;
   public $displayCurrency;
   public $timeOutInSeconds;  
}

//set the values of the object...
$hotelRequestObject = new HotelRequest();
$hotelRequestObject->apiKey = "API_KEY";
//etc...

$client = new SoapClient('http://www.hotelscombined.com/api/LiveRates.asmx?WSDL',
    array("classmap" => array("HotelSearchRequest" => "HotelRequest")));

$result = $client->HotelSearch($hotelRequestObject);

var_dump($result);