Magento Soap API V2 响应内容长度不正确

2024-01-02

我们正在尝试将我们的 magento 安装与第三方库存管理应用程序(基于 .net 构建)连接起来。但同步不起作用,第三方告诉我,soap api 返回空响应。

我一直在努力倾听,因为每当我用 PHP 做任何事情时,API 都能正常工作。此外,库存更新工作正常,但检索订单/发票信息却不行(事实上,偶尔有 1% 的时间确实如此)

由于间歇性,我们认为这一定是网络问题,但经过大量搜索并将 mage::log() 添加到核心 api 文件中后,我可以看到连接正在发生,而且响应对象正在由马根托。

所以我的推断是 SOAP API 出了问题(我使用的是版本 2)

我已经安装了soapUI并设置了我们的集成,它正确地接收了来自WSDL文件的方法,但是当我尝试访问“登录”方法时,我得到一个空响应,即使我输入了错误的登录详细信息,它也是空的。

SoapUI 输出以下错误:

错误:发生错误 [Content-Length 分隔的消息正文过早结束(预期:267;收到:266],有关详细信息,请参阅错误日志

因此,似乎 http 标头存在问题,某些函数能够返回响应(当然,如果没有登录哈希,它只是无效的,但至少它是一个响应)。从我对 java 和 .net 的(极其有限的)理解来看,它们在这些方面比 php 严格得多,这表明为什么 php 集成不会有问题。

谁能告诉我为什么会发生这个错误以及如何修复它?


我假设您正在使用符合 WS-I 的 SOAP API v2,因为我遇到了完全相同的问题;如果不是,那么这仍然可能适用。如果 v2 API 不符合 WS-I 标准,我就无法连接到它,这就是我发现这个 bug 的原因。

如果你看一下app/code/core/Mage/Api/Model/Server/Wsi/Adapter/Soap.php您将在公共运行函数中看到该文件,该函数本质上分为两部分 - 1 个用于 WSDL 定义响应,1 个用于实际 SOAP 响应。

在 SOAP 响应中,有一些字符串替换正在进行,替换<soap:operation soapAction=""></soap:operation> for <soap:operation soapAction="" />等等。这显然导致了内容长度计算的问题 - 这也发生在 WSDL 定义响应中,但它似乎并没有导致问题。

通过将 try 大括号之间的代码替换为下面的代码,我能够成功连接到 SOAP API。基本上,我最终清除了标题并重新计算内容长度AFTER字符串替换已经发生:

            $this->_instantiateServer();

            $content = preg_replace(
                        '/(\>\<)/i',
                        ">\n<",
                        str_replace(
                                '<soap:operation soapAction=""></soap:operation>',
                                "<soap:operation soapAction=\"\" />\n",
                                str_replace(
                                        '<soap:body use="literal"></soap:body>',
                                        "<soap:body use=\"literal\" />\n",
                                        preg_replace(
                                            '/<\?xml version="([^\"]+)"([^\>]+)>/i',
                                            '<?xml version="$1" encoding="'.$apiConfigCharset.'"?>',
                                            $this->_soap->handle()
                                        )
                                )
                        )
                    );

            $this->getController()->getResponse()
                      ->clearHeaders()
                      ->setHeader('Content-Type','text/xml; charset='.$apiConfigCharset)
                      ->setHeader('Content-Length',strlen($content))
                      ->setBody($content);

希望这可以帮助

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

Magento Soap API V2 响应内容长度不正确 的相关文章

  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • CXF:在同一个soap:地址上实现多个端口?

    我们从客户那里收到了 WSDL 要求我们在我们这边实现该服务 WSDL 包含 3 个端口绑定 具有不同的名称和绑定 但相同
  • Trello API - 未经授权的权限请求

    我正在尝试编写一个小脚本来更新卡的当前列表中的时间量 以便我们可以优化吞吐量 我在 jsfiddle 上写了一个小脚本 几乎可以工作 但我得到了一个 请求未经授权的卡许可 当尝试使用时 Trello post cards card id a
  • PHP 版本如何匹配“API=yyyymmdd”签名/标签?

    是否有明确且可靠的来源来找出哪个 PHP 发行版本 x y z 携带 使用哪个 API yyyymmdd 签名 标签 PHP 的版本控制存储库是 PHP 版本与其 API 日期版本之间相关性的权威来源 请记住 仅主要版本PHP 的版本 例如
  • Twitter Streaming API 使用的官方编码?是UTF-8吗?

    Twitter 流 API 的官方编码是什么 根据我所看到的 我最好的猜测是 UTF 8 但我想避免做出假设 我见过的 Twitter 网站上唯一暗示他们使用什么作为官方编码的部分是在这里 Twitter 不想因为我们使用 UTF 8 或相
  • Yammer API 限制

    Yammer Rest api 文档表示 每个应用程序每个用户在 10 秒内最多可以发出 10 个请求 问题 什么是user这里 是为当前经过身份验证的 yammer 用户发出请求的 IP 地址还是承载令牌 如果我们所有的用户都使用相同的外
  • 如何在 magento 的左侧栏中显示最新、评价最高和最好的产品

    我正在使用 Magento 版本 1 5 0 1 在主页中 我使用了 2 列和左栏 我想逐一展示最新的 评价最高的和最好的产品 请帮助我如何做到这一点 我是magento新手请帮助我 在您的 app design frontend your
  • 寻找Android源代码

    Android API 是开源的吗 如果是这样 我想看看他们如何实现 ListView 对象的 smoothscroll 方法 这是在 API 级别 8 中实现的 但我想针对早期的 API 级别进行构建 我该如何找到这个 是的 它是开源的
  • 在 ASP.NET 3.5 中使用 ASMX 文件的 WS-Security

    基本上 我需要设置 ASMX 文件 以便当我在浏览器中将其拉出以显示 WebMethod 规范时 Soap 标头符合以下格式
  • Spotify Apps API:库类不会返回用户播放列表

    我试图获取一个包含用户库中所有播放列表的数组 http developer spotify com download spotify apps api reference dcdebc652c html 其他类属性 专辑 艺术家 加星标的播
  • Axis2 错误:要输出的文本中的空白字符 (0x4) 无效

    我创建了一个 Java 客户端 使用 Axis2 1 7 6 作为代码生成器与 SOAP Web 服务进行交互 问题在于客户端的某些输入抛出异常并显示以下消息 org apache axis2 AxisFault Invalid white
  • Magento - 将特定父类别的子类别列为链接

    我是 php 的初学者 并且一直试图将一个父类别的子类别作为链接调用 我得到了这个 它调出了 getName 但 getUrl 根本没有返回任何 URL 输出代码只是 li a href name of sub a li
  • Booking.com酒店管理API

    我拥有一家酒店 并在 booking com 上查看了 API 因为我想创建自己的前端界面来更新我的酒店房价 房间数 以及通过该 API 上传图片 更新酒店描述 然而 我唯一能找到的是一个 API 供联营公司以一定的价格获取特定位置的酒店等
  • Magento:如何覆盖本地模块中的模型

    我试图在本地文件夹中覆盖本地文件夹中的模块 但我不知道是否可能 这就是我所做的 我创建了 local Mycompany Modulename Model Model php 我想覆盖 local Othercompany Modulena
  • webm视频转换API

    有谁知道用于将视频转换为谷歌新的 WebM 视频格式的 原型 c API 谷歌快速搜索显示 不 但是编码器示例 http www webmproject org tools vp8 sdk example simple encoder ht
  • 如何为 ApplicationController 中 after_action 过滤器中的所有操作渲染 json?

    是否可以在 Rails ApplicationController 中创建一个 after filter 方法 该方法在每个操作上运行并呈现为 JSON 我正在构建一个 API 并且希望将控制器中的每个操作的输出呈现为 JSON 客户控制器
  • Web 应用程序使用 API 来完成一切?

    我即将开始为我的公司规划一个内部项目管理工具 API 一直让我疑惑 首先创建 API 并使用这些 API 调用构建实际站点而不是实施两次 是否会被视为不好的做法 效率太低 让我知道你的想法 我完全同意开发 API 将为您提供解耦的架构 并且
  • 是否有用于绘制图表的Python API(使用线条连接两个列表之间的相应值)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Given two lists which contain same elements of strin
  • 有没有办法以编程方式访问 Google 的搜索引擎结果? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谷歌是否提供了一种以编程方式查看特定查询的搜索引擎结果的方法 我想构建一个跟踪应用程序 以便用户可以看

随机推荐

  • 如果 StringSet 不存在,则追加或创建

    所以这应该很简单 我想将字符串附加到 DynamoDB 中的 StringSet 如果存在 或者创建 StringSet 属性 如果不存在 并设置值 如果我们可以在创建时用空数组初始化 StringSet 那就太好了 但遗憾的是我们不能 这
  • Spring 和 PostgreSQL 之间的编码错误

    我有一个 Spring Boot 版本 1 3 Web 应用程序 全部采用 UTF 8 格式 还有一个 PostgreSQL 服务器 服务器编码为 UTF 8 客户端编码为 WIN1252 问题是 当我手动在数据库中保存带有特殊字符的内容时
  • 当列数变化时动画回收器视图网格

    我正在使用一个RecyclerView with GridLayoutManager 用户可以在 2 和 4 之间切换跨度计数 这将产生一个动画 该动画将每个单元格的内置平移动画运行到其新位置 到目前为止我一直使用的代码是 Transiti
  • 将日期的 NSString 转换为 NSDate

    这可能是一个愚蠢的问题 但我似乎无法在这里或文档中找到答案 我想将 NSString 例如 9 22 2010 3 45 PM 转换为 NSDate 我知道使用 NSDateFormatter 但问题是 月份可以是一位数或两位数 同样 日期
  • Java 8 显示此错误。在封闭范围内定义的局部变量 itemList 必须是最终的或有效最终的

    我正在使用 java 8 编写代码 但我迭代了List然后找到RestaurantOrderBook使用类别类型 并把它List into a Map 它显示这个错误 局部变数itemList在封闭范围中定义的必须是最终的或有效最终的 Qu
  • 如何在 Play 2.6 上禁用 CSRF 过滤器?

    我一直在尝试将 Postman 与 Play Framework API 结合使用 但我不断遇到与 CSRF 过滤器相关的问题 我浏览了一些论坛 包括SO 寻找解决方案 并且众所周知的建议似乎正在添加 play filters disabl
  • std::optional::value_or() - 惰性参数求值

    是否可以评价std optional value or expr 以一种懒惰的方式论证 所以expr仅在没有值的情况下才计算 如果没有 什么是合适的替代品 include
  • 复制构造函数参数

    在复制构造函数中 为什么参数需要具有与其关联的默认值 如果没有与它们关联的默认值并且构造函数中提供了多个参数 会发生什么情况 例如 X const X copy from me int 10 int 有一个默认值 但是 X const X
  • 黑莓 - 运行后台应用程序

    下午好 我开始用java和黑莓编程 我正在开发一个具有三个窗口的应用程序 我将在其中显示有关设备的基本信息 这些窗口已经完成并正在运行 我需要创建一个在后台运行的进程 该进程每 10 分钟运行一次 当我让这个进程在后台运行并正在努力关闭窗口
  • 使用.NET Core和Angular 2/4的Web应用程序的基础层

    您好 我正在寻找使用 yeoman 应用程序生成器或最少量代码模板的说明来创建集成 Entity Framework Core 和 Angular 2 4 的 Web 应用程序 最好提供的答案将使用 yeoman 应用程序生成器 我也不介意
  • JSR 352 重新启动作业?

    当作业重新启动时 仅再次运行失败的分区 如何再次运行已成功完成的作业 再次提交作业和重新启动作业有区别吗 我正在 Websphere Liberty 上使用 IBM 的 JSR 352 实现 Java Batch 的设计使得当您重新启动作业
  • 如何在“我的 iPhone 应用程序”中使用 C++ STL 容器?

    我想在我的 iPhone 应用程序中使用 STL 集 它是在 XCode 中用 Objective C 编写的 如何包含设置和 或使用标准命名空间 在 C 中我会这样做 include
  • 增加按钮的可点击区域

    我想增加按钮的可点击区域 但是按钮中的图像应保持相同的大小 而且我已将图像设置为背景而不是源 我该怎么做
  • 你可以设置 RootViewController 的动画吗?

    我正在使用 SplitViewController 它不能成为导航控制器的一部分 我在 IBAction 上使用 SetRootViewController 这很好 但它不是动画的 理想情况下 我想使用与导航控制器相同的动画 从左 右滑入
  • 为什么我的节点悬停弹出窗口在 vis.js 网络中不起作用?

    我遇到一个问题 尽管在节点对象中包含 标题 属性 但当我将鼠标悬停在节点上时 没有显示包含标题内容的弹出窗口 以下是我的选择以及我如何设置网络 setUpNetwork let container document getElementBy
  • PromQL 用于绘制每小时创建的 Kubernetes POD 数量的图表

    我使用 Kubernetes 与 kube state metrics 和 Prometheus grafana 来绘制 Kubernetes 集群的各种指标 现在我想绘制有多少new随着时间的推移 每小时都会创建 POD 指标kube p
  • numpy.linalg.solve() 和 Rsolve() 之间的区别

    在自学 GP 和高斯回归时 我偶然发现了 Nando 关于该主题的讲座 part 1 https www youtube com watch v 4vGiHC35j9s and part 2 https www youtube com wa
  • 在 symfony 中执行自定义 SQL

    我正在尝试执行一些自定义 SQL 来检索 Symfony 应用程序中的一些模型对象 我在网上找到了一个教程 其中说类似的内容将允许我执行查询 但不填充模型 填充模型不是主要问题 它只是用于只读数据 pdo Doctrine Manager
  • PHP 日期验证功能

    我的网站上有一个简单的表格 要求提供活动 ID 日期和金额 我想确保用户输入的任何日期都大于未来 10 天 如果我的客户的活动结束时间不到 10 天 我不希望他们在线付款 一旦他们输入信息 他们就会被引导到一个安全的网站 在那里他们可以进行
  • Magento Soap API V2 响应内容长度不正确

    我们正在尝试将我们的 magento 安装与第三方库存管理应用程序 基于 net 构建 连接起来 但同步不起作用 第三方告诉我 soap api 返回空响应 我一直在努力倾听 因为每当我用 PHP 做任何事情时 API 都能正常工作 此外