2

私が理解していることから、ページを更新したり、リロードせずに価格を計算したりするには、ajaxを使用する必要があります。正しい?

小計、税金、総計を表示するショッピングカートがあります。ユーザーは、税金を請求するかどうかを知るために、州を選択する必要があります。次に、「チェックアウト」をクリックします。これは、実際にはAuthorize.netに関連付けられているボタンです。私のクライアントはページのリロードや更新を望んでいないので、状態を選択したらAjaxを使用してページを更新する必要があります。

Authorize.netには、、、など$amount_varの一連の変数があります。これらの変数は、これらの変数を使用して「非表示」の値に配置し、処理のために送信されます。ajaxがアクセスするphpページで処理された合計計算量と等しくなるように変数を変更しようとしています。$loginID$transactionKey$amount_var

状態のドロップダウンメニューにはがありonchange="doStateTax()"ます。GRANDtotalpriceカート内のすべてのアイテムの現在の合計を含む隠しフィールドはどこにあり、ddlどの状態を選択したかです。

<script type="text/javascript">
    function doStateTax(){
        var grandtotalX = $('#GRANDtotalprice').val();
        var statetaxX = $('#ddl').val();

        $.post('statetax_query.php',
        {statetaxX:statetaxX, grandtotalX:grandtotalX}, 
        function(data) {
            data = $.parseJSON(data);
            $('.products-placeholder').html(data.products);     
            $('.statetax-placeholder').html(data.statetax);     
            $('.total-placeholder').html(data.total);
            // ...
        });
        return false;
    };
</script>

これはPHPページに投稿され、状態が「ミシガン」であるかどうかを確認します。もしそうなら、彼らは6%の税金を請求されます。これが計算を行う私のPHPページです:

 <?php
    if (($_POST['statetaxX'] == 'MI'))
    {
        $taxselect = .06;
        $taxselect1 = 1.06;
    }
    else
    {
        $taxselect = 0;
        $taxselect1 = 1;
    }

    $products = number_format(($_POST['grandtotalX']), 2, '.', '');
    $tax = number_format((($_POST['grandtotalX'])*($taxselect)), 2, '.', '');
    $total = number_format((($_POST['grandtotalX'])*($taxselect1)), 2, '.', '');

    $results = array(
       'products' => $products,
       'statetax' => $tax,
       'total' => $total
    );
    $json = json_encode($results);
    echo $json;
?>

ここで、プロセスがどのように機能するかについて考えることができなくなります...結果は、いわゆる「成功コールバック」に戻ると思いましたか?小計、税金、合計が瞬時に変化するので、機能します。ここにこのコードがあるため、番号が表示されます。

$('.total-placeholder').html(data.total);

ただし、これは結果を表示するだけです。コードのどこで、Authorize.netに$amount_var変数を合計に変更させるのですか?繰り返しになりますが、コードの一部には、ページの下部近くにある私のphpショッピングカートにあります。

$amount_var = "youramount;
$loginID        = "loginid";
$transactionKey = "transkey";

と呼ばれる隠しフィールドに成功コールバックを挿入できれば非常に簡単ですx_amountが、それほど簡単ではありません。彼らは$amount_var指紋を設定するなどの他の理由でを使用するので、私は彼ら$amount_varを自分の計算と等しくなるように設定する必要があります。これをphpページで設定しますか?またはjavascript?他の場所?

編集:応答コード99エラー

ほとんど動作しています。コードを追加すると、応答コード99エラーが発生します。税金を必要としない州を選択すると、機能します。MI(ミシガン)を選択すると、応答コード99が表示されます。これは、この部分の間に不一致があるためです。

<input type='hidden' name='x_amount' value='<?php echo $amount; ?>' />

この:

// The following lines generate the SIM fingerprint.  PHP versions 5.1.2 and
// newer have the necessary hmac function built in.  For older versions, it
// will try to use the mhash library.
if( phpversion() >= '5.1.2' )
    { $fingerprint = hash_hmac("md5", $loginID . "^" . $sequence . "^" . $timeStamp .     "^" . $amount . "^", $transactionKey); }
else 
    { $fingerprint = bin2hex(mhash(MHASH_MD5, $loginID . "^" . $sequence . "^" .         $timeStamp . "^" . $amount . "^", $transactionKey)); }
?>

非表示フィールドの「$amount」部分がスクリプトに置き換えられているため、上記の$fingerprintの「$amount」部分はスクリプトによって変更されていません。Authorize.netでは指紋部分と非表示フィールドが必要だと思います。これにより、この$amount変数を新しい合計に設定する方法に戻ります。

4

1 に答える 1

2

大量のスタッフを削除しましたB/Cそれは目的の方法でした

あなたがそれを望むなら私の答えの歴史をチェックしてください

編集

名前の付いたフィールドがありますx_tax

この行の後

$('.statetax-placeholder').html(data.statetax);

これを追加

$('input[name=x_tax]').val("Tax1<|>state tax<|>"+data.statetax);

SIMガイドの28ページの下部から:http ://www.authorize.net/support/SIM_guide.pdf

追加の出荷情報(レベル2データ)税(x_tax)値:有効な税額または区切られた税情報形式:区切られた税情報を送信する場合、値は括弧で囲まれたパイプで区切る必要があります<|>注:請求される税額または送信する場合HTMLフォームPOSTによるこの情報、消費税名、説明、金額などの区切られた税情報も許可されます。税項目名<|>税の説明<|>税額形式:区切り情報を送信する場合、ドル記号($)は使用できません。注:x_amountのトランザクションの合計金額には、この金額が含まれている必要があります。例:州税<|> 0.0625">

別の編集

php側では、ajax呼び出し(PHP側)でフィンガープリントを生成します。

if( phpversion() >= '5.1.2' )
{
    $fingerprint = hash_hmac("md5", $loginID . "^" . $sequence . "^" . $timeStamp .     "^" . $amount . "^", $transactionKey);
}
else 
{
    $fingerprint = bin2hex(mhash(MHASH_MD5, $loginID . "^" . $sequence . "^" .         $timeStamp . "^" . $amount . "^", $transactionKey));
}

$results = array(
   'products' => $products,
   'statetax' => $tax,
   'total' => $total,
   'fingerprint' => $fingerprint // Pass the fingerprint
);
$json = json_encode($results);
echo $json;

成功したAjaxについて:

// Tax amount
$('input[name=x_tax]').val("Tax1<|>state tax<|>"+data.statetax);
// Total amount
$('input[name=x_amount]').val(data.total);
// use the new Fingerprint
$('input[name=x_fp_hash]').val(data.fingerprint);
于 2012-07-08T13:12:18.020 に答える