gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:49:32 25 4
gpt4 key购买 nike

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

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

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

所以我的推论是 SOAP API 有问题(我使用的是版本 2)

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

soapUI 输出以下错误:

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

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

谁能告诉我为什么会出现这个错误以及如何解决它?

最佳答案

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

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

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

通过将 try 大括号之间的代码替换为以下代码,我能够成功连接到 SOAP API。基本上,我最终清除了 header 并重新计算了内容长度 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);

希望对你有帮助

关于api - Magento Soap API V2 响应内容长度不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com