我想升级Magento Ogone模块以匹配新的SHASign计算。 它现在工作正常,但有一个问题......
我遇到了Magento方法返回的一些字符串的问题:Mage :: getUrl('ogone / api / accept');
它返回一个字符串,其中包含一些不会在屏幕上打印的字符。我不知道为什么。
string(89)“ACCEPTURL = http://www.xxxxxxx.be/store/fr_be/ogone/api/accept/KKKKKKKKKKKKKKKKKK”
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函数和hash函数看到的隐藏字符,而不是echo或任何其他打印函数。
感谢您的帮助,请原谅我的英语不好,而不是我的母语。
答案 0 :(得分:1)
这些“隐藏”的字符是否可以是Unicode?你试过mb_strlen吗?
答案 1 :(得分: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
。 (即使记录在案,也没有人会想到这一点!)
答案 2 :(得分: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()函数执行相同的操作,问题就解决了。