Craft Commerce eWAY支払いエラー

私はCraft Commerceを eWAY と統合する上でいくつかの問題を抱えています。
支払いフォームを送信すると、次のエラーが表示されます。

エラー:[支払いエラー:EWAY_CARDNAME必須、EWAY_CARDNUMBER必須、無効EWAY_CARDEXPIRYMONTH、無効EWAY_CARDEXPIRYYEAR、EWAY_CARDCVN必須]

eWAYゲートウェイプラグインはフォーム入力フィールド名をこれらのeWAYフィールド名に変換する必要がありますか?

ベストアンサー

どのeWayを実装していますか?

私たちはeWAY Rapid Directを商取引で1年以上問題なく使用してきました。

ほとんどの人が見逃していると思われる鍵は、eWayへのゲートウェイ提出が始まる前に、eWayプロセスのCSE –
クライアントサイド暗号化を実装する必要があるということです。これはeWayによってここに書かれています:

https://eway.io/api-v3/#how-it-works

要するに、あなたの支払いフォームページにいくつかのJSを入れるだけです。そのページでは、カード番号などを通常どおり受け入れますが、
ewayに渡す前にはクライアントマシンで暗号化する必要があります。ここでは、私が最初に意味することを示すためのいくつかのscrappy
JSがeWay JS:

                    {# Include EWAY CSE JS #}
                {% if craft.config.devMode %}
                    <script src="https://secure.ewaypayments.com/scripts/eCrypt.debug.js"></script>
                {% else %}
                    <script src="https://secure.ewaypayments.com/scripts/eCrypt.js"></script>
                {% endif %}

…あなたの決済フォームには、後で必要になるので、このようなものがあります(私は、コマースの設定ファイルに自分のキーを格納していますので、環境に基づいてデベロッパーとライブを設定できますが、
):

              {% set paymentMethods = craft.commerce.paymentMethods %}
                  <input type="hidden" name="CSEKey" value="{{ paymentMethods[1].settings.CSEKey }}">

次に、物事の実際の暗号化の側面に対処する必要があります…このようなものはあなたのためにそれを行う必要があります:

        var method = $('input[name=paymentMethodId]:checked', '#submitOrder').val();

    if (method == 1) {
       //EWAY Client Side Encryption - See https://eway.io/api-v3/#encrypt-function

       //EWAY CSE - encrypt the card number and the CCV on the client's machine so it's never seen by us or anyone else.
       //Pull the values from the test input fields (fake*)
       //and inject the encrypted version into the real fields
        var $fakeCardNumber = $("#fakeNumber");
        var $fakeCcv = $("#fakeCvv");
        var $cardNumber = $("input[name=encryptedCardNumber]");
        var $ccv = $("input[name=encryptedCardCvv]");

       //get the unencrypted values and remove all spaces from the numbers
        var cardNumber = $fakeCardNumber.val().replace(/s/g, "");
        var ccv = $fakeCcv.val().replace(/s/g, "");

       //and now re-set them to the encrypted values if these are actually filled in
        if (cardNumber) {
            $cardNumber.val(eCrypt.encryptValue(cardNumber, CSEKey));
        }
        if (ccv) {
            $ccv.val(eCrypt.encryptValue(ccv, CSEKey));
        }
    }

これはもっとも美しいコードではありませんが、これを実装すれば(eWayに準拠するためにはtomが必要です)、そこから十分に簡単に物事が落ちることがわかります。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です