| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/controllers/gateways/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Braintree extends App_Controller
{
public function complete_purchase($invoice_id, $invoice_hash)
{
if ($this->input->post()) {
check_invoice_restrictions($invoice_id, $invoice_hash);
$data = $this->input->post();
$this->load->model('invoices_model');
$invoice = $this->invoices_model->get($invoice_id);
load_client_language($invoice->clientid);
$data['currency'] = $invoice->currency_name;
$oResponse = $this->paypal_braintree_gateway->finish_payment($data);
if ($oResponse->isSuccessful()) {
$transactionid = $oResponse->getTransactionReference();
$paymentResponse = $this->paypal_braintree_gateway->fetch_payment($transactionid);
$paymentData = $paymentResponse->getData();
$success = $this->paypal_braintree_gateway->addPayment(
[
'amount' => $data['amount'],
'invoiceid' => $invoice->id,
'paymentmethod' => $paymentData->paymentInstrumentType,
'transactionid' => $transactionid,
]
);
set_alert($success ? 'success' : 'danger', _l($success ? 'online_payment_recorded_success' : 'online_payment_recorded_success_fail_database'));
} else {
set_alert('danger', $oResponse->getMessage());
}
}
}
public function make_payment()
{
check_invoice_restrictions($this->input->get('invoiceid'), $this->input->get('hash'));
$this->load->model('invoices_model');
$invoice = $this->invoices_model->get($this->input->get('invoiceid'));
load_client_language($invoice->clientid);
$data['invoice'] = $invoice;
$data['total'] = $this->input->get('total');
$data['client_token'] = $this->paypal_braintree_gateway->generate_token();
$data['email'] = '';
if (is_client_logged_in()) {
$contact = $this->clients_model->get_contact(get_contact_user_id());
$client = $this->clients_model->get(get_client_user_id());
if (!empty($contact->phonenumber)) {
$data['phone'] = $contact->phonenumber;
} elseif (!empty($client->phonenumber)) {
$data['phone'] = $client->phonenumber;
}
$data['contact'] = $contact;
} else {
$client = $this->clients_model->get($invoice->clientid);
if (!empty($client->phonenumber)) {
$data['phone'] = $client->phonenumber;
}
}
$country = get_country($invoice->billing_country);
if ($country) {
$data['country'] = $country->iso2;
}
echo $this->get_view($data);
}
public function get_view($data = [])
{
?>
<?php echo payment_gateway_head(_l('payment_for_invoice') . ' ' . format_invoice_number($data['invoice']->id)); ?>
<body class="gateway-braintree">
<div class="container">
<div class="col-md-8 col-md-offset-2 mtop30">
<div class="mbot30 text-center">
<?php echo payment_gateway_logo(); ?>
</div>
<div class="row">
<div class="panel_s">
<div class="panel-heading">
<div class="panel-title">
<?php echo _l('payment_for_invoice'); ?> -
<?php echo e(_l('payment_total', app_format_money($data['total'], $data['invoice']->currency_name))); ?>
</div>
<a
href="<?php echo site_url('invoice/' . $data['invoice']->id . '/' . $data['invoice']->hash); ?>">
<?php echo e(format_invoice_number($data['invoice']->id)); ?>
</a>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label for="email"><?php echo _l('payment_billing_email'); ?></label>
<input type="email" class="form-control" id="email"
value="<?php echo isset($data['contact']) ? e($data['contact']->email) : ''; ?>">
<span id="help-email" class="help-block"></span>
</div>
<div class="form-group">
<label for="billing-phone"><?php echo _l('client_phonenumber'); ?></label>
<input type="billing-phone" class="form-control" id="billing-phone"
value="<?php echo isset($data['phone']) ? e($data['phone']) : ''; ?>">
<span id="help-billing-phone" class="help-block"></span>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label
for="billing-given-name"><?php echo _l('client_firstname'); ?></label>
<input type="billing-given-name" class="form-control"
id="billing-given-name"
value="<?php echo isset($data['contact']) ? e($data['contact']->firstname) : ''; ?>">
<span id="help-billing-given-name" class="help-block"></span>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="billing-surname"><?php echo _l('client_lastname'); ?></label>
<input type="billing-surname" class="form-control" id="billing-surname"
value="<?php echo isset($data['contact']) ? e($data['contact']->lastname) : ''; ?>">
<span id="help-billing-surname" class="help-block"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label
for="billing-street-address"><?php echo _l('billing_address'); ?></label>
<input type="billing-street-address" class="form-control"
id="billing-street-address"
value="<?php echo e($data['invoice']->billing_street); ?>">
<span id="help-billing-street-address" class="help-block"></span>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="billing-locality"><?php echo _l('billing_city'); ?></label>
<input type="billing-locality" class="form-control" id="billing-locality"
value="<?php echo e($data['invoice']->billing_city); ?>">
<span id="help-billing-locality" class="help-block"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="billing-region"><?php echo _l('billing_state'); ?></label>
<input type="billing-region" class="form-control" id="billing-region">
<span id="help-billing-region" class="help-block"></span>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="billing-postal-code"><?php echo _l('billing_zip'); ?></label>
<input type="billing-postal-code" class="form-control"
id="billing-postal-code"
value="<?php echo e($data['invoice']->billing_zip); ?>">
<span id="help-billing-postal-code" class="help-block"></span>
</div>
</div>
</div>
<div class="form-group">
<label for="billing-country-code"><?php echo _l('billing_country'); ?></label>
<select type="billing-country-code" class="form-control" id="billing-country-code">
<?php foreach (get_all_countries() as $country) { ?>
<option value="<?php echo $country['iso2']; ?>" <?php if (isset($data['country']) && $data['country'] == $country['iso2']) {
echo ' selected';
} ?>><?php echo $country['short_name']; ?></option>
<?php } ?>
</select>
<span id="help-billing-country-code" class="help-block"></span>
</div>
</div>
</div>
<div id="request-errors" class="alert alert-danger" style="display:none;"></div>
<hr />
<div class="bt-drop-in-wrapper">
<div id="bt-dropin"></div>
</div>
<div class="text-center" style="margin-top:15px;">
<button class="btn btn-primary" type="button" id="submit-button" style="display:none;">
<?php echo _l('submit_payment'); ?>
</button>
</div>
</div>
</div>
</div>
</div>
<script src="https://js.braintreegateway.com/web/dropin/1.20.4/js/dropin.min.js"></script>
<?php echo payment_gateway_scripts(); ?>
<script>
var invoiceUrl = '<?php echo site_url('invoice/' . $data['invoice']->id . '/' . $data['invoice']->hash); ?>';
var completePaymentUrl =
'<?php echo site_url('gateways/braintree/complete_purchase/' . $data['invoice']->id . '/' . $data['invoice']->hash); ?>';
var amount = <?php echo number_format($data['total'], 2, '.', ''); ?>;
var currencyName = "<?php echo $data['invoice']->currency_name; ?>";
var clientToken = "<?php echo $data['client_token']; ?>";
var button = document.querySelector('#submit-button');
var locale = '';
var paypalEnabled = "<?php echo $this->paypal_braintree_gateway->getSetting('paypal_enabled'); ?>";
var requestErrors = document.getElementById('request-errors');
if (typeof(window.navigator.language) != 'undefined') {
locale = window.navigator.language;
locale = locale.replace('-', '_');
}
var billingFields = [
'email',
'billing-phone',
'billing-given-name',
'billing-surname',
'billing-street-address',
'billing-locality',
'billing-region',
'billing-postal-code',
'billing-country-code'
].reduce(function(fields, fieldName) {
var field = fields[fieldName] = {
input: document.getElementById(fieldName),
help: document.getElementById('help-' + fieldName)
};
field.input.addEventListener('focus', function() {
clearFieldValidations(field);
});
return fields;
}, {});
function clearFieldValidations(field) {
field.help.innerText = '';
field.help.parentNode.classList.remove('has-error');
}
billingFields['billing-region'].optional = true;
function enableSubmitButton() {
button.removeAttribute('disabled');
}
function disableSubmitButton() {
button.disabled = true;
}
function validateBillingFields() {
var isValid = true;
Object.keys(billingFields).forEach(function(fieldName) {
let validationMessage = "<?php echo _l('form_validation_required'); ?>"
var fieldEmpty = false;
var field = billingFields[fieldName];
if (field.optional) {
return;
}
fieldEmpty = field.input.value.trim() === '';
if (fieldEmpty) {
isValid = false;
field.help.innerText = validationMessage.replace('{field}', document.querySelector(
'[for="' + fieldName + '"]').innerText)
field.help.parentNode.classList.add('has-error');
} else {
clearFieldValidations(field);
}
});
return isValid;
}
var dropInOptions = {
authorization: clientToken,
container: '#bt-dropin',
locale: locale,
threeDSecure: true,
};
if (paypalEnabled == '1') {
dropInOptions.paypal = {
flow: 'checkout',
amount: amount,
currency: currencyName
};
}
braintree.dropin.create(dropInOptions, function(createErr, instance) {
button.addEventListener('click', function() {
var billingIsValid = validateBillingFields();
requestErrors.style.display = 'none';
if (!billingIsValid) {
enableSubmitButton();
return;
}
disableSubmitButton();
instance.requestPaymentMethod({
threeDSecure: {
amount: amount,
email: billingFields.email.input.value,
billingAddress: {
givenName: billingFields['billing-given-name'].input.value,
surname: billingFields['billing-surname'].input.value,
phoneNumber: billingFields['billing-phone'].input.value.replace(
/[\(\)\s\-]/g, ''
), // remove (), spaces, and - from phone number
streetAddress: billingFields['billing-street-address'].input.value,
locality: billingFields['billing-locality'].input.value,
region: billingFields['billing-region'].input.value,
postalCode: billingFields['billing-postal-code'].input.value,
countryCodeAlpha2: billingFields['billing-country-code'].input.value
}
}
}, function(err, payload) {
enableSubmitButton();
if (err) {
console.log(err);
requestErrors.style.display = 'block';
if (err.code === 'THREEDS_LOOKUP_VALIDATION_ERROR') {
requestErrors.innerText = err.details.originalError.details
.originalError.error.message
} else {
requestErrors.innerText = err.message
}
return;
}
if (payload) {
disableSubmitButton();
$.post(completePaymentUrl, {
amount: amount,
payment_method_nonce: payload.nonce,
}).done(function() {
window.location.href = invoiceUrl;
})
}
});
});
instance.on('paymentMethodRequestable', function() {
button.style.display = '';
});
instance.on('noPaymentMethodRequestable', function() {
button.style.display = 'none';
});
});
</script>
<?php echo payment_gateway_footer();
}
}