Skip to content

Instantly share code, notes, and snippets.

@speedupmate
Created August 29, 2013 08:15
Show Gist options
  • Save speedupmate/6375465 to your computer and use it in GitHub Desktop.
Save speedupmate/6375465 to your computer and use it in GitHub Desktop.
braintree payment method OneStepCheckout compatibility patch
<?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">&nbsp;</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