2

我想升级 Magento Ogone 模块以匹配新的 SHASign 计算。现在工作正常,但有一个问题......

我对 Magento 方法返回的一些字符串有疑问: Mage::getUrl('ogone/api/accept');

它返回一个字符串,其中包含一些不会在屏幕上打印的字符。我不知道为什么。

字符串(89)“ACCEPTURL=http://www.xxxxxxx.be/store/fr_be/ogone/api/accept/KKKKKKKKKKKKKKKKKKK”

KKKK = 来自 ogone 的密码

如果您检查长度不是 89 而是 80。有一些隐藏的汽车,如果我执行 for 循环并逐个回显字符,我可以看到它们。

未显示的字符是: ?___SID=U 我在 Magento 中签入,并且 URL 中的会话 id 参数已被禁用。

在模块中,我需要获取发送到 Ogone 的所有表单字段并创建一个 SHA-1 字符串,以确保数据完整性与仅对我和 Ogone 可用的字符串。有了这个问题,我这边构建的 SHA-1 字符串与 Ogone 不同,因为表单中的 URL 显示时没有 ?___SID=U :告诉你它不会被打印!

所以首先我不知道为什么当我在配置中要求 Magento 不包含它时,为什么要包含它。其次,为什么我看不到 var_dump() 或任何 echo 上的字符?

我该如何调试这种情况?我想那里有一些功能可以帮助我。

我用另一个函数修复了这个问题来构建 URL,这样我的 SHA-1 字符串就可以知道并且模块看起来工作正常。我的关注点更集中在 strlen 函数和散列函数看到的那些隐藏字符,而不是 echo 或任何其他打印函数。

感谢您的帮助,请原谅我的英语不好,而不是我的母语。

4

3 回答 3

1

这些“隐藏”字符可以是 Unicode 吗?你试过 mb_strlen 吗?

于 2011-07-20T11:26:44.223 回答
1

我也遇到了这个问题。

请注意,此“有效”用于打印出整个字符串:

for ($i = 0; $i < strlen($linkUrl); $i++) print $linkUrl[$i].' ';

但是这个省略了?___SID=U部分:

for ($i = 0; $i < strlen($linkUrl); $i++) print $linkUrl[$i];

我还尝试打印字符的数字代码(十进制),但它似乎只是有效的:

63 95 95 95 83 73 68 61 85

这是一个PHP错误吗?

我认为这是一个编码/多字节/Unicode 问题,但事实证明这只是 Magento 模板系统的特性。

我试过这段代码:(注意:在 Magento 模板代码中!)

echo 'Hello?___SID=UWorld';

不管你信不信,你会得到这个:

HelloWorld

因此,尽管 URL 是“错误的”,但 Magento 用来“隐藏”这些 URL 的机制更加错误,只需执行str_replace我认为未记录的操作即可。(即使有文档记录,也没有人会想到这一点!)

于 2011-10-21T09:10:56.207 回答
1

我们遇到了同样的问题。如果有人仍然遇到同样的问题,我找到了一个相当不错的解决方案。

最初,类似这样的内容包含在 Config.php 文件中:

public function getAcceptUrl()
{
    return Mage::getUrl('ogone/api/accept');
}

如果你用这个替换它,就不会再附加隐藏的 ?___SID 东西了:

public function getAcceptUrl()
{
    return Mage::getUrl('ogone/api/accept', array('_nosid' => true));
}

你应该对所有其他 get****Url() 函数做同样的事情,问题就解决了。

于 2012-02-09T15:59:13.123 回答