如何向 PHP SoapVar 对象添加属性?

2024-03-17

如何向 PHP SoapVar 对象添加属性? (PHP5、SoapClient、SoapVar)

我有一个 SOAP 客户端请求情况,其中有重复的部分(“答案”),每个部分都有一个问题和选择。这是测验评分过程的一部分。根据我在 PHP5 SOAP 客户端中看到的情况,数组方法不可行,因为“answer”标签是重复的。如果您知道如何使用数组结构编写此内容,请纠正我。

因此,我使用 SoapVar 对象来定义复杂的对象结构。一切都很顺利,直到我注意到我需要在外部标签之一中添加属性;身份请求。

<ns1:invokeIdentityService>
<ns1:identityRequest>
<ns1:scoreRequest>
<ns1:quizId>6982971</ns1:quizId>
<ns1:answer>
<ns1:questionId>25867508</ns1:questionId>
<ns1:choiceId>128423504</ns1:choiceId>
</ns1:answer>
<ns1:answer>
<ns1:questionId>25867509</ns1:questionId>
<ns1:choiceId>128423507</ns1:choiceId>
</ns1:answer>
<ns1:answer>
<ns1:questionId>25867510</ns1:questionId>
<ns1:choiceId>128423514</ns1:choiceId>
</ns1:answer>
</ns1:scoreRequest>
</ns1:identityRequest>

我已经了解了如何使用数组结构添加属性,但是如何使用复杂的对象来完成呢?我无法在 PHP 书籍或在线的任何地方找到这个答案。

我需要向将显示在 SOAP 正文中的 IdentityRequest 对象添加 4 个属性(customerReference、locale、productAlias 和 transactionId)。

$answers = array();
// Start array with Quiz ID: quizId and questionId/choiceId are at the same level.
$answers[] = new SoapVar($quiz_id, XSD_STRING, null, null, 'quizId', $this->is);

foreach ($input as $name=>$value) {
    if (preg_match('/^question([0-9]*)$/i', $name, $parts)) {
        // Build questionId/choiceId
        $answer = array();
        $answer[] = new SoapVar($parts[1], XSD_STRING, null, null, 'questionId', $this->is);
        $answer[] = new SoapVar($value , XSD_STRING, null, null, 'choiceId', $this->is);
        // Build answer
        $answers[] = new SoapVar((array)$answer, SOAP_ENC_OBJECT, null, null, 'answer', $this->is);
    }
}

// Build scoreRequest from $answers (includes quizId)
$scoreRequest = new SoapVar((array)$answers, SOAP_ENC_OBJECT, null, null, 'scoreRequest', $this->is);

// Wrap with identityRequest
$identityRequest = new SoapVar(array('scoreRequest' => $scoreRequest), SOAP_ENC_OBJECT, null, null, 'identityRequest', $this->is);

$params = array(
    'identityRequest' => $identityRequest,
    'customerReference' => 'Company12345',
    'locale' => 'en_US',
    'productAlias' => 'Alias6789',
    'transactionID' => 'transId1234',
);
$request = new SoapVar($params, SOAP_ENC_OBJECT, null, null, 'request', $this->is);

如何将这 4 个属性添加到 SoapVar 中?正如您从上面看到的,我尝试了对象/数组与 $params 的混合,但这似乎不起作用。我最终得到了几个额外的 XML 标签/值。

我正在寻找类似的东西:

<ns1:invokeIdentityService ns1:customerReference="Company12345" ns1:locale="en_US" ns1:productAlias="Alias6789" ns1:transactionID="transId1234">

我希望有人可以提供一些帮助。我累极了。我和许多其他人一样,在 PHP5 SOAP 上遇到了困难。我总是觉得这比需要的更难。


有人想要有关 stdClass() 对象的更多详细信息,所以这里是。我并不认为这是解决此问题的好方法。一定有更好的方法。

    // Build scoreRequest from $answers (includes quizId)
    $scoreRequest = new SoapVar((array)$answers, SOAP_ENC_OBJECT, null, null, 'scoreRequest', $this->is);

    // SoapVar not used pass this point; see below.
    //$identityRequest = new SoapVar(array('scoreRequest' => $scoreRequest), SOAP_ENC_OBJECT, null, null, 'identityRequest');

    // scoreQuizRequest uses a mixture of SoapVar Objects and stdClass Objects.
    // stdClass Object is used to allow us to define the attributes for 
    // identityRequest, such as productAlias & transactionID.
    // Note: $scoreRequest is a SoapVar Object.
    $request = new stdClass();
    $request->identityRequest = new stdClass();
    $request->identityRequest->scoreRequest = $scoreRequest;

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

如何向 PHP SoapVar 对象添加属性? 的相关文章

  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 使用 PHP 创建图表并导出为 PDF

    我正在寻找有关使用 PHP 创建图表的建议 我还希望能够将这些图表导出到 PDF 文档 我目前正在使用谷歌图表 但我不喜欢将我的所有信息发送到谷歌的想法 我更喜欢自己的托管解决方案 我见过很多 Flash 解决方案 但我不知道有什么方法可以
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • 如何在 Zend Framework 中存储 cron 作业的脚本?

    因为 ZF 的所有 URL 都依赖于 mod 重写 所以我并不清楚应该在哪里存储用于 cron 作业的本地脚本 有人有什么建议 或者有 正式接受 的方式吗 我用模块化目录结构 http framework zend com manual e
  • Zend IMAP 搜索和过滤器

    我如何使用 Gmail 中的过滤器进行搜索 就像获取带有特定标签的电子邮件列表或来自特定电子邮件地址的邮件列表一样 我无法在文档中找到它 注意 我使用 oAuth 进行身份验证 我希望这与搜索无关 Gmail 上的标签实际上是 从 IMAP
  • strlen()==0 和empty()之间有区别吗?

    我正在查看其他人编写的一些表单验证代码 我看到了这个 strlen 0 当测试表单变量是否为空时 我使用empty 功能 一种方法比另一种方法更好吗 它们在功能上等效吗 strlen是获取字符串中的字符数 同时empty用于测试变量是否为空
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • PHP 中的 NOW() 函数

    是否有 PHP 函数以与 MySQL 函数相同的格式返回日期和时间NOW 我知道如何使用date 但我想问是否有专门用于此的功能 例如 返回 2009 12 01 00 00 00 您可以使用date https www php net m
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 未捕获的异常“Google_IO_Exception”,消息为“HTTP 错误:无法连接”

    我有一个任务 查询 运行一些从 gmail 邮箱检索数据的 php 代码 直到上周五 2015 年 4 月 10 日 它一直工作正常 现在我收到以下错误日志 E 11 58 26 094 2015 04 15 200 3 38 KB 14
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 为什么 PHP 中不允许“传统”类型提示?

    刚刚发现类型提示 http php net manual en language oop5 typehinting phpPHP 中允许 但不适用于整数 字符串 布尔值或浮点数 为什么 PHP 不允许对整数 字符串等类型进行类型提示 从 P
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了

随机推荐

  • 第二个下拉列表所选项目在 ASP.NET MVC 中不会更改

    我对 ASP NET MVC 的行为有点困惑 因为它在 POST 之后没有更改下拉列表的值 有人可以解释如何做到这一点 首先我有一个如下所示的模型 public class Test public int OneID get set pub
  • 非法动态引用

    jniPath val subProjectPath projectDependencies value map module gt jniPath in LocalProject module name value val path li
  • 如何在 FluentValidation 中使用 Reflection?

    我有一个场景 我想使用反射来使用 Fluent Validation 进行验证 像这样的事情 public class FooValidator AbstractValidator
  • 从 Java 列表生成 p:tabs

    我想从 Java 列表创建 Primefaces 选项卡 我测试了这段代码
  • 在 mysql 更新查询中查找受影响的字段

    我这里有一个复杂的问题 假设我的表中有 5 个字段 而我的一个用户在运行 mysql 更新查询的表单的帮助下仅更新了 2 个字段 那么有什么办法可以查出哪两个字段被改变了 好吧 我不确定这是否是最好的方法 但它会起作用 请注意 语法适用于
  • 将通用列表数组绑定到 GridView

    您好 我有一个返回 问题 数组的列表 我的问题是如何将其绑定到网格视图 当我尝试调用 Question Ordinal 时 我发现它在数据源中不存在 我正在使用以下代码 GridView1 DataSource myList GetQ Gr
  • 堆栈在缓存中吗?

    在现代计算机中 我知道当前代码区域位于高速缓存中 然而 在许多计算机语言实现中 本地 自动 变量将位于堆栈上 因此会对堆栈进行大量内存访问 在正常架构中 堆栈是否位于另一个缓存中 如果不是 则假设堆栈可以重新定位到 本地 即非常靠近当前代码
  • chrome 扩展:页面完成加载 javascript 后运行脚本

    当页面完成加载时 这根本不会触发 基本上 当我单击浏览器操作按钮时 它会触发它 并且在页面加载时 它将运行一个脚本 在我的background js中 var toggle false chrome browserAction onClic
  • 如何使用 JMeter 发送动态 URL 参数

    我想将 URL PATH 发送为 controller 1 1 controller 2 2 start 但是参数 2controller 2是动态的 如何发送该参数 使参数成为变量 controller 2 controller2 par
  • 使用 swift for Mac 应用程序获得管理权限

    我正在编写一个软件 需要经常以root权限运行命令 现在 我通过询问用户一次密码 保存密码 然后将该密码提供给NSAppleScript作为参数with administrator privileges 这显然对用户来说确实不安全 因为有人
  • 使用 Obj-C 的帖子发送 amp (&)

    我正在发送包含文本 数字和数据的帖子 数字和数据工作正常 但我在文本方面遇到问题 因为它可能包含与号 例如 page php text Hello World Space 现在我发现 被服务器接收到 但读起来就像一个新变量开始一样 所以它看
  • pyqtdeploy:无法检测到 MSVC2015 或 MSVC2017

    我第一次尝试 pyqtdeploy 遵循文档 https www riverbankcomputing com static Docs pyqtdeploy demo html 运行 build demo py 时出现以下错误 C User
  • 将phoneGap 与本机iOS 应用程序集成

    我正在尝试创建一个使用本机功能和phoneGap 框架组合的应用程序 本机应用程序有一个按钮 单击该按钮后 phoneGap ui 必须添加到视图中 有什么办法可以实现这一点吗 有相同的教程吗 是的 这是可能的 尽管您可能会让自己陷入一些头
  • 如何确定我是否在 Android Wear 中运行?

    我在 Android Studio 中有一个移动和穿戴模块 它们都使用 核心 代码库 在该核心代码中 我如何确定我的代码是否在 移动 模块的 穿戴 上运行 我应该使用屏幕尺寸吗 尽管这没有正式记录 据我所知 您可以通过调用以下任一方法来确定
  • 使用 pyautogui 输入 unicode 字符串

    我正在创建一个自动测试应用程序pyautogui库 我想用typewrite将文本输入到表单中的方法 但我的一些输入字符串中含有 unicode 字符 例如 N st 根据文件typewrite只能按单字符键 所以它只是忽略了 特点 您能建
  • 使用 EC2 + Rails + Nginx + Capistrano 重新启动时 Puma 重新启动失败

    我已成功使用 capistrano 将我的 Rails 应用程序部署到 Ubuntu EC2 部署时一切都运行良好 Rails 应用程序名称是 deseov12 我的问题是 Puma 不会在启动时启动 这是必要的 因为生产 EC2 实例将根
  • 如何为其他类成员函数编写模板包装方法?

    我尝试为具有不同参数的不同函数创建一个模板化包装器 设置是一个类A基本实现有两种方法foo and bar 另一堂课B应包装这些方法并添加新功能 以下链接中的解决方案对于非类函数非常有效 c 11 模板化包装函数 https stackov
  • 如何使用 JavaScript 添加到现有的 dataTransfer.files 对象?

    我正在创建一个拖放文件上传区域 当我一次上传多个文件时 它可以工作 但我需要它能够支持分多个阶段上传 我知道下面的问题是我每次都设置文件 但我无法找出每次调用该方法时将更多文件添加到 dFiles 的正确方法 var dFiles var
  • openssh/opensshportable,我应该从内存中提取哪个密钥?

    我想在 OpenNebula 等虚拟环境中解密 ssh 流量 为此 我从 openssh opensshportable 代码的 key derive keys 函数中提取了 6 个 ssh 密钥 IV 加密密钥和完整性密钥 如果我跟踪服务
  • 如何向 PHP SoapVar 对象添加属性?

    如何向 PHP SoapVar 对象添加属性 PHP5 SoapClient SoapVar 我有一个 SOAP 客户端请求情况 其中有重复的部分 答案 每个部分都有一个问题和选择 这是测验评分过程的一部分 根据我在 PHP5 SOAP 客