3
我正在使用一個電子商務購物車的SOAP API,我似乎無法讓會話持續通過不同的頁面。作爲一個例子,我在下面有一些測試代碼(帶有一堆調試消息),它將一個物品添加到購物車,然後查看購物車。當我在瀏覽器中運行它時,它完美地工作,但是如果我刷新頁面,則預期在購物車中有兩個項目(兩個頁面調用中的每一個都有一個)。但是,它似乎沒有記得以前通話到該頁面的任何內容。我知道API正在工作,因爲如果我只在這個頁面上調用「AddToCart」兩次,然後調用「GetCartContents」,我就可以正確地看到購物車中的兩件物品。如何讓SoapClient尊重會話?
我錯過了什麼嗎?
<?php
session_start();
$url = "https://www.example.com/soap-checkout.php?wsdl";
$client = new SoapClient($url, array("trace" => 1, "exception" => 0));
if (!empty($_SESSION['soapcookies'])) {
foreach($_SESSION['soapcookies'] AS $name=>$value) {
if (is_array($value)) {
foreach($value AS $k=>$v) {
$client->__setCookie($name[$k], $v);
}
} else {
$client->__setCookie($name, $value);
}
}
}
echo "<pre style='background: grey;'>browser cookies: ".print_r($_COOKIE, true)."</pre>";//debug
// Add to Cart
$data = array(
"domain" => 'www.example.net',
"sku" => "1234",
"qty" => 1
);
$result = $client->__soapCall("AddToCart", $data);
$responseHeader = $client->__getLastResponseHeaders();//debug
echo "<pre style='background: purple;'>responseHeader: ".print_r($responseHeader, true)."</pre>";//debug
echo "<pre style='background: grey;'>cookies: ".print_r($client->_cookies, true)."</pre>";//debug
echo "<pre style='background: yellow;'>Result of 'AddToCart': ".print_r($result, true)."</pre>";//debug
// Set SOAP Cookies in PHP Session
$_SESSION['soapcookies'] = $client->_cookies;
// View Cart
$data = array(
"domain" => 'www.example.net'
);
$result = $client->__soapCall("GetCartContents", $data);
echo "<pre style='background: skyblue;'>Result of 'GetCartContents': ".print_r($result, true)."</pre>";//debug
?>
僅供參考,PHP版本5.2.6是
你是說PHP中的會話不工作,或者SOPA傳遞會話不工作?如果您調試會話數據是否被傳入,可能會有所幫助。 – Robbie
@Robbie PHP會話正常工作。我想我的主要問題是我需要做些什麼來維持同一個會話。 **(1)**我試圖讀取SOAP創建的cookie,**(2)**將其保存到PHP會話中,然後**(3)**如果會話中有現有的soap cookie ,將SOAP中的Cookie設置爲與以前相同。不知道如果這是正確的方法,所以我會很感激替代品。但是,如果要走,我該如何設置cookie?當我得到cookie時,我得到一個數組,但setCookie需要每個cookie的字符串。 –