diff options
Diffstat (limited to 'public/catalog/model/extension/payment/pp_braintree.php')
-rw-r--r-- | public/catalog/model/extension/payment/pp_braintree.php | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/public/catalog/model/extension/payment/pp_braintree.php b/public/catalog/model/extension/payment/pp_braintree.php new file mode 100644 index 0000000..f557cfe --- /dev/null +++ b/public/catalog/model/extension/payment/pp_braintree.php @@ -0,0 +1,191 @@ +<?php +class ModelExtensionPaymentPPBraintree extends Model { + public function generateToken($gateway, $data) { + try { + if ($gateway != null) { + $client_token = $gateway->clientToken()->generate($data); + } else { + $client_token = Braintree_ClientToken::generate($data); + } + + return $client_token; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function addTransaction($gateway, $data) { + try { + if ($gateway != null) { + $transaction = $gateway->transaction()->sale($data); + } else { + $transaction = Braintree_Transaction::sale($data); + } + + return $transaction; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function getCustomer($gateway, $customer_id, $log = true) { + try { + if ($gateway != null) { + $customer = $gateway->customer()->find($customer_id); + } else { + $customer = Braintree_Customer::find($customer_id); + } + + return $customer; + } catch (Exception $e) { + if ($log) { + $this->log($e->getMessage()); + } + + return false; + } + } + + public function getPaymentMethod($gateway, $token) { + try { + if ($gateway != null) { + $payment_method = $gateway->paymentMethod()->find($token); + } else { + $payment_method = Braintree_PaymentMethod::find($token); + } + + return $payment_method; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function addPaymentMethod($gateway, $data) { + try { + if ($gateway != null) { + $payment_method = $gateway->paymentMethod()->create($data); + } else { + $payment_method = Braintree_PaymentMethod::create($data); + } + + return $payment_method; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function deletePaymentMethod($gateway, $token) { + try { + if ($gateway != null) { + $gateway->paymentMethod()->delete($token); + } else { + Braintree_PaymentMethod::delete($token); + } + + return true; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function getPaymentMethodNonce($gateway, $token) { + try { + if ($gateway != null) { + $response = $gateway->paymentMethodNonce()->find($token); + } else { + $response = Braintree_PaymentMethodNonce::find($token); + } + + return $response; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function createPaymentMethodNonce($gateway, $token) { + try { + if ($gateway != null) { + $response = $gateway->paymentMethodNonce()->create($token); + } else { + $response = Braintree_PaymentMethodNonce::create($token); + } + + return $response; + } catch (Exception $e) { + $this->log($e->getMessage()); + + return false; + } + } + + public function setCredentials() { + Braintree_Configuration::environment($this->config->get('payment_pp_braintree_environment')); + Braintree_Configuration::merchantId($this->config->get('payment_pp_braintree_merchant_id')); + Braintree_Configuration::publicKey($this->config->get('payment_pp_braintree_public_key')); + Braintree_Configuration::privateKey($this->config->get('payment_pp_braintree_private_key')); + } + + public function setGateway($access_token) { + return new Braintree_Gateway(array('accessToken' => $access_token)); + } + + public function getMethod($address, $total) { + $this->load->language('extension/payment/pp_braintree'); + + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('payment_pp_braintree_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')"); + + if ($this->config->get('payment_pp_braintree_total') > 0 && $this->config->get('payment_pp_braintree_total') > $total) { + $status = false; + } elseif (!$this->config->get('payment_pp_braintree_geo_zone_id')) { + $status = true; + } elseif ($query->num_rows) { + $status = true; + } else { + $status = false; + } + + $method_data = array(); + + if ($status) { + $method_data = array( + 'code' => 'pp_braintree', + 'title' => $this->language->get('text_title'), + 'terms' => '', + 'sort_order' => $this->config->get('payment_pp_braintree_sort_order') + ); + } + + return $method_data; + } + + public function getSupportedCurrencies() { + $currencies = array(); + + foreach ($this->config->get('payment_pp_braintree_account') as $currency => $account) { + if ($account['status']) { + $currencies[] = $currency; + } + } + + return $currencies; + } + + public function log($data) { + if ($this->config->get('payment_pp_braintree_debug')) { + $log = new Log('braintree.log'); + $log->write(print_r($data, true)); + } + } +} |