Skip to main content

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 PointPurpose
catalog/controller/common/footer/after
code: simpler
Renders the Simpler checkout button on the page.
catalog/controller/common/header/after
code: simpler
Injects the Simpler SDK script into the page head.
catalog/view/common/cart/after
code: simpler
Adds the Simpler button to the minicart.
catalog/controller/checkout/checkout/before
code: simpler_caas
Redirects to hosted checkout when CaaS is enabled.
catalog/controller/extension/quickcheckout/checkout/before
code: simpler_caas_quick
Same as above, for quick checkout extensions.
catalog/model/checkout/order/addOrder/after
code: simpler_caas_order_saved
Reports the completed order back to Simpler.
catalog/controller/checkout/success/before
code: simpler_caas_success
Resets the checkout state after an order completes.

Triggered Events​

The following events are triggered by the extension.

Trigger PointArgumentsPurpose
extension/module/simpler/metadata/buildarray &$metadataCollects metadata to send to Simpler when the checkout is rendered.
extension/module/simpler/metadata/applyarray $metadataReceives the metadata sent back by Simpler on quote and submit.
simpler/order/create/beforearray &$order_data
array $order_request
Runs before addOrder(), so you can change the order before it is saved.
simpler/order/create/afterint $order_id
array $order_data
array $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:

admin/controller/extension/module/mymodule.php
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:

catalog/controller/extension/module/mymodule.php
// 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:

admin/controller/extension/module/mymodule.php
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:

catalog/controller/extension/module/mymodule.php
// 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']) . "'");
}