add country checking for stripe charges

This commit is contained in:
Nathan Coad
2016-07-23 12:00:46 +10:00
parent 9e26b69edf
commit 3cbb0334c3
2 changed files with 17 additions and 8 deletions

View File

@@ -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', "<pre>Stripe token:\n@info</pre>", 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', "<pre>Stripe token:\n@info</pre>", 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

View File

@@ -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();