2

Magento Ogone モジュールをアップグレードして、新しい SHASign 計算に対応させたいと考えていました。現在は問題なく動作していますが、問題が発生しています...

Magento メソッドによって返されるいくつかの文字列に問題があります。 Mage::getUrl('ogone/api/accept');

画面に表示されない文字を含む文字列が返されます。どうしてか分かりません。

string(89) "ACCEPTURL=http://www.xxxxxxx.be/store/fr_be/ogone/api/accept/KKKKKKKKKKKKKKKKKKKK"

KKKK = オゴネの秘密のコード

長さが 89 ではなく 80 であることを確認すると、隠れた車がいくつかあります。for ループを実行して文字を 1 つずつエコーすると、それらを見ることができます。

表示されない文字は次のとおりです: ?___SID=U Magento にチェックインしましたが、URL のセッション ID パラメーターは既に無効になっています。

このモジュールでは、Ogone に送信されたすべてのフォーム フィールドを取得し、SHA-1 文字列を作成して、私と Ogone だけが使用できる文字列でデータの整合性を確保する必要があります。そして、その問題により、フォーム内の URL が ?___SID=U なしで表示されるため、私の側で構築された SHA-1 文字列は Ogone と同じではありません。

まず第一に、構成でMagentoに含めないように依頼したときに、Magentoがそれを含める理由がわかりません。次に、なぜ var_dump() や echo に文字が表示されないのですか?

この状況をデバッグするにはどうすればよいですか? 私を助けることができるいくつかの機能がそこにあると思います。

URL を作成する別の関数で問題にパッチを当てたので、SHA-1 文字列は問題なく認識され、モジュールは正常に動作しているように見えます。私の懸念は、strlen関数とハッシュ関数が見るがエコーやその他の印刷関数ではない隠し文字にもっと焦点を当てています。

助けてくれてありがとう。私の母国語ではなく、英語が下手ですみません。

4

3 に答える 3

1

私もこの問題に見舞われました。

これは、文字列全体を出力するために「機能する」ことに注意してください。

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

しかし、これは次の?___SID=U部分を省略しています。

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

文字の数値コード(10進数)も印刷しようとしましたが、有効なようです:

63 95 95 95 83 73 68 61 85

これはPHPのバグですか?

これはエンコーディング/マルチバイト/Unicode の問題だと思っていましたが、これは単なる Magento テンプレート システムの特性であることが判明しました。

私はこのコードを試しました:(:Magentoテンプレートコードで!)

echo 'Hello?___SID=UWorld';

信じられないかもしれませんが、次のようになります。

HelloWorld

str_replaceしたがって、URL は「間違っています」が、Magento がこれらの URL を「隠す」ために使用するメカニズムは、文書化されていないと私が信じていることを単純に行うことで、さらに間違っています。(文書化されていても、誰もこれを期待しないでしょう!)

于 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 に答える
1

これらの「隠し」文字は Unicode でしょうか? mb_strlen を試しましたか?

于 2011-07-20T11:26:44.223 に答える