Created
August 29, 2013 08:15
-
-
Save speedupmate/6375465 to your computer and use it in GitHub Desktop.
braintree payment method OneStepCheckout compatibility patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$_form = $this; | |
$_code = $_form->getMethodCode(); | |
$_method = $_form->getMethod(); | |
$_model = Mage::getModel('braintree/paymentmethod'); | |
$_loggedIn = Mage::app()->isInstalled() && Mage::getSingleton('customer/session')->isLoggedIn(); | |
$_storedCards = $_model->currentCustomerStoredCards(); | |
$_useVault = $_loggedIn && $_model->useVault() && count($_storedCards); | |
?> | |
<?php if ($_useVault): ?> | |
<ul class="form-list" id="payment_form2_<?php echo $_code ?>"> | |
<li id="<?php echo $_code ?>_token_selector"> | |
<label for="<?php echo $_code ?>_cc_token"><?php echo $this->__('Payment Information') ?></label> | |
<div class="input-box"> | |
<select id="<?php echo $_code ?>_cc_token" name="payment[cc_token]" onchange="braintreeForm(this.value)"> | |
<?php foreach ($_storedCards as $creditCard): ?> | |
<option value="<?php echo $creditCard->token?>"> | |
<?php echo $creditCard->maskedNumber ?> | |
</option> | |
<?php endforeach; ?> | |
<option value='asdasd'><?php echo $this->__('12312312') ?></option> | |
<option value=''><?php echo $this->__('Add new card') ?></option> | |
</select> | |
</div> | |
</li> | |
</ul> | |
<?php endif; ?> | |
<div class="form-list" id="card-data-braintree" style="<?php echo ($_useVault) ? 'display:none;' : '' ?>"> | |
<ul class="form-list" id="payment_form_<?php echo $_code ?>" style="<?php echo ($_useVault) ? 'display:none;' : '' ?>"> | |
<li> | |
<label for="<?php echo $_code ?>_cc_type" class="required"><em>*</em><?php echo $this->__('Credit Card Type') ?></label> | |
<div class="input-box"> | |
<select id="<?php echo $_code ?>_cc_type" name="payment[cc_type]" title="<?php echo $this->__('Credit Card Type') ?>" class="required-entry"> | |
<option value=""><?php echo $this->__('--Please Select--') ?></option> | |
<?php $_ccType = $this->getInfoData('cc_type') ?> | |
<?php foreach ($this->getCcAvailableTypes() as $_typeCode => $_typeName): ?> | |
<option value="<?php echo $_typeCode ?>"<?php if($_typeCode==$_ccType): ?> selected="selected"<?php endif ?>><?php echo $_typeName ?></option> | |
<?php endforeach ?> | |
</select> | |
</div> | |
</li> | |
<li> | |
<label for="<?php echo $_code ?>_cc_number" class="required"><em>*</em><?php echo $this->__('Credit Card Number') ?></label> | |
<div class="input-box"> | |
<input type="text" id="<?php echo $_code ?>_cc_number" name="payment[cc_number]" data-encrypt="true" title="<?php echo $this->__('Credit Card Number') ?>" class="input-text required-entry validate-cc-number validate-digits" value="" /> | |
<input type="hidden" name="payment[cc_number]" class="encrypted-field" /> | |
</div> | |
</li> | |
<li> | |
<label for="<?php echo $_code ?>_expiration" class="required"><em>*</em><?php echo $this->__('Expiration Date') ?></label> | |
<div class="input-box"> | |
<div class="v-fix"> | |
<select id="<?php echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry"> | |
<?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?> | |
<?php foreach ($this->getCcMonths() as $k=>$v): ?> | |
<option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option> | |
<?php endforeach ?> | |
</select> | |
</div> | |
<div class="v-fix year-container"> | |
<?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?> | |
<select id="<?php echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry"> | |
<?php foreach ($this->getCcYears() as $k=>$v): ?> | |
<option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option> | |
<?php endforeach ?> | |
</select> | |
</div> | |
</div> | |
</li> | |
<?php echo $this->getChildHtml() ?> | |
<?php if($this->hasVerification()): ?> | |
<li> | |
<label for="<?php echo $_code ?>_cc_cid" class="required"><em>*</em><?php echo $this->__('Card Verification Number') ?></label> | |
<div class="input-box"> | |
<div class="v-fix"> | |
<input type="text" title="<?php echo $this->__('Card Verification Number') ?>" data-encrypt='true' class="input-text cvv required-entry validate-cc-cvn" id="<?php echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" /> | |
<input type="hidden" name="payment[cc_cid]" class="encrypted-field" /> | |
</div> | |
<a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a> | |
</div> | |
</li> | |
<?php endif; ?> | |
<?php if ($this->hasSsCardType()): ?> | |
<li id="<?php echo $_code ?>_cc_type_ss_div"> | |
<ul class="inner-form"> | |
<li class="form-alt"><label for="<?php echo $_code ?>_cc_issue" class="required"><em>*</em><?php echo $this->__('Switch/Solo/Maestro Only') ?></label></li> | |
<li> | |
<label for="<?php echo $_code ?>_cc_issue"><?php echo $this->__('Issue Number') ?>:</label> | |
<span class="input-box"> | |
<input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-cc-ukss cvv" id="<?php echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" /> | |
</span> | |
</li> | |
<li> | |
<label for="<?php echo $_code ?>_start_month"><?php echo $this->__('Start Date') ?>:</label> | |
<div class="input-box"> | |
<div class="v-fix"> | |
<select id="<?php echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss month"> | |
<?php foreach ($this->getCcMonths() as $k=>$v): ?> | |
<option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option> | |
<?php endforeach ?> | |
</select> | |
</div> | |
<div class="v-fix"> | |
<select id="<?php echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss year"> | |
<?php foreach ($this->getSsStartYears() as $k=>$v): ?> | |
<option value="<?php echo $k?$k:'' ?>"<?php if($k==$this->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php echo $v ?></option> | |
<?php endforeach ?> | |
</select> | |
</div> | |
</div> | |
</li> | |
<li class="adv-container"> </li> | |
</ul> | |
</li> | |
<?php endif; ?> | |
<?php if($_loggedIn && $_model->useVault()): ?> | |
<li id="<?php echo $_code ?>_store_in_vault_div" style="text-align:left;<?php echo ($_loggedIn) ? '' : 'display:none;' ?>"> | |
<input type="checkbox" title="<?php echo $this->__('Save this card for future use') ?>" class="input-checkbox" id="<?php echo $_code ?>_store_in_vault" name="payment[store_in_vault]" value="1" /> | |
<label for="<?php echo $_code ?>_store_in_vault" class="required" style="float:none;"><?php echo $this->__('Save this card for future use') ?></label> | |
</li> | |
<?php endif; ?> | |
</ul> | |
</div> | |
<script type="text/javascript"> | |
//<![CDATA[ | |
var loggedIn = <?php echo ($_loggedIn) ? 'true' : 'false' ?>; | |
<?php if ($_useVault): ?> | |
$('payment_form_<?php echo $_code ?>').hide(); | |
$('<?php echo $_code ?>_cc_token').observe('change', function (e) { | |
var token = $(this).getValue(); | |
if (token) { | |
$('payment_form_<?php echo $_code ?>').hide(); | |
$('card-data-braintree').hide(); | |
} else { | |
$('payment_form_<?php echo $_code ?>').show(); | |
$('card-data-braintree').show(); | |
if ($('co-payment-form')) | |
{ | |
$('co-payment-form').enable(); | |
} | |
} | |
}); | |
<?php endif ?> | |
function braintreeForm(showForm) { | |
if (showForm) { | |
$('payment_form_<?php echo $_code ?>').hide(); | |
$('card-data-braintree').hide(); | |
} else { | |
$('payment_form_<?php echo $_code ?>').show(); | |
$('card-data-braintree').show(); | |
if ($('co-payment-form')) | |
{ | |
$('co-payment-form').enable(); | |
} | |
} | |
} | |
if ($$('#onestepcheckout-form').first() && !loggedIn) | |
{ | |
$('id_create_account').observe('change', function() { | |
$('<?php echo $_code ?>_store_in_vault_div').toggle(); | |
}); | |
} | |
else if ($('co-payment-form')) | |
{ | |
payment.addAfterInitFunction('initialize_bt', function(){ | |
$('co-payment-form').enable(); | |
}); | |
$$('.encrypted-field').each(function(element){ | |
element.remove(); | |
}); | |
payment.save = function() { | |
if (checkout.loadWaiting!=false) return; | |
var validator = new Validation(this.form); | |
if (this.validate() && validator.validate()) { | |
checkout.setLoadWaiting('payment'); | |
var request = new Ajax.Request( | |
this.saveUrl, | |
{ | |
method:'post', | |
onComplete: this.onComplete, | |
onSuccess: this.onSave, | |
onFailure: checkout.ajaxFailure.bind(checkout), | |
parameters: { 'payment[method]' : '<?php echo $_code ?>' } | |
} | |
); | |
} | |
}; | |
} | |
var braintree = Braintree.create('<?php echo $_model->getConfigData('client_side_encryption_key') ?>'); | |
$$('#onestepcheckout-form input[data-encrypt=true]').each(function(element) { | |
element.observe('blur', function() { | |
var partner_element = $$('#onestepcheckout-form input[type=hidden][name='+element.getAttribute('name')+']').first(); | |
partner_element.setValue(braintree.encrypt(element.getValue())); | |
}); | |
}); | |
//]]></script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment