Heim > Artikel > Backend-Entwicklung > Entwerfen personalisierter Zahlungsoptionen in OpenCart: Teil 3
Wenn Sie diese Serie verfolgt haben, sollten Sie mit der Art der Dateistruktur vertraut sein, die wir im Backend für benutzerdefinierte Zahlungsmethoden eingerichtet haben. Wenn Sie die vorherigen Teile dieser Serie noch nicht gelesen haben, empfehle ich Ihnen dringend, sie zu lesen, bevor Sie mit dieser Serie fortfahren.
Wir werden ein ähnliches Datei-Setup auch für den Frontend-Teil verwenden.
Weiter und rein catalog/controller/ payment/custom.php
创建控制器文件。将以下内容粘贴到新创建的控制器文件 custom.php
.
<?php class ControllerPaymentCustom extends Controller { protected function index() { $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']); 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 function callback() { 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 } } } } ?>
Wie Sie sehen, gibt es zwei verschiedene Methoden. Die index
方法将负责在表单提交到第三方支付网关时设置数据,而 callback
-Methode wird verwendet, um die Antwortdaten vom Zahlungsgateway eines Drittanbieters zu verarbeiten. Allerdings können Sie weitere Methoden definieren, wenn Ihr Zahlungsgateway dies erfordert. In diesem Beispiel halten wir den Prozess so einfach wie möglich.
Lassen Sie uns jeden Teil im Detail kennenlernen. Wir beginnen mit der index
-Methode.
Zuerst haben wir die Sprachdatei geladen und den Wert der Schaltfläche Bestätigen festgelegt. Wir legen auch das Attribut action
fest, das vom Zahlungsübermittlungsformular verwendet wird. Sie sollten diese Einstellung entsprechend Ihrem Zahlungsgateway ändern.
$this->language->load('payment/custom'); $this->data['button_confirm'] = $this->language->get('button_confirm'); $this->data['action'] = 'https://yourpaymentgatewayurl';
Als nächstes laden wir die Bestellinformationen aus der aktiven Sitzung des Benutzers.
$this->load->model('checkout/order'); $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
Wenn die Bestellinformationen verfügbar sind, legen wir die Daten der versteckten Variablen fest, die zum Senden des Formulars an die Zahlungs-Gateway-URL verwendet werden. Wenn Sie sich den Code genau ansehen, werden Sie feststellen, dass wir auch benutzerdefinierte Parameter text_config_one
和 text_config_two
verwenden, die wir im vorherigen Teil dieser Serie im Admin-Konfigurationsformular festgelegt haben.
Eine weitere wichtige Variable, die hier zu beachten ist, ist die callbackurl
,它保存支付网关在付款过程后将用户重定向回我们商店所使用的 URL。是的,查看 URL payment/custom/callback
应表明它将调用 callback
-Methode, wie wir an dieser Stelle sehen werden.
$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');
Abschließend weisen wir die benutzerdefinierte Vorlagendatei zu custom.tpl
und rendern die Ansicht.
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();
Sehen wir uns den Code der callback
-Methode an. Diese Methode wird aufgerufen, wenn der Benutzer von der Zahlungs-Gateway-Site zum Geschäft zurückkehrt.
Zunächst prüfen wir, ob die Variable orderid
verfügbar ist, bevor wir fortfahren. Sollte diese nicht vorliegen, werden wir die weitere Verarbeitung einstellen.
if (isset($this->request->post['orderid'])) { $order_id = trim(substr(($this->request->post['orderid']), 6)); } else { die('Illegal Access'); }
Als nächstes laden wir die Bestellinformationen aus der Datenbank. Abschließend prüfen wir, ob in der Antwort des Zahlungsgateways ein success
-Indikator enthalten ist. Wenn dies der Fall ist, werden wir die Informationen zum Bestellstatus weiterhin entsprechend aktualisieren.
$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 } }
Das sind die Controller-Einstellungen. Ziemlich einfach, nicht wahr?
Wie Sie wahrscheinlich wissen, verfügt OpenCart über eigene Konventionen und Standards für die Handhabung der Innenabläufe Ihres Shops. Dies ist bei der Modelleinrichtung zur Zahlungsartenerkennung der Fall. Sie richten es einfach entsprechend der Konvention ein und es wird automatisch abgeholt.
Weiter und rein catalog/model/ payment/custom.php
创建模型文件。将以下内容粘贴到新创建的模型文件 custom.php
.
<?php class ModelPaymentCustom extends Model { public function getMethod($address, $total) { $this->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 verwendet diese Klasse, wenn während des Bezahlvorgangs gültige Zahlungsmethoden aufgelistet werden. Dabei sammelt OpenCart eine Liste gültiger Zahlungsmethoden vom Backend und prüft für jede Methode, ob die entsprechende Modellklasse verfügbar ist. Zahlungsarten werden nur aufgeführt, wenn die zugehörige Modellklasse verfügbar ist.
Das Wichtigste in dieser Einstellung ist der Wert der Variablen code
. In unserem Fall definieren wir es als custom
. Das heißt, wenn Sie eine Zahlungsmethode auswählen und auf code
变量的值。在我们的例子中,我们将其定义为 custom
,这意味着当您选择付款方式并按继续时,它将调用 payment/custom
Weiter
payment/custom aufgerufen
Interne URL, die letztendlich das Formular für unser Zahlungsgateway einrichtet. Kurz gesagt können wir sagen, dass es sich um eine obligatorische Datei für die Erkennung und ordnungsgemäße Funktion von Front-End-Zahlungsmethoden handelt.
catalog/language/english/ payment/custom.php
创建语言文件。将以下内容粘贴到新创建的语言文件 custom.php
Jetzt müssen wir nur noch die Sprache erstellen und die Dateien anzeigen. Machen Sie weiter und rein
<?php $_['text_title'] = 'Custom Payment Method'; $_['button_confirm'] = 'Confirm Order'; ?>Ganz einfach zu verstehen: Wir haben lediglich die Tags eingerichtet, die beim Bezahlvorgang im Frontend verwendet werden.
catalog/view/theme/default/template/ payment/custom.tpl
创建模板文件。将以下内容粘贴到新创建的模板文件 custom.tpl
Erstellen Sie die Vorlagendatei in catalog/view/theme/default/template/ payment/custom.tpl
. Fügen Sie den folgenden Inhalt in die neu erstellte Vorlagendatei ein
<form action="<?php echo $action; ?>" method="post"> <input type="hidden" name="text_config_one" value="<?php echo $text_config_one; ?>" /> <input type="hidden" name="text_config_two" value="<?php echo $text_config_two; ?>" /> <input type="hidden" name="orderid" value="<?php echo $orderid; ?>" /> <input type="hidden" name="callbackurl" value="<?php echo $callbackurl; ?>" /> <input type="hidden" name="orderdate" value="<?php echo $orderdate; ?>" /> <input type="hidden" name="currency" value="<?php echo $currency; ?>" /> <input type="hidden" name="orderamount" value="<?php echo $orderamount; ?>" /> <input type="hidden" name="billemail" value="<?php echo $billemail; ?>" /> <input type="hidden" name="billphone" value="<?php echo $billphone; ?>" /> <input type="hidden" name="billaddress" value="<?php echo $billaddress; ?>" /> <input type="hidden" name="billcountry" value="<?php echo $billcountry; ?>" /> <input type="hidden" name="billprovince" value="<?php echo $billprovince; ?>" /> <input type="hidden" name="billcity" value="<?php echo $billcity; ?>" /> <input type="hidden" name="billpost" value="<?php echo $billpost; ?>" /> <input type="hidden" name="deliveryname" value="<?php echo $deliveryname; ?>" /> <input type="hidden" name="deliveryaddress" value="<?php echo $deliveryaddress; ?>" /> <input type="hidden" name="deliverycity" value="<?php echo $deliverycity; ?>" /> <input type="hidden" name="deliverycountry" value="<?php echo $deliverycountry; ?>" /> <input type="hidden" name="deliveryprovince" value="<?php echo $deliveryprovince; ?>" /> <input type="hidden" name="deliveryemail" value="<?php echo $deliveryemail; ?>" /> <input type="hidden" name="deliveryphone" value="<?php echo $deliveryphone; ?>" /> <input type="hidden" name="deliverypost" value="<?php echo $deliverypost; ?>" /> <div class="buttons"> <div class="right"> <input type="submit" value="<?php echo $button_confirm; ?>" class="button" /> </div> </div> </form>Wie Sie vielleicht schon erraten haben, ist dies das Formular, das gesendet wird, wenn der Benutzer auf die Schaltfläche „Bestellung bestätigen“ klickt. Wir haben gerade die versteckten Variablen und ihre Werte festgelegt, die zuvor in der -Methode des Controllers definiert wurden.
index
Mal sehen, was am Frontend passiert:
Werfen wir einen kurzen Blick auf den gesamten Prozess:
payment/custom
URL,最终调用 index
方法并在第六个选项卡中呈现 custom.tpl
-Datei auf. callbackurl
隐藏变量,用户将被重定向回我们的网站。当然,如果一切按预期运行,订单状态将作为 callback
-Methode.
In dieser Serie erkläre ich, wie Sie nahezu jede Zahlungsmethode einrichten, indem Sie Ihr eigenes Zahlungsmethodenmodul erstellen. Ich hoffe, Ihnen hat diese Serie gefallen und Sie haben etwas Nützliches gelernt.
Das Erstellen benutzerdefinierter Inhalte für jedes Framework macht immer Spaß, nicht wahr? Denken Sie daran, dass Sie jederzeit Kommentare und Fragen über das Kommentarformular unten hinterlassen können.
Das obige ist der detaillierte Inhalt vonEntwerfen personalisierter Zahlungsoptionen in OpenCart: Teil 3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!