Створення користувальницького способу оплати в OpenCart: частина 3

286

Від автора: якщо ви слідували разом з цією серією, то повинні бути знайомі з тією структурою файлів, яку ми створили для нашого користувача способу оплати у фоновому режимі. Якщо більш ранні частини цієї серії вам не знайомі, я настійно рекомендую прочитати їх (частина 1, частина 2), перш ніж приступати до цієї.

Щоб додати в OpenCart способи оплати, ми будемо використовувати аналогічну налаштування файлу для розділу front-end.

Налаштування контролера

Створюємо файл контролера catalog/controller/payment/custom.php. Вставляємо наступне вміст в створений файл контролера custom.php.

language->load(‘payment/custom’);
$this->data[‘button_confirm’] = $this->language->get(‘button_confirm’);
$this->data[‘action’] = ‘https://yourpaymentgatewayurl’;
$this->load->model(‘checkout/order’);
$order_info = $this->model_checkout_order->getOrder($this->session->data[‘order_id’]);
if ($order_info) {
$this->data[‘text_config_one’] = trim($this->config->get(‘text_config_one’));
$this->data[‘text_config_two’] = trim($this->config->get(‘text_config_two’));
$this->data[‘orderid’] = date(‘His’) . $this->session->data[‘order_id’];
$this->data[‘callbackurl’] = $this->url->link(‘payment/custom/callback’);
$this->data[‘orderdate’] = date(‘YmdHis’);
$this->data[‘currency’] = $order_info[‘currency_code’];
$this->data[‘orderamount’] = $this->currency->format($order_info[‘total’], $this->data[‘currency’] , false, false);
$this->data[‘billemail’] = $order_info[’email’];
$this->data[‘billphone’] = html_entity_decode($order_info[‘telephone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billaddress’] = html_entity_decode($order_info[‘payment_address_1’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billcountry’] = html_entity_decode($order_info[‘payment_iso_code_2’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billprovince’] = html_entity_decode($order_info[‘payment_zone’], ENT_QUOTES, ‘UTF-8’);;
$this->data[‘billcity’] = html_entity_decode($order_info[‘payment_city’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billpost’] = html_entity_decode($order_info[‘payment_postcode’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryname’] = html_entity_decode($order_info[‘shipping_firstname’] . $order_info[‘shipping_lastname’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryaddress’] = html_entity_decode($order_info[‘shipping_address_1’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverycity’] = html_entity_decode($order_info[‘shipping_city’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverycountry’] = html_entity_decode($order_info[‘shipping_iso_code_2’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryprovince’] = html_entity_decode($order_info[‘shipping_zone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryemail’] = $order_info[’email’];
$this->data[‘deliveryphone’] = html_entity_decode($order_info[‘telephone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverypost’] = html_entity_decode($order_info[‘shipping_postcode’], ENT_QUOTES, ‘UTF-8’);
if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/payment/custom.tpl’)){
$this->template = $this->config->get(‘config_template’) . ‘/template/payment/custom.tpl’;
} else {
$this->template = ‘default/template/payment/custom.tpl’;
}
$this->render();
}
}
public callback function() {
if (isset($this->request->post[‘orderid’])) {
$order_id = trim(substr(($this->request->post[‘orderid’]), 6));
} else {
die(‘Illegal Access’);
}
$this->load->model(‘checkout/order’);
$order_info = $this->model_checkout_order->getOrder($order_id);
if ($order_info) {
$data = array_merge($this->request->post,$this->request->get);
//payment was made successfully
if ($data[‘status’] == ‘Y’ || $data[‘status’] == ‘y’) {
// update the order status accordingly
}
}
}
}
?>

Як можна побачити, існують два різних методу. index метод буде відповідати за налаштування даних, коли форма буде відправлена на шлюз третьої сторони, а callback метод використовується для обробки даних відповіді з платіжного шлюзу. Можна визначити більше методів, якщо це потрібно платіжним шлюзом. Але в цьому прикладі ми все максимально спростили. Давайте детально розглянемо кожний розділ. Почнемо з методу index.

Спочатку ми завантажуємо мовний файл і встановлюємо значення кнопки Confirm. Також ми встановлюємо атрибут action, який буде використовуватися формою відправлення платежу. При необхідності міняйте це у відповідності з платіжним шлюзом.

Створення користувальницького способу оплати в OpenCart: частина 3

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

$this->language->load(‘payment/custom’);
$this->data[‘button_confirm’] = $this->language->get(‘button_confirm’);
$this->data[‘action’] = ‘https://yourpaymentgatewayurl’;

Потім ми завантажуємо інформацію про замовлення з активного сеансу користувача.

$this->load->model(‘checkout/order’);
$order_info = $this->model_checkout_order->getOrder($this->session->data[‘order_id’]);

Якщо інформація про замовлення доступна, ми продовжуємо роботу і налаштовуємо дані для прихованих змінних, які будуть використовуватися для відправки форми на URL-адресу платіжного шлюзу. Якщо ви уважно стежили за кодом, то помітили, що ми використовували власні параметри text_config_one і text_config_two, які встановили у формі конфігурації адміністратора в попередній частині цієї серії.

Інша важлива змінна callbackurl, яка тут вказана, — це URL-адреса, що використовується шлюзом платежів для перенаправлення користувача назад в магазин після процесу оплати. Ми побачимо, як URL-адресу, payment/custom/callback викличе метод callback в певний момент.

$this->data[‘text_config_one’] = trim($this->config->get(‘text_config_one’));
$this->data[‘text_config_two’] = trim($this->config->get(‘text_config_two’));
$this->data[‘orderid’] = date(‘His’) . $this->session->data[‘order_id’];
$this->data[‘callbackurl’] = $this->url->link(‘payment/custom/callback’);
$this->data[‘orderdate’] = date(‘YmdHis’);
$this->data[‘currency’] = $order_info[‘currency_code’];
$this->data[‘orderamount’] = $this->currency->format($order_info[‘total’], $this->data[‘currency’] , false, false);
$this->data[‘billemail’] = $order_info[’email’];
$this->data[‘billphone’] = html_entity_decode($order_info[‘telephone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billaddress’] = html_entity_decode($order_info[‘payment_address_1’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billcountry’] = html_entity_decode($order_info[‘payment_iso_code_2’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billprovince’] = html_entity_decode($order_info[‘payment_zone’], ENT_QUOTES, ‘UTF-8’);;
$this->data[‘billcity’] = html_entity_decode($order_info[‘payment_city’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘billpost’] = html_entity_decode($order_info[‘payment_postcode’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryname’] = html_entity_decode($order_info[‘shipping_firstname’] . $order_info[‘shipping_lastname’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryaddress’] = html_entity_decode($order_info[‘shipping_address_1’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverycity’] = html_entity_decode($order_info[‘shipping_city’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverycountry’] = html_entity_decode($order_info[‘shipping_iso_code_2’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryprovince’] = html_entity_decode($order_info[‘shipping_zone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliveryemail’] = $order_info[’email’];
$this->data[‘deliveryphone’] = html_entity_decode($order_info[‘telephone’], ENT_QUOTES, ‘UTF-8’);
$this->data[‘deliverypost’] = html_entity_decode($order_info[‘shipping_postcode’], ENT_QUOTES, ‘UTF-8’);

Нарешті, ми призначаємо власний файл шаблону custom.tpl і пропонуємо подання.

if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/payment/custom.tpl’)){
$this->template = $this->config->get(‘config_template’) . ‘/template/payment/custom.tpl’;
} else {
$this->template = ‘default/template/payment/custom.tpl’;
}
$this->render();

Давайте розглянемо код callback методу. Цей метод викликається, коли користувач повертається в магазин з сайту шлюзу оплати. Перш ніж продовжити, ми перевіряємо, чи є змінна orderid чи ні. Якщо немає, ми просто припиняємо подальшу обробку.

if (isset($this->request->post[‘orderid’])) {
$order_id = trim(substr(($this->request->post[‘orderid’]), 6));
} else {
die(‘Illegal Access’);
}

Потім ми завантажуємо інформацію про замовлення з бази даних. І перевіряємо, чи є індикатор success з відповіді платіжного шлюзу. Якщо є, ми продовжуємо оновлювати інформацію про статус замовлення відповідним чином.

$this->load->model(‘checkout/order’);
$order_info = $this->model_checkout_order->getOrder($order_id);
if ($order_info) {
$data = array_merge($this->request->post,$this->request->get);
//payment was made succ
if ($data[‘status’] == ‘Y’ || $data[‘status’] == ‘y’) {
// update the order status accordingly
}
}

Це була налаштування контролера. Просто, чи не так?

Стандартна модель

Як ви, напевно, знаєте, OpenCart має власний набір стандартів і угод для взаємодії з внутрішньою роботою магазину. Те ж саме і у випадку з установкою моделі для виявлення способу оплати. Досить його просто налаштувати згідно стандарту та угодами, і він буде автоматично підібраний. Створюємо файл моделі catalog/model/payment/custom.php. Вставляємо наступне вміст в створений файл моделі custom.php.

Створення користувальницького способу оплати в OpenCart: частина 3

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

load->language(‘payment/custom’);
$method_data = array(
‘code’ => ‘custom’,
‘title’ => $this->language->get(‘text_title’),
‘sort_order’ => $this->config->get(‘custom_sort_order’)
);
return $method_data;
}
}

Цей клас буде використовуватися OpenCart при перерахуванні активних способів оплати під час процесу перевірки. Під час цього процесу OpenCart збирає список активних методів оплати з back-end і перевіряє для кожного методу, доступний відповідний клас моделі чи ні. Спосіб оплати буде вказано тільки в тому випадку, якщо доступний клас моделі.

Важливим пунктом в цій установці є значення змінної code. У нашому випадку ми визначили custom, це означає, що при виборі способу оплати після натискання «Continue» він буде викликати внутрішній URL payment/custom, який в кінцевому підсумку встановить форму для нашого платіжного шлюзу. Простіше кажучи, це обов’язковий файл для виявлення і правильної роботи методу оплати під front-end.

Мова і файли шаблонів

Тепер нам потрібно створити мову і переглянути файли. Створюємо мовний файл catalog/language/english/payment/custom.php. Вставляємо наступне вміст створений мовний файл custom.php.

Досить легко зрозуміти: ми тільки що створили ярлики, які будуть використовуватися під front-end під час перевірки. Створюємо файл шаблону catalog/view/theme/default/template/payment/custom.tpl. Вставляємо наступне вміст в створений файл шаблону custom.tpl.






















Як ви, напевно, здогадалися, це форма, яка буде відправлятися, коли користувач натискає кнопку Confirm Order. Ми тільки що встановили приховані змінні та їх значення, які раніше були визначені в index методі контролера. Давайте подивимося, як все виглядає по front-end:

Створення користувальницького способу оплати в OpenCart: частина 3

Давайте швидко пробіжимося по суті:

По-перше, потрібно налаштувати файл моделі для свого способу оплати, щоб він міг бути зазначено на вкладці «Step 5: Payment Method».

По-друге, коли користувач вибирає Custom Payment Method на п’ятій вкладці і натискає кнопку “Continue”, OpenCart викликає payment/custom URL-адресу, який викликає index метод і в кінцевому підсумку відображає custom.tpl файл на шостий вкладці.

Нарешті, коли користувач натискає кнопку Confirm Order, форма буде відправлена і користувач буде спрямований на сайт платіжного шлюзу, на якому розпочнеться процес оплати. Як тільки процес оплати буде завершено, користувач буде перенаправлено назад на сайт завдяки прихованої змінної callbackurl. Само собою, статус замовлення буде оновлений як частина callback методу, якщо все буде працювати, як належить.

Висновок

В цій серії я пояснив, як налаштувати практично будь-який спосіб оплати, створивши свій власний модуль методу оплати. Сподіваюся, вам сподобалася ця серія, і ви дізналися щось корисне.

Створення користувальницького способу оплати в OpenCart: частина 3

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення