Events
The Simpler Checkout extension registers OpenCart events that you can hook into for custom integrations.
Registered Events
The following events are registered during installation.
| Trigger Point | Purpose |
|---|---|
catalog/controller/common/footer/aftercode: simpler | Renders the Simpler checkout button on the page. |
catalog/controller/common/header/aftercode: simpler | Injects the Simpler SDK script into the page head. |
catalog/view/common/cart/aftercode: simpler | Adds the Simpler button to the minicart. |
catalog/controller/checkout/checkout/beforecode: simpler_caas | Redirects to hosted checkout when CaaS is enabled. |
catalog/controller/extension/quickcheckout/checkout/beforecode: simpler_caas_quick | Same as above, for quick checkout extensions. |
catalog/model/checkout/order/addOrder/aftercode: simpler_caas_order_saved | Reports the completed order back to Simpler. |
catalog/controller/checkout/success/beforecode: simpler_caas_success | Resets the checkout state after an order completes. |
Triggered Events
The following events are triggered by the extension.
| Trigger Point | Arguments | Purpose |
|---|---|---|
extension/module/simpler/metadata/build | array &$metadata | Collects metadata to send to Simpler when the checkout is rendered. |
extension/module/simpler/metadata/apply | array $metadata | Receives the metadata sent back by Simpler on quote and submit. |
simpler/order/create/before | array &$order_dataarray $order_request | Runs before addOrder(), so you can change the order before it is saved. |
simpler/order/create/after | int $order_idarray $order_dataarray $order_request | Runs once the order exists. |
Add Custom Metadata
Listen to the metadata events to pass custom data through the Simpler checkout and read it back when Simpler calls your store.
Register the events in your module's install() method:
public function install() {
$this->load->model('setting/event');
$this->model_setting_event->addEvent(
'mymodule_metadata_build_listener',
'catalog/extension/module/simpler/metadata/build',
'extension/module/mymodule/onSimplerMetadataBuild'
);
$this->model_setting_event->addEvent(
'mymodule_metadata_apply_listener',
'catalog/extension/module/simpler/metadata/apply',
'extension/module/mymodule/onSimplerMetadataApply'
);
}
Handle the events in your catalog controller:
// Add metadata to Simpler payload
public function onSimplerMetadataBuild(&$metadata) {
$metadata['user_ip'] = $this->request->server['REMOTE_ADDR'] ?? null;
}
// Apply metadata on Simpler requests (quote/submit) before any action is taken
public function onSimplerMetadataApply($metadata) {
$ip = $metadata['user_ip'] ?? null;
// place your logic here
}
Handle Invoice Data
Listen to the order creation events to read the invoice data that Simpler sends.
Both events receive the full submit request as $order_request.
The invoice details are in $order_request['invoice']:
"invoice": {
"tax_id": "123456783",
"company_name": "EXAMPLE SA",
"activity": "Wholesale of computers",
"tax_authority": "FAE ATHINON",
"company_address": "Amerikis 6, Athina, 10671",
"company_street": "Amerikis 6",
"company_city": "Athina",
"company_postcode": "10671"
}
company_address holds the full address in one line.
company_street, company_city and company_postcode hold the same address split into parts.
Use simpler/order/create/before to change the order before it is saved.
Use simpler/order/create/after when you need the $order_id, e.g. to save the invoice in your own table.
Register the events in your module's install() method:
public function install() {
$this->load->model('setting/event');
$this->model_setting_event->addEvent(
'mymodule_order_create_before_listener',
'catalog/simpler/order/create/before',
'extension/module/mymodule/onSimplerOrderCreateBefore'
);
$this->model_setting_event->addEvent(
'mymodule_order_create_after_listener',
'catalog/simpler/order/create/after',
'extension/module/mymodule/onSimplerOrderCreateAfter'
);
}
Handle the events in your catalog controller:
// Change the order before it is saved
public function onSimplerOrderCreateBefore(&$order_data, $order_request) {
if (empty($order_request['invoice'])) {
return;
}
$order_data['payment_company'] = $order_request['invoice']['company_name'];
}
// Save the invoice data once the order exists
public function onSimplerOrderCreateAfter($order_id, $order_data, $order_request) {
if (empty($order_request['invoice'])) {
return;
}
$invoice = $order_request['invoice'];
$this->db->query("INSERT INTO " . DB_PREFIX . "mymodule_invoice SET
order_id = '" . (int)$order_id . "',
tax_id = '" . $this->db->escape($invoice['tax_id']) . "',
company_name = '" . $this->db->escape($invoice['company_name']) . "',
activity = '" . $this->db->escape($invoice['activity']) . "',
tax_authority = '" . $this->db->escape($invoice['tax_authority']) . "',
company_street = '" . $this->db->escape($invoice['company_street']) . "',
company_city = '" . $this->db->escape($invoice['company_city']) . "',
company_postcode = '" . $this->db->escape($invoice['company_postcode']) . "'");
}