Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
268 lines (209 sloc) 9.33 KB
<?php
class ControllerApiPayment extends Controller {
public function address() {
$this->load->language('api/payment');
// Delete old payment address, payment methods and method so not to cause any issues if there is an error
unset($this->session->data['payment_address']);
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
$json = array();
if (!isset($this->session->data['api_id'])) {
$json['error']['warning'] = $this->language->get('error_permission');
} else {
// Add keys for missing post vars
$keys = array(
'firstname',
'lastname',
'company',
'address_1',
'address_2',
'postcode',
'city',
'zone_id',
'country_id'
);
foreach ($keys as $key) {
if (!isset($this->request->post[$key])) {
$this->request->post[$key] = '';
}
}
if ((utf8_strlen(trim($this->request->post['firstname'])) < 1) || (utf8_strlen(trim($this->request->post['firstname'])) > 32)) {
$json['error']['firstname'] = $this->language->get('error_firstname');
}
if ((utf8_strlen(trim($this->request->post['lastname'])) < 1) || (utf8_strlen(trim($this->request->post['lastname'])) > 32)) {
$json['error']['lastname'] = $this->language->get('error_lastname');
}
if ((utf8_strlen(trim($this->request->post['address_1'])) < 3) || (utf8_strlen(trim($this->request->post['address_1'])) > 128)) {
$json['error']['address_1'] = $this->language->get('error_address_1');
}
if ((utf8_strlen($this->request->post['city']) < 2) || (utf8_strlen($this->request->post['city']) > 32)) {
$json['error']['city'] = $this->language->get('error_city');
}
$this->load->model('localisation/country');
$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
if ($country_info && $country_info['postcode_required'] && (utf8_strlen(trim($this->request->post['postcode'])) < 2 || utf8_strlen(trim($this->request->post['postcode'])) > 10)) {
$json['error']['postcode'] = $this->language->get('error_postcode');
}
if ($this->request->post['country_id'] == '') {
$json['error']['country'] = $this->language->get('error_country');
}
if (!isset($this->request->post['zone_id']) || $this->request->post['zone_id'] == '') {
$json['error']['zone'] = $this->language->get('error_zone');
}
// Custom field validation
$this->load->model('account/custom_field');
$custom_fields = $this->model_account_custom_field->getCustomFields($this->config->get('config_customer_group_id'));
foreach ($custom_fields as $custom_field) {
if ($custom_field['location'] == 'address') {
if ($custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id']])) {
$json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
} elseif (($custom_field['type'] == 'text') && !empty($custom_field['validation']) && filter_var($this->request->post['custom_field'][$custom_field['custom_field_id']], FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/' . html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8') . '/')))) {
$json['error']['custom_field' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']);
}
}
}
if (!$json) {
$this->load->model('localisation/country');
$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
if ($country_info) {
$country = $country_info['name'];
$iso_code_2 = $country_info['iso_code_2'];
$iso_code_3 = $country_info['iso_code_3'];
$address_format = $country_info['address_format'];
} else {
$country = '';
$iso_code_2 = '';
$iso_code_3 = '';
$address_format = '';
}
$this->load->model('localisation/zone');
$zone_info = $this->model_localisation_zone->getZone($this->request->post['zone_id']);
if ($zone_info) {
$zone = $zone_info['name'];
$zone_code = $zone_info['code'];
} else {
$zone = '';
$zone_code = '';
}
$this->session->data['payment_address'] = array(
'firstname' => $this->request->post['firstname'],
'lastname' => $this->request->post['lastname'],
'company' => $this->request->post['company'],
'address_1' => $this->request->post['address_1'],
'address_2' => $this->request->post['address_2'],
'postcode' => $this->request->post['postcode'],
'city' => $this->request->post['city'],
'zone_id' => $this->request->post['zone_id'],
'zone' => $zone,
'zone_code' => $zone_code,
'country_id' => $this->request->post['country_id'],
'country' => $country,
'iso_code_2' => $iso_code_2,
'iso_code_3' => $iso_code_3,
'address_format' => $address_format,
'custom_field' => isset($this->request->post['custom_field']) ? $this->request->post['custom_field'] : array()
);
$json['success'] = $this->language->get('text_address');
unset($this->session->data['payment_method']);
unset($this->session->data['payment_methods']);
}
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
public function methods() {
$this->load->language('api/payment');
// Delete past shipping methods and method just in case there is an error
unset($this->session->data['payment_methods']);
unset($this->session->data['payment_method']);
$json = array();
if (!isset($this->session->data['api_id'])) {
$json['error'] = $this->language->get('error_permission');
} else {
// Payment Address
if (!isset($this->session->data['payment_address'])) {
$json['error'] = $this->language->get('error_address');
}
if (!$json) {
// Totals
$totals = array();
$taxes = $this->cart->getTaxes();
$total = 0;
$this->load->model('setting/extension');
$sort_order = array();
$results = $this->model_setting_extension->getExtensions('total');
foreach ($results as $key => $value) {
$sort_order[$key] = $this->config->get('total_' . $value['code'] . '_sort_order');
}
array_multisort($sort_order, SORT_ASC, $results);
foreach ($results as $result) {
if ($this->config->get('total_' . $result['code'] . '_status')) {
$this->load->model('extension/total/' . $result['code']);
// __call can not pass-by-reference so we get PHP to call it as an anonymous function.
($this->{'model_extension_total_' . $result['code']}->getTotal)($totals, $taxes, $total);
}
}
// Payment Methods
$json['payment_methods'] = array();
$this->load->model('setting/extension');
$results = $this->model_setting_extension->getExtensions('payment');
$recurring = $this->cart->hasRecurringProducts();
foreach ($results as $result) {
if ($this->config->get('payment_' . $result['code'] . '_status')) {
$this->load->model('extension/payment/' . $result['code']);
$method = $this->{'model_extension_payment_' . $result['code']}->getMethod($this->session->data['payment_address'], $total);
if ($method) {
if ($recurring) {
if (property_exists($this->{'model_extension_payment_' . $result['code']}, 'recurringPayments') && $this->{'model_extension_payment_' . $result['code']}->recurringPayments()) {
$json['payment_methods'][$result['code']] = $method;
}
} else {
$json['payment_methods'][$result['code']] = $method;
}
}
}
}
$sort_order = array();
foreach ($json['payment_methods'] as $key => $value) {
$sort_order[$key] = $value['sort_order'];
}
array_multisort($sort_order, SORT_ASC, $json['payment_methods']);
if ($json['payment_methods']) {
$this->session->data['payment_methods'] = $json['payment_methods'];
} else {
$json['error'] = $this->language->get('error_no_payment');
}
}
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
public function method() {
$this->load->language('api/payment');
// Delete old payment method so not to cause any issues if there is an error
unset($this->session->data['payment_method']);
$json = array();
if (!isset($this->session->data['api_id'])) {
$json['error'] = $this->language->get('error_permission');
} else {
// Payment Address
if (!isset($this->session->data['payment_address'])) {
$json['error'] = $this->language->get('error_address');
}
// Payment Method
if (empty($this->session->data['payment_methods'])) {
$json['error'] = $this->language->get('error_no_payment');
} elseif (!isset($this->request->post['payment_method'])) {
$json['error'] = $this->language->get('error_method');
} elseif (!isset($this->session->data['payment_methods'][$this->request->post['payment_method']])) {
$json['error'] = $this->language->get('error_method');
}
if (!$json) {
$this->session->data['payment_method'] = $this->session->data['payment_methods'][$this->request->post['payment_method']];
$json['success'] = $this->language->get('text_method');
}
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}
You can’t perform that action at this time.