私が理解していることから、ページを更新したり、リロードせずに価格を計算したりするには、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変数を新しい合計に設定する方法に戻ります。