diff --git a/booking.stripe.inc b/booking.stripe.inc index 072c888..d654600 100644 --- a/booking.stripe.inc +++ b/booking.stripe.inc @@ -103,6 +103,7 @@ function booking_stripe_form($node, &$form_state, $person, $invoiceid, $net_amou 'token_email' => '', 'token_client_ip' => '', 'card_brand' => '', + 'card_country' => '', 'card_cvc_check' => '', 'card_address_zip_check' => '', ); @@ -162,23 +163,30 @@ function booking_stripe_validate_form_payment($form, &$form_state) { \Stripe\Stripe::setApiKey(_booking_get_stripe_private_key()); //get values from original form + //@todo sanitise this input $token = (isset($form_state['input']['token_id']) ? $form_state['input']['token_id'] : ''); + watchdog('booking_debug', "
Stripe token:\n@info
", array('@info' => print_r( $token, true))); $amount = (isset($form_state['input']['gross_amount']) ? $form_state['input']['gross_amount'] : ''); $invoice = (isset($form_state['input']['invoice']) ? $form_state['input']['invoice'] : ''); $nid = (isset($form_state['input']['nid']) ? $form_state['input']['nid'] : ''); $tempid= (isset($form_state['input']['uuid']) ? $form_state['input']['uuid'] : ''); $last_name = (isset($form_state['input']['last_name']) ? $form_state['input']['last_name'] : ''); $first_name = (isset($form_state['input']['first_name']) ? $form_state['input']['first_name'] : ''); - watchdog('booking_debug', "
Stripe token:\n@info
", array('@info' => print_r( $token, true))); + $card_brand = (isset($form_state['input']['card_brand']) ? $form_state['input']['card_brand'] : ''); + $card_country = (isset($form_state['input']['card_country']) ? $form_state['input']['card_country'] : ''); - //if card type is american express then the rate charged should be different - $card_type = (isset($form_state['input']['card_brand']) ? $form_state['input']['card_brand'] : ''); - if ($card_type == 'American Express') { - //amount charged should be the international rate not the domestic rate - //@todo verify that nid is correct format - //@todo debug log to indicate price change + //if card issuer is american express then the transaction fee charged should be the international rate + if ($card_brand == 'American Express') { $person = node_load($nid); $amount = (isset($form_state['input']['foreign_gross_amount']) ? $form_state['input']['foreign_gross_amount'] : $amount); + watchdog('booking_debug', "Detected Amex card use, setting amount to !amount", array('!amount' => $amount)); + } + //if card is issued from a different country then apply the international rate also + elseif (variable_get('booking_default_country', 'Australia') == 'Australia' && $card_country != 'AU') { + $person = node_load($nid); + $amount = (isset($form_state['input']['foreign_gross_amount']) ? $form_state['input']['foreign_gross_amount'] : $amount); + watchdog('booking_debug', "Detected foreign card use (country !country), setting amount to !amount", + array('!country' => $card_country, '!amount' => $amount)); } // Create the charge on Stripe's servers - this will charge the user's card diff --git a/booking.stripe.js b/booking.stripe.js index a15b201..ad5cba4 100644 --- a/booking.stripe.js +++ b/booking.stripe.js @@ -7,11 +7,12 @@ jQuery(document).ready(function($) { locale: 'auto', token: function(token) { try { - //store the returned token into hidden form elements + //store relevant parts of the returned token into hidden form elements $(':input[name="token_id"]', $stripeForm).val(token.id); $(':input[name="token_email"]', $stripeForm).val(token.email); $(':input[name="token_client_ip"]', $stripeForm).val(token.client_ip); $(':input[name="card_brand"]', $stripeForm).val(token.card.brand); + $(':input[name="card_country"]', $stripeForm).val(token.card.country); $(':input[name="card_cvc_check"]', $stripeForm).val(token.card.cvc_check); $(':input[name="card_address_zip_check"]', $stripeForm).val(token.card.address_zip_check); $stripeForm.get(0).submit();