Я разрабатываю платежный модуль для OpenCart 3. Поскольку нет документации по обновлению, мой модуль основан на других платежных модулях (таких как Alipay, PayPal, наличными по требованию и т. Д ….)
Я создал вид модуля на admin / view / template / extension / payment / mipago.twig просто
{{ header }}{{ column_left }}
{% if error_warning %}
{{ error_warning }}
{% endif %}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-mipago" data-toggle="tooltip" title={{ button_save }} class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href={{ cancel }} data-toggle="tooltip" title={{ button_cancel }} class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if error_warning %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i>{{ error_warning }}
<button type="button" class="close" data-dismiss="alert">×</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i>{{ text_edit }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-mipago" class="form-horizontal"><div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="mipago_status" id="input-status" class="form-control">
{% if paygol_status %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled}}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}
И контроллер admin / контроллер / расширение / оплата / mipago.php
<?php
class ControllerExtensionPaymentMiPago extends Controller {
private $error = array();
public function index() {
$this->document->setTitle('Mi Pago');
$this->load->model('setting/setting');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_setting_setting->editSetting('payment_mipago', $this->request->post);
$this->session->data['success'] = $this->language->get('text_success');
$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
}
if (isset($this->error['warning'])) {
$data['error_warning'] = $this->error['warning'];
} else {
$data['error_warning'] = "'';
}
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => 'Inicio',
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
);
$data['breadcrumbs'][] = array(
'text' => 'Extensiones',
'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)
);
$data['breadcrumbs'][] = array(
'text' => 'Mi Pago',
'href' => $this->url->link('extension/payment/mipago', 'user_token=' . $this->session->data['user_token'], true)
);
$data['action'] = $this->url->link('extension/payment/mipago', 'user_token=' . $this->session->data['user_token'], true);
$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true);
if (isset($this->request->post['mipago_status'])) {
$data['mipago_status'] = $this->request->post['mipago_status'];
} else {
$data['mipago_status'] = $this->config->get('mipago_status');
}
if (isset($this->request->post['paygol_order_status_id'])) {
$data['mipago_order_status_id'] = $this->request->post['mipago_order_status_id'];
} else {
$data['mipago_order_status_id'] = $this->config->get('mipago_order_status_id');
}
$this->load->model('localisation/order_status');
$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
if (isset($this->request->post['mipago_geo_zone_id'])) {
$data['mipago_geo_zone_id'] = $this->request->post['mipago_geo_zone_id'];
} else {
$data['mipago_geo_zone_id'] = $this->config->get('mipago_geo_zone_id');
}
$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');
$this->response->setOutput($this->load->view('extension/payment/mipago', $data));
}
protected function validate() {
if (!$this->user->hasPermission('modify', 'extension/payment/mipago')) {
$this->error['warning'] = $this->language->get('error_permission');
}
return !$this->error;
}
}
Это макет, но проблема его присутствует, я не могу сохранить данные из формы в представлении. Мой код основан на других платежных модулях, таких как G2APay и Cash on Demand, но даже используя те же строки кода (только изменяя параметры), он ничего не сохраняет.
Решено!
Это было просто несоответствие между именем модуля, его типом и всеми переменными и полями.
Например, мой плагин должен быть payment
модуль, поэтому все переменные должны быть названы payment_mipago_<field>
, вместо mipago_<field>
включая поля, которые opencart вставляет в базу данных
Для OC3.0 должно быть:
if (isset($this->request->post['payment_mipago_status'])) {
$data['payment_mipago_status'] = $this->request->post['payment_mipago_status'];
} else {
$data['payment_mipago_status'] = $this->config->get('payment_mipago_status');
}
и для всех переменных вы должны добавить payment