3

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 です。

4

1 に答える 1