e コマースのショッピング カート用の SOAP API を使用していますが、別のページでセッションを持続させることができないようです。
例として、カートにアイテムを追加してからカートを表示するテスト コード (デバッグ メッセージの束を含む) を以下に示します。ブラウザでこれを実行すると完全に動作しますが、ページを更新すると、カートに 2 つのアイテム (2 つのページ呼び出しのそれぞれから 1 つ) があると予想されます。ただし、ページへの以前の呼び出しから何も覚えていないようです。このページで「AddToCart」を 2 回呼び出してから「GetCartContents」を呼び出すだけで、カート内の 2 つのアイテムが正しく表示されるため、API が機能していることはわかっています。
何か不足していますか?
<?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 です。