如何让 SoapClient 尊重会话?

2023-12-26

我正在使用电子商务购物车的 SOAP API,但我似乎无法让会话在不同页面中持续存在。

作为示例,我下面有一些测试代码(带有一堆调试消息),它将一个项目添加到购物车,然后查看购物车。当我在浏览器中运行它时,它工作得很好,但是如果我刷新页面,我预计购物车中会有两个项目(两个页面调用中的每个项目都有一个)。但是,它似乎不记得以前对该页面的调用中的任何内容。我知道 API 正在工作,因为如果我在此页面上调用“AddToCart”两次,然后调用“GetCartContents”,我会正确看到购物车中的 2 件商品。

我错过了什么吗?

<?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


如果您的目标是尝试将活动用户会话与 SOAP API 的特定交互联系起来,那么您的方法看起来是正确的。在会话中存储和设置 SOAP cookie 并通过 setCookie 恢复到 SOAP 会话的方法也是可行的方法。

您的代码无法工作可能是由于线路上的错误:

$client->__setCookie($name[$k], $v);

其中需要是:

$client->__setCookie($name, $v);

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 SoapClient 尊重会话? 的相关文章

  • 使用 PHP 将 class="active" 添加到活动页面

    动态标头 CSS 类更改为活动使用 PHP 目录 我想要的班级 li 在活动目录下更改标签 现在 每个指南都向我展示了当您的页面等于它时如何执行此操作 但我想更改 这 li li 取决于我所在的目录 例如 如果说我在 http exampl
  • PHP-将字符串转换为unicode

    我在做这个工作 source mb convert encoding test unicode utf 8 source unpack C source var dump source return array size 8 1 gt in
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • 将变量设置为函数调用以在 PHP 中的 if 语句中使用

    好的 我正在做一些 Wordpress 编辑 并且编写了一个 if 语句 正如您所看到的 这使用函数调用作为变量 这是因为函数调用会调用当前页面的名称 这很好 然而 当我这样做时 它也往往会与页面上的标题相呼应 这是有道理的 我可能正在尝试
  • while 循环中的表并排

    in a while loop its creating a list of heading and image links i want to display it as side by side like in following im
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • 参数编号无效:参数未在[重复]中定义

    这个问题在这里已经有答案了 被困在这里有一段时间了 当我尝试运行代码时收到此错误 警告 PDOStatement execute SQLSTATE HY093 无效参数 number 参数未定义于 Applications XAMPP xa
  • PHP 的同义词库类或 API [编辑]

    TL DR 摘要 我需要一个命令行应用程序 我可以用它来获取同义词和其他相关单词 它需要是多语言的并且跨平台工作 任何人都可以为我推荐一个合适的程序 或者帮助我使用我已经找到的程序吗 谢谢 更长的版本 我的任务是用 PHP 编写一个系统 该
  • PHP—array_merge_recursive() - 相同键没有数组

    php a php gt data1 tag gt div classes gt 1 2 3 php gt data2 tag gt section classes gt 2 3 4 5 6 php gt result array merg
  • 如何获取与我当前所在商店相关的产品所属类别 ID

    我在产品页面上并拥有产品对象 但是当我尝试使用以下方式获取类别 id 时 product gt getCategoryIds or product gt getResource gt getAttribute category ids gt
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • javascript 和 PHP 中的正则表达式有什么区别吗?

    这是在 javascript 中验证电子邮件地址的正则表达式 我不确定是否可以直接在 PHP 中使用它 a z d u00A0 uD7FF uF900 uFDCF uFDF0 uFFEF a z d u00A0 uD7FF uF900 uF
  • PHP - 当 false 时获取 bool 来回显 false

    以下代码不会打印出任何内容 bool val bool false echo bool val 但下面的代码打印1 bool val bool true echo bool val 有没有更好的打印方法0 or false when boo
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type
  • 递归获取数组的键并创建下划线分隔的字符串

    现在我得到了一个包含某种信息的数组 我需要从中创建一个表 例如 Student Address StreetAddress gt Some Street StreetName gt Some Name Marks1 gt 100 Marks
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • WordPress 中的 add_action 函数

    嗯 我正在学习创建一个 WordPress 插件 我下载了一个并阅读了代码 然后我看到了这个 我假设 foo 是它将添加操作的标签 但是 array 到底是做什么的呢 add action foo array foo1 foo2 我在看ht
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛

随机推荐

  • std::vector::assign - 重新分配数据?

    我正在使用 STL 库 我的目标是尽量减少数据重新分配的情况 我想知道 是吗 std vector assign size type n const value type val 如果大小未更改或实际上只是分配新值 例如 使用operato
  • 将 C++ 函数指针分配给同一对象的成员函数

    如何让 test calculate 中的函数指针分配 也许还有其余部分 发挥作用 include
  • 初始化元素并一键开始拖动

    At mousedown我想在 DOM 中注入一个新元素并立即开始拖动它 即触发dragstart 无需再次单击新元素 我在我的项目中经常使用 d3 js 但不知道能不能触发dragstart使用 d3 事件 所以我尝试使用 jQuery
  • Django 管理员不处理 ProtectedError 异常

    我有一个 Django 应用程序 它的模型如下 class Foo models Model name models CharField max length 100 我在此模型中有一个特定实例 其名称为 bar 例如 我想防止删除该实例
  • 如何将 DataFrame 附加到多索引 DataFrame?

    假设我有 DataFrame In 1 a pd DataFrame 1 2 3 4 5 6 7 8 index pd MultiIndex from product A B d e In 2 a Out 2 0 1 A d 1 2 e 3
  • Xcode 崩溃后总是停在 main.m

    过去 使用旧的 良好的 Xcode 3 每次崩溃时 Xcode 都会停在显示崩溃的有问题的行处 这是美好的时光 很高兴调试 现在使用 Xcode 4 2 每次应用程序崩溃时 它都会停在 main m 的这一行 int retVal UIAp
  • 如何在Jaspersoft Studio中制作带有动态列的表格? [复制]

    这个问题在这里已经有答案了 我需要在 Jaspersoft Studio 中制作这张表 我的桌子有时有一个测试 两个 n 个测试或什么都没有 是否可以 我该如何解决这个任务 您无法在 jasper 中动态创建列 但在创建一些固定数量的列后
  • Android 开始屏幕上使用的手势

    使用什么 Android Api 来在 Android 上的开始屏幕上向左或向右滚动 最简单的方法是检测 Fling 手势 Android API 有一个内置的检测器 用于基本手势 如快速滑动 滚动 长按 双击 捏合缩放等 该文档位于htt
  • Mix.exs 文件更改 - (SyntaxError) mix.exs:65: 意外标记:“”(第 1 列,代码点 U+0000)

    保存所做的任何更改mix exsMac OS High Sierra 10 13 6 上的文件会导致文件开头处出现空字符 我最初是针对 intellij elixir 插件打开的 但问题是使用任何文本编辑器 sublime vim inte
  • 什么时候将标志存储为位掩码比使用关联表更好?

    我正在开发一个应用程序 其中用户具有不同的权限来使用不同的功能 例如读取 创建 下载 打印 批准等 权限列表预计不会经常更改 我有几个选项可以选择如何将这些权限存储在数据库中 在什么情况下选项 2 会更好 Option 1 使用关联表 Us
  • 有人可以解释一下这种类型的递归是如何工作的吗?

    我在递归中遇到了这个问题 我不明白它是如何工作的 我了解递归的基础知识 但这让我完全困惑 请帮忙 main foo 3 void foo int x if x gt 1 foo x printf d x foo x 我以为这个程序不会打印任
  • 使用 ImageMagick 检测 EXIF 方向并旋转图像

    佳能数码单反相机似乎可以横向保存照片并使用exif orientation进行旋转 问题 如何使用 imagemagick 使用 exif 方向数据将图像重新保存到预期方向 以便不再需要 exif 数据以正确的方向显示 Use the 自动
  • 检查 SQL 对象是否被任何其他 SQL 对象引用

    我刚刚在读书这个所以线程 https stackoverflow com questions 26336840 accessing the name of the currently executing stored procedure n
  • 解析没有键的 JSON 数组

    我正在尝试解析jsonArray但无法理解这种格式 如何解析这种类型jsonArray 谁能帮我 rows farmfresh 20171211 4 farmfresh product d 20171215 4
  • Selenium ChromeDriver 切换选项卡

    当我单击测试中的链接时 它会打开一个新选项卡 我希望 ChromeDriver 然后专注于该选项卡 我尝试了以下代码来让 ChromeDriver 使用 ctrl tab 快捷方式更改 tabas Actions builder new A
  • 函数“fn:encode-for-uri”导致 XSLT 出错

    我需要对 XSLT 中的字符串进行 URL 编码 但函数 fn encode for uri 破坏了脚本 我在网上查了一下 显然它是命名空间的一部分 http www w3 org 2005 xpath functions 因此 我将以下行
  • 与另一个启动文件链接

    我正在尝试使用以下命令将程序与我自己的启动文件链接STARTUPLD 脚本中的指令 ENTRY start STARTUP my crt1 o GCC驱动程序用于链接程序 不关心像libgcc等库路径 gcc T my script ld
  • 如何仅使某些结构字段可变?

    我有一个结构 pub struct Test pub x i32 pub y i32 我想要一个改变这个的函数 简单 pub fn mutateit mut self self x 1 这使得整个结构在函数调用期间是可变的mutateit
  • java中工厂方法模式如何使用泛型?

    我的代码如下所示 public interface BaseDAO marker interface public interface CustomerDAO extends BaseDAO public void createCustom
  • 如何让 SoapClient 尊重会话?

    我正在使用电子商务购物车的 SOAP API 但我似乎无法让会话在不同页面中持续存在 作为示例 我下面有一些测试代码 带有一堆调试消息 它将一个项目添加到购物车 然后查看购物车 当我在浏览器中运行它时 它工作得很好 但是如果我刷新页面 我预