Current SituationΒΆ
Current metrics - tablesΒΆ
Legend for table columns
- Metric ID is a unique ID, so we can connect the metrics to the flow diagrams below
- Type:
- Count - Sends pings when something happens, like when you add something to my cart or page hits
- Sum - Sends the amount of something, like the order amount or amount of products.
- Avg - Sends the average of something, like the average weight or price of the products in the cart
- Median - Sends the mean of something, if you have a list of like
[1, 1, 2, 45, 68], the median would be2as it's in the middle - Data Array - Sends an array of data to the platform
- Platform:
- InfluxDB
- GA4 (Google Analytics and Google Tag Manager)
- Copernica
| Metric ID | Title | Type | Platform | Origin | Explanation |
|---|---|---|---|---|---|
| MT-1 | Order Data | Data Array | Copernica | Github link | Sends the data of all new orders and updated orders |
| MT-2 | Order Product Data | Data Array | Copernica | Github link | Sends the data of all new order details and updated order details (order detail = products of an order) |
| MT-3 | Cart Data | Data Array | Copernica | Github link | Sends the data of all new carts and updated carts |
| MT-4 | Cart Product Data | Data Array | Copernica | Github link | Sends the data of all new products inside carts and updated products inside carts |
| MT-5 | Customer Data | Data Array | Copernica | Github link | Sends the data of all new customers and updated customers |
| MT-6 | Product Data | Data Array | Copernica | Github link | Sends the data of all new products and updated products |
| Metric ID | Title | Type | Platform | Origin | Description | Technical Details |
|---|---|---|---|---|---|---|
| MT-8 | ReviewInviteGenericMailCommand: review_invite_sent - sent | Event | InfluxDB | Github Link | Tracks when a generic review invitation email is successfully sent to a customer | - sent: 1 |
| MT-9 | CartController: cart - add | Event | InfluxDB | Github Link | Tracks when a product is added to the shopping cart | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: preg_match('/.html$/' |
| MT-10 | CartController: cart - remove | Event | InfluxDB | Github Link | Tracks when a product is removed from the shopping cart | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'cart' |
| MT-11 | DocdataExecuteUpdateCommand: order_state_updated - order_value | Event | InfluxDB | Github Link | Tracks when an order's status is updated via the Docdata payment gateway, capturing the order value and new status | - order_status_id: $new_order_state_ob->id - order_status: $new_order_state_ob->name - shop_id: $shop->id - shop_name: $shop->name - id_order: $order->id |
| MT-12 | ReviewInviteSendTrustPilotReviewCommand: review_invite_sent - sent | Event | InfluxDB | Github Link | Tracks when a TrustPilot review invitation email is successfully sent to a customer | - sent: 1 |
| MT-13 | AuthController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the login and registration form | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'login_register_form' |
| MT-14 | ContactController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the contact form | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'contact_form' |
| MT-15 | ContactController: contact - success | Event | InfluxDB | Github Link | Tracks successful contact form submissions | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-16 | ContactController: contact - failed - reason: 'recaptcha_check_failed' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to reCAPTCHA verification failure | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'recaptcha_check_failed' |
| MT-17 | ContactController: contact - failed - reason: 'submission_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid submission data | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'submission_invalid' |
| MT-18 | ContactController: contact - failed - reason: 'file_upload_failed' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to file upload errors | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'file_upload_failed' |
| MT-19 | ContactController: contact - failed - reason: 'email_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid email address | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_invalid' |
| MT-20 | ContactController: contact - failed - reason: 'message_blank' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to blank message content | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'message_blank' |
| MT-21 | ContactController: contact - failed - reason: 'message_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid message format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'message_invalid' |
| MT-22 | ContactController: contact - failed - reason: 'subject_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid subject selection | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'subject_invalid' |
| MT-23 | ContactController: contact - failed - reason: 'reference_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid reference number | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'reference_invalid' |
| MT-24 | ContactController: contact - failed - reason: 'reference_invalid' | Event | InfluxDB | Github Link | Tracks failed contact form submissions due to invalid reference number (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'reference_invalid' |
| MT-25 | ContactController: contact - failed - reason: 'error_on_message_send' | Event | InfluxDB | Github Link | Tracks failed contact form submissions when the email delivery system encounters an error (first error point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'error_on_message_send' |
| MT-26 | ContactController: contact - failed - reason: 'error_on_message_send_2' | Event | InfluxDB | Github Link | Tracks failed contact form submissions when the email delivery system encounters an error (second error point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'error_on_message_send_2' |
| MT-27 | ContactController: contact - failed - reason: 'error_on_message_send_3' | Event | InfluxDB | Github Link | Tracks failed contact form submissions when the email delivery system encounters an error (third error point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'error_on_message_send_3' |
| MT-28 | ContactController: contact - success | Event | InfluxDB | Github Link | Tracks successful contact form submissions (duplicate tracking of MT-15) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-29 | OrderConfirmationController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the order confirmation page | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'order_confirmation' |
| MT-30 | OrderConfirmationController: order_confirmation_page_view - page_view | Event | InfluxDB | Github Link | Tracks order confirmation page views with detailed cart, module, and order information | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - id_cart: (string)$this->id_cart - id_module: (string)$this->id_module - id_order: (string)$this->id_order |
| MT-31 | OrderOpcController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the checkout login/guest selection step | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'checkout_step_login_guest' |
| MT-32 | OrderOpcController: payment - failed - reason: Tools::getValue('reason') | Event | InfluxDB | Github Link | Tracks failed payment attempts during checkout with the specific failure reason provided by the payment system | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'checkout_step_payment_methods' - reason: Tools::getValue('reason') |
| MT-33 | OrderOpcController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the payment method selection step during checkout | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'checkout_step_payment_methods' |
| MT-34 | OrderOpcController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the shopping cart page from the checkout flow | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'cart' |
| MT-35 | OrderOpcController: button_submit - submit | Event | InfluxDB | Github Link | Tracks when users click the button to proceed from checkout to payment selection | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - button: 'to_payment' |
| MT-36 | AdminLoginController: admin_login - failed - reason: 'email_empty' | Event | InfluxDB | Github Link | Tracks failed admin login attempts due to missing email address | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_empty' |
| MT-37 | AdminLoginController: admin_login - failed - reason: 'email_invalid' | Event | InfluxDB | Github Link | Tracks failed admin login attempts due to invalid email format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_invalid' |
| MT-38 | AdminLoginController: admin_login - failed - reason: 'password_empty' | Event | InfluxDB | Github Link | Tracks failed admin login attempts due to missing password | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'password_empty' |
| MT-39 | AdminLoginController: admin_login - failed - reason: 'password_invalid' | Event | InfluxDB | Github Link | Tracks failed admin login attempts due to invalid password format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'password_invalid' |
| MT-40 | AdminLoginController: admin_login - failed - reason: 'employee_invalid_or_wrong_password' | Event | InfluxDB | Github Link | Tracks failed admin login attempts due to incorrect employee credentials or wrong password | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'employee_invalid_or_wrong_password' |
| MT-41 | AdminLoginController: admin_login - failed - reason: 'employee_not_attached_to_shop' | Event | InfluxDB | Github Link | Tracks failed admin login attempts when the employee account is not associated with the current shop | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'employee_not_attached_to_shop' |
| MT-42 | AdminLoginController: admin_login - success | Event | InfluxDB | Github Link | Tracks successful admin panel login attempts | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-43 | PaymentModule: order_as - customer | Event | InfluxDB | Github Link | Tracks when an order is placed by a customer (as opposed to by an admin) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-44 | PasswordController: password_forgotten - failed - reason: 'invalidEmail' | Event | InfluxDB | Github Link | Tracks failed password reset attempts due to invalid email format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'invalidEmail' |
| MT-45 | PasswordController: password_forgotten - failed - reason: 'noAccountRegisteredWithEmail' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when no account exists with the provided email | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'noAccountRegisteredWithEmail' |
| MT-46 | PasswordController: password_forgotten - failed - reason: 'customerNotActive' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the customer account is inactive | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'customerNotActive' |
| MT-47 | PasswordController: password_forgotten - failed - reason: 'lastPasswordGenTooFast' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when a reset was recently requested (rate limiting protection) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'lastPasswordGenTooFast' |
| MT-48 | PasswordController: password_forgotten - success-mail-sent | Event | InfluxDB | Github Link | Tracks successful password reset email sending | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-49 | PasswordController: password_forgotten - failed - reason: 'customerNotFound' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the customer cannot be found (different from no account with email) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'customerNotFound' |
| MT-50 | PasswordController: password_forgotten - failed - reason: 'customerNotActive2' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the customer account is inactive (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'customerNotActive2' |
| MT-51 | PasswordController: password_forgotten - failed - reason: 'passwordTokenTimeout' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the reset token has expired | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'passwordTokenTimeout' |
| MT-52 | PasswordController: password_forgotten - success-password-sent | Event | InfluxDB | Github Link | Tracks successful password reset completion when new password has been sent | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-53 | PasswordController: password_forgotten - failed - reason: 'errorSendingMail' | Event | InfluxDB | Github Link | Tracks failed password reset attempts due to email delivery errors | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'errorSendingMail' |
| MT-54 | PasswordController: password_forgotten - failed - reason: 'couldNotUpdateCustomer' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the customer record cannot be updated in the database | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'couldNotUpdateCustomer' |
| MT-55 | PasswordController: password_forgotten - failed - reason: 'emailNotFound' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when no email address is found | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'emailNotFound' |
| MT-56 | PasswordController: password_forgotten - failed - reason: 'noTokenOrNoIdCustomer' | Event | InfluxDB | Github Link | Tracks failed password reset attempts when the reset token or customer ID is missing | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'noTokenOrNoIdCustomer' |
| MT-57 | PasswordController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the password forgotten/reset page | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'password_forgotten' |
| MT-58 | AuthController: login - failed - reason: 'email_required' | Event | InfluxDB | Github Link | Tracks failed customer login attempts due to missing email address | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_required' |
| MT-59 | AuthController: login - failed - reason: 'email_invalid' | Event | InfluxDB | Github Link | Tracks failed customer login attempts due to invalid email format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_invalid' |
| MT-60 | AuthController: login - failed - reason: 'password_required' | Event | InfluxDB | Github Link | Tracks failed customer login attempts due to missing password | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'password_required' |
| MT-61 | AuthController: login - failed - reason: 'password_invalid' | Event | InfluxDB | Github Link | Tracks failed customer login attempts due to invalid password format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'password_invalid' |
| MT-62 | AuthController: login - failed - reason: 'account_unavailable' | Event | InfluxDB | Github Link | Tracks failed customer login attempts when the account is unavailable or disabled | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'account_unavailable' |
| MT-63 | AuthController: login - failed - reason: 'authentication_failed' | Event | InfluxDB | Github Link | Tracks failed customer login attempts due to authentication failure (wrong credentials) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'authentication_failed' |
| MT-64 | AuthController: login - success | Event | InfluxDB | Github Link | Tracks successful customer login attempts | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-65 | AuthController: register - failed - reason: 'email_already_in_use' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the email address is already registered | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_already_in_use' |
| MT-66 | AuthController: register - failed - reason: 'phone_required' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to missing phone number | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'phone_required' |
| MT-67 | AuthController: register - failed - reason: 'date_of_birth_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid date of birth | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'date_of_birth_invalid' |
| MT-68 | AuthController: register - failed - reason: 'email_confirmation_sent_failed' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the confirmation email cannot be sent | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_confirmation_sent_failed' |
| MT-69 | AuthController: register - success | Event | InfluxDB | Github Link | Tracks successful customer registration attempts | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-70 | AuthController: register - failed - reason: 'account_error_create' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to errors creating the account in the database | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'account_error_create' |
| MT-71 | AuthController: register - failed - reason: 'validate_controller_errors' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to validation errors from the controller | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'validate_controller_errors' |
| MT-72 | AuthController: register - failed - reason: 'country_not_loaded' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the country data cannot be loaded | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'country_not_loaded' |
| MT-73 | AuthController: register - failed - reason: 'country_not_active' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the selected country is not active in the shop | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'country_not_active' |
| MT-74 | AuthController: register - failed - reason: 'zip_code_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid zip/postal code format | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'zip_code_invalid' |
| MT-75 | AuthController: register - failed - reason: 'zip_code_required' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to missing zip/postal code | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'zip_code_required' |
| MT-76 | AuthController: register - failed - reason: 'zip_code_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid zip/postal code format (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'zip_code_invalid' |
| MT-77 | AuthController: register - failed - reason: 'identification_number_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid identification/ID number | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'identification_number_invalid' |
| MT-78 | AuthController: register - failed - reason: 'country_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid country selection | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'country_invalid' |
| MT-79 | AuthController: register - failed - reason: 'country_choose_state' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when a state/province must be selected for the chosen country | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'country_choose_state' |
| MT-80 | AuthController: register - failed - reason: 'date_of_birth_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid date of birth (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'date_of_birth_invalid' |
| MT-81 | AuthController: register - failed - reason: 'email_already_in_use' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the email address is already registered (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_already_in_use' |
| MT-82 | AuthController: register - failed - reason: 'date_of_birth_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid date of birth (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'date_of_birth_invalid' |
| MT-83 | AuthController: register - failed - reason: 'customer_error_creating' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to errors while creating the customer record | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'customer_error_creating' |
| MT-84 | AuthController: register - failed - reason: 'Address' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to address validation errors | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'Address' |
| MT-85 | AuthController: register - failed - reason: 'email_confirmation_sent_failed' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the confirmation email cannot be sent (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_confirmation_sent_failed' |
| MT-86 | AuthController: register - success | Event | InfluxDB | Github Link | Tracks successful customer registration attempts (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name |
| MT-87 | AuthController: register - failed - reason: 'email_invalid' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts due to invalid email format (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_invalid' |
| MT-88 | AuthController: register - failed - reason: 'email_already_in_use' | Event | InfluxDB | Github Link | Tracks failed customer registration attempts when the email address is already registered (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - reason: 'email_already_in_use' |
| MT-89 | AuthController: page_views - view | Event | InfluxDB | Github Link | Tracks page views on the registration form page | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'register_form' |
| MT-90 | cart: cart - remove | Event | InfluxDB | Github Link | Tracks when items are removed from the cart via the My Account page | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'my_account' |
| MT-91 | ajax: button_submit - submit | Event | InfluxDB | Github Link | Tracks when users click the reorder button to reorder previous purchases | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - button: 'reorder' |
| MT-92 | ajax: cart - add | Event | InfluxDB | Github Link | Tracks when items are added to the cart via the My Account reorder functionality | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'my_account' |
| MT-93 | TrustpilotProductReview: review_received - product_review | Event | InfluxDB | Github Link | Tracks when a product review is received from Trustpilot with star rating | - star_score: (string)$this->stars - shop_id: (string)$context->shop->id - shop_name: $context->shop->name |
| MT-94 | validation: cm - validation | Event | InfluxDB | Github Link | Tracks successful payment validation via Docdata payment gateway | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - id_cart: $this->context->cart->id |
| MT-95 | validation: cm - validation - reason: 'caughtInException' | Event | InfluxDB | Github Link | Tracks failed payment validation via Docdata when an exception is caught during processing | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'caughtInException' - id_cart: $this->context->cart->id |
| MT-96 | payment: cm - start_payment - reason: 'paymentPnameNotValid' | Event | InfluxDB | Github Link | Tracks failed Doc data payment initiation when the payment method name is invalid | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paymentPnameNotValid' - id_cart: $cart->id |
| MT-97 | payment: cm - start_payment - reason: 'paymentPnameNotValid' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when the payment method name is invalid (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paymentPnameNotValid' - id_cart: $id_cart |
| MT-98 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation attempts | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - payment_type: $paymentType - id_cart: $id_cart |
| MT-99 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation attempts (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - payment_type: $paymentType - id_cart: $id_cart |
| MT-100 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation attempts (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - payment_type: $paymentType - id_cart: $id_cart |
| MT-101 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks successful Docdata payment initiation | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $paymentType - id_cart: $id_cart |
| MT-102 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation attempts (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - payment_type: $paymentType - id_cart: $id_cart |
| MT-103 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks successful Docdata payment initiation (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $paymentType - id_cart: $id_cart |
| MT-104 | payment: cm - start_payment - reason: 'noResponse' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when no response is received from the payment gateway | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'noResponse' - payment_type: $paymentType - id_cart: $id_cart |
| MT-105 | payment: cm - start_payment - reason: 'startSuccessPaymentSuccessNotSet' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when payment success status is not properly set despite successful start | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'startSuccessPaymentSuccessNotSet' - payment_type: $paymentType - id_cart: $id_cart |
| MT-106 | payment: cm - start_payment - reason: 'redirectNotSet' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when the redirect URL is not set in the response | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'redirectNotSet' - payment_type: $paymentType - id_cart: $id_cart |
| MT-107 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks successful Docdata payment initiation (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $paymentType - id_cart: $id_cart |
| MT-108 | payment: cm - start_payment - reason: 'redirectPurposeNotRedirect' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when the redirect purpose is not set to 'redirect' | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'redirectPurposeNotRedirect' - payment_type: $paymentType - id_cart: $id_cart |
| MT-109 | payment: cm - start_payment - reason: 'notCaughtInIfStatements' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when an unexpected condition occurs (not caught by conditional logic) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'notCaughtInIfStatements' - payment_type: $paymentType - id_cart: $id_cart |
| MT-110 | payment: cm - start_payment - reason: 'noResponse' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when no response is received from the payment gateway (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'noResponse' - payment_type: $paymentType - id_cart: $id_cart |
| MT-111 | payment: cm - start_payment - reason: 'startSuccessPaymentSuccessNotSet' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when payment success status is not properly set (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'startSuccessPaymentSuccessNotSet' - payment_type: $paymentType - id_cart: $id_cart |
| MT-112 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks successful Docdata payment initiation (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $paymentType - id_cart: $id_cart |
| MT-113 | payment: cm - start_payment - reason: 'notCaughtInIfStatements' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when an unexpected condition occurs (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'notCaughtInIfStatements' - payment_type: $paymentType - id_cart: $id_cart |
| MT-114 | payment: cm - start_payment - reason: 'noResponse' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when no response is received (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'noResponse' - payment_type: $paymentType - id_cart: $id_cart |
| MT-115 | payment: cm - start_payment - reason: 'startSuccessPaymentSuccessNotSet' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when payment success status is not properly set (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'startSuccessPaymentSuccessNotSet' - payment_type: $paymentType - id_cart: $id_cart |
| MT-116 | payment: cm - start_payment | Event | InfluxDB | Github Link | Tracks successful Docdata payment initiation (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $paymentType - id_cart: $id_cart |
| MT-117 | payment: cm - start_payment - reason: 'redirectPurposeNotRedirect' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when redirect purpose is not set to 'redirect' (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'redirectPurposeNotRedirect' - payment_type: $paymentType - id_cart: $id_cart |
| MT-118 | payment: cm - start_payment - reason: 'notCaughtInIfStatements' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when an unexpected condition occurs (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'notCaughtInIfStatements' - payment_type: $paymentType - id_cart: $id_cart |
| MT-119 | payment: cm - start_payment - reason: 'validatePaymentResponse' | Event | InfluxDB | Github Link | Tracks failed Docdata payment initiation when payment response validation fails | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'validatePaymentResponse' - id_cart: $cart->id |
| MT-120 | failed: payment - failed - reason: 'failed-fallback' | Event | InfluxDB | Github Link | Tracks failed payments via Docdata fallback handler | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - page: 'checkout_step_payment_methods' - reason: 'failed-fallback' - id_cart: $cart->id |
| MT-121 | proceed: cm - proceed_payment - reason: 'paymentOrderKeyInvalid' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the payment order key is invalid | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paymentOrderKeyInvalid' - id_cart: $this->context->cart->id |
| MT-122 | proceed: cm - proceed_payment - reason: 'orderNotObjectOrIdMissing' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the order object is not valid or ID is missing | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'orderNotObjectOrIdMissing' - payment_type: $ddp_transaction->default_pm - id_cart: $this->context->cart->id |
| MT-123 | proceed: cm - proceed_payment | Event | InfluxDB | Github Link | Tracks successful payment proceed through Docdata | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $ddp_transaction->default_pm - id_cart: $this->context->cart->id |
| MT-124 | proceed: cm - proceed_payment - reason: 'paymentNotCorrect' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the payment details are not correct | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paymentNotCorrect' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-125 | proceed: cm - proceed_payment | Event | InfluxDB | Github Link | Tracks successful payment proceed through Docdata (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-126 | proceed: cm - proceed_payment - reason: 'paypalTokenOrPayerIdMissing' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when PayPal token or payer ID is missing | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paypalTokenOrPayerIdMissing' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-127 | proceed: cm - proceed_payment | Event | InfluxDB | Github Link | Tracks successful payment proceed through Docdata (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-128 | proceed: cm - proceed_payment - reason: 'creditcardMdNotValid' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when credit card MD (Merchant Data) is not valid | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'creditcardMdNotValid' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-129 | proceed: cm - proceed_payment - reason: 'creditcardPaResNotValid' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when credit card PaRes (Payer Authentication Response) is not valid | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'creditcardPaResNotValid' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-130 | proceed: cm - proceed_payment - reason: 'paypalTokenNotValid' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the PayPal token is not valid | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paypalTokenNotValid' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-131 | proceed: cm - proceed_payment - reason: 'paymentMethodKlarna' | Event | InfluxDB | Github Link | Tracks payment proceed attempts using Klarna payment method (in progress status) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'in_progress' - reason: 'paymentMethodKlarna' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-132 | proceed: cm - proceed_payment - reason: 'proceedPaymentFailed' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the proceed operation fails | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'proceedPaymentFailed' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-133 | proceed: cm - proceed_payment - reason: 'proceedErrorsPaymentNotCorrect' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when proceed errors occur and payment is not correct | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'proceedErrorsPaymentNotCorrect' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-134 | proceed: cm - proceed_payment - reason: 'proceedErrors' | Event | InfluxDB | Github Link | Tracks payment proceed attempts with errors (in progress status) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'in_progress' - reason: 'proceedErrors' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-135 | proceed: cm - proceed_payment - reason: 'paymentAmountNotCorrect' | Event | InfluxDB | Github Link | Tracks failed payment proceed attempts when the payment amount does not match expected amount | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'failed' - reason: 'paymentAmountNotCorrect' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-136 | proceed: cm - proceed_payment | Event | InfluxDB | Github Link | Tracks successful payment proceed through Docdata (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'success' - payment_type: $this->paymentMethod - id_cart: $this->context->cart->id |
| MT-137 | StartPaymentResponse: cm - start_payment - reason: 'startSuccessPaymentSuccessNotSet' | Event | InfluxDB | Github Link | Tracks cancelled payment responses when payment success is not properly set in the start payment response | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'cancelled' - reason: 'startSuccessPaymentSuccessNotSet' - payment_type: $paymentMethod - id_cart: $order->id_cart |
| MT-138 | StartPaymentResponse: cm - start_payment - reason: 'startSuccessPaymentSuccessNotSet' | Event | InfluxDB | Github Link | Tracks cancelled payment responses when payment success is not properly set (duplicate tracking point) | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'cancelled' - reason: 'startSuccessPaymentSuccessNotSet' - payment_type: $paymentMethod - id_cart: $order->id_cart |
| MT-139 | StartPaymentResponse: cm - start_payment - reason: 'redirectType' | Event | InfluxDB | Github Link | Tracks payment responses with unknown status when redirect type is encountered | - shop_id: (string)$this->context->shop->id - shop_name: $this->context->shop->name - status: 'unknown' - reason: 'redirectType' - payment_type: $paymentMethod - id_cart: $order->id_cart |
| Metric ID | Title | Type | Platform | Origin | Explanation |
|---|---|---|---|---|---|
| MT-8 | Order Purchase | Count | InfluxDB | [Github link]( | Simple count of all the orders made |
Current User flow - FlowchartΒΆ
Happy flow
Warning! This flow only has the happy flow worked out. So it only contains the steps if it goes well and the payment is approved.
Flowchart - click to expand
---
config:
flowchart:
curve: monotoneY
nodeSpacing: 30
rankSpacing: 40
padding: 10
wrappingWidth: 120
---
flowchart TD
%% Example comment label
%% CheckoutStep1@{ shape: braces, label: EXAMPLE UF-1} -.-> RedirectCheckout
%% Pre-checkout
Start@{ shape: circle} --> ToMyAccount[Go to my account]
ToMyAccount --> MyAccountReorder[Add to Cart: My account reorder]
MyAccountReorder ---> ToCheckoutMyAccount[Go to checkout]
ToCheckoutMyAccount ---> MyAccountPassthrough(User is logged in, thus you can continue to payment method selection)
MyAccountPassthrough ----> SelectMethod
Start@{ shape: circle} --> GoToPDPPLP[Go to PDP or PLP]
GoToPDPPLP --> AddToCart[Add to Cart: PDP or PLP]
AddToCart --> ToCart[Go to Cart]
ToCart --> RedirectCheckout[Go to checkout]
%% Checkout Step 1: UserData
RedirectCheckout --> IsLoggedIn{Is Logged in?}
IsLoggedIn -->|Yes| SelectMethod{Choose payment method}
IsLoggedIn -->|No| AuthChoice{Choose authentication method}
AuthChoice -->|Log in| Login@{shape: manual-input, label: Enter credentials} ---> SelectMethod
AuthChoice -->|Register| Registration@{ shape: manual-input, label: Fill registration form **with** password} ---> SelectMethod
AuthChoice -->|Guest| GuestForm@{ shape: manual-input, label: Fill registration form **without** password -> as guest} ---> SelectMethod
AuthChoice -->|Forgot password| ForgotPassword(Redirect to forgot password)
ForgotPassword --> ResetPassword@{shape: procs, label: Set a new password with password reset email} --> RedirectCheckout
%% Checkout Step 2: Payment Selection
%% BANKTRANSFER
CreatePaymentBankTransfer@{shape: procs, label: Create Bank transfer payment at CM}
OpenBankTransferModal@{shape: event, label: Open Bank Transfer Modal}
SelectMethod -- Bank Transfer --> CreatePaymentBankTransfer
CreatePaymentBankTransfer --> OpenBankTransferModal
OpenBankTransferModal -------> RedirectToValidationPage
%% IDEAL
PaymentIDEAL@{shape: procs, label: Start payment at CM for iDEAL}
RedirectToIdeal@{shape: event, label: Redirect to iDEAL}
PayIdeal@{shape: process, label: Pay the amount in iDEAL}
SelectMethod -- IDEAL --> PaymentIDEAL
PaymentIDEAL --> RedirectToIdeal
RedirectToIdeal --> PayIdeal
PayIdeal ------> RedirectToValidationPage
%% PAYPAL
PaymentPaypal@{shape: procs, label: Start payment at CM for PayPal}
RedirectToPayPal@{shape: event, label: Redirect to PayPal}
PayPayPal@{shape: process, label: Pay the amount in PayPal}
SelectMethod -- PayPal --> PaymentPaypal
PaymentPaypal --> RedirectToPayPal
RedirectToPayPal --> PayPayPal
PayPayPal ------> RedirectToValidationPage
%% MAESTRO - TODO: Flow unclear, cannot verify in test environment (test card numbers not accepted)
%% Expected to work similar to creditcard flow but needs verification
PaymentMaestro@{shape: procs, label: "TODO: Start payment at CM for Meastro"}
RedirectToMaestro@{shape: event, label: "TODO: Redirect to Meastro"}
PayMeastro@{shape: process, label: "TODO: Pay the amount in Meastro"}
SelectMethod -- "Maestro (TODO)" --> PaymentMaestro
PaymentMaestro --> RedirectToMaestro
RedirectToMaestro --> PayMeastro
PayMeastro ------> RedirectToValidationPage
%% KLARNA
HasPhoneNumber@{shape: diamond, label: Has Customer a phone number?}
FillPhoneNumberModal@{shape: manual-input, label: Fill phone number for payment}
PaymentKlarna@{shape: procs, label: Start payment at CM for Klarna}
RedirectToKlarna@{shape: event, label: Redirect to Klarna}
PayKlarna@{shape: process, label: Pay the amount in Klarna}
SelectMethod -- Klarna --> HasPhoneNumber
HasPhoneNumber -- Yes --> PaymentKlarna
HasPhoneNumber -- No --> FillPhoneNumberModal
FillPhoneNumberModal --> PaymentKlarna
PaymentKlarna --> RedirectToKlarna
RedirectToKlarna --> PayKlarna
PayKlarna ----> RedirectToValidationPage
%% VISA & MASTERCARD
SelectMethod -- Creditcard (Mastercard & Visa) --> GoToCreditcardPage
%% MISTERCASH (Bancontact)
SelectMethod -- Mistercash (Bancontact) --> GoToBancontactPage
%% Generic validation and completion
RedirectToValidationPage@{shape: event, label: Redirect to Validation Page}
ValidateOrderPayment@{shape: procs, label: Validate Order payment}
IsOrderPaymentValid@{shape: diamond, label: Is Order payment valid?}
RedirectToValidationPage --> ValidateOrderPayment
ValidateOrderPayment --> IsOrderPaymentValid
IsOrderPaymentValid -- No --> SelectMethod
IsOrderPaymentValid -- Yes --> RedirectOrderConfirmation@{shape: rect, label: Redirect to Order Confirmation}
%% Sub-flows
%% Creditcard Sub-flow
subgraph Creditcard Flow
GoToCreditcardPage@{ shape: rect, label: Go to payment with Creditcard} --> UseSavedCard@{shape: diamond, label: Use existing card?}
%% Use existing card
UseSavedCard -- Use existing card --> UseCardCM@{ shape: procs, label: Gets existing card from CM and uses that card}
UseCardCM ---> PaymentCreditcard
%% Use new card
UseSavedCard -- No --> EnterCardDetails[Enter card details]
EnterCardDetails --> SaveCard{Save new card?}
%% Save new card
SaveCard -- Yes --> SaveCardCM@{ shape: procs, label: Saves new card to CM and uses that card}
SaveCardCM --> PaymentCreditcard@{shape: procs, label: Process payment}
%% Don't save new card
SaveCard -- No --> PaymentCreditcard
PaymentCreditcard --> Handle3dSecure@{shape: event, label: Handle 3D Secure and authenticate payment}
click Handle3dSecure href "#threedsecure" "Information on 3D secure"
end
Handle3dSecure ---> RedirectToValidationPage
%% Bancontact Sub-flow
subgraph Bancontact flow
GoToBancontactPage@{shape: rect, label: Go to payment with Bancontact} --> CreateBancontactOrder@{shape: procs, label: Create order and get QR/App URLs from CM}
CreateBancontactOrder --> UseBancontactQr@{shape: diamond, label: Use Bancontact App/QR?}
%% Use QR/App - Desktop: scan QR, Mobile: open app
UseBancontactQr -- Yes (Desktop) --> ShowQrCode@{shape: event, label: Display QR code on screen}
ShowQrCode --> ScanQrCode@{shape: manual-input, label: User scans QR with phone}
ScanQrCode --> AuthorizeInApp@{shape: process, label: Authorize payment in Bancontact App}
AuthorizeInApp --> PollPaymentStatus@{shape: procs, label: Original browser polls payment status}
PollPaymentStatus --> PayBancontactApp@{shape: event, label: Payment confirmed - redirect original browser}
UseBancontactQr -- Yes (Mobile) --> OpenBancontactApp@{shape: event, label: Open Bancontact App via Intent URL}
OpenBancontactApp --> PayBancontactApp
%% Don't use QR/App - Use card
UseBancontactQr -- No --> UseSavedCardBancontact@{shape: diamond, label: Use existing card?}
%% Use existing card
UseSavedCardBancontact -- Use existing card --> UseCardCMBancontact@{ shape: procs, label: Gets existing card from CM and uses that card}
UseCardCMBancontact ---> PaymentBancontact
%% Use new card
UseSavedCardBancontact -- No --> EnterCardDetailsBancontact[Enter card details]
EnterCardDetailsBancontact --> SaveCardBancontact{Save new card?}
%% Save new card
SaveCardBancontact -- Yes --> SaveCardCMBancontact@{ shape: procs, label: Saves new card to CM and uses that card}
SaveCardCMBancontact --> PaymentBancontact@{shape: procs, label: Process payment}
%% Don't save new card
SaveCardBancontact -- No --> PaymentBancontact
PaymentBancontact --> Handle3dSecureBancontact@{shape: event, label: Handle 3D Secure and authenticate payment}
click Handle3dSecureBancontact href "#threedsecure" "Information on 3D secure"
end
PayBancontactApp ----> RedirectToValidationPage
Handle3dSecureBancontact --> RedirectToValidationPage
%% APPLE_PAY & GOOGLE_PAY - NOT IMPLEMENTED TO THE SIDE
SelectMethod -. Apple Pay & Google Pay ..-x NotImplemented@{ shape: stadium, label: Not Implemented}
subgraph gone [" "]
NotImplemented
end
style gone fill:none,stroke:none
3D Secure
Step: Handle 3D Secure and Authenticate PaymentΒΆ
This step handles the 3D Secure authentication required by most banks and credit card providers.
There are two possible types of 3D Secure flows:
- Direct Redirect URL
- Authorization via Credit Card / Bank App (iFrame)
Both types load JavaScript provided by CM Payments (formerly known as Docdata).
1. Authorization via Credit Card / Bank App (iFrame)ΒΆ
In this flow, an iFrame is loaded with a specific URL from CM Payments.
Within this iFrame, a bank-specific page is displayed that instructs the user to authorize the payment in their Credit Card or Bank App.
This page acts as a loading indicator until the authorization is completed.
Once the user authorizes the payment and returns, the iFrame receives an update and the user proceeds to the next step in the checkout process.
2. Direct Redirect URLΒΆ
In this flow, the user is directly redirected to the next checkout step after authentication.
However, this type appears to be rarely used nowadays, as nearly all banks now support the 3D Secure authorization flow described above.
Current Technical flow - Sequence diagramΒΆ
Legend
| Highlight | Color | Meaning |
|---|---|---|
| TODO | Green | Task that still needs to be completed |
| ROUGH | Fuchsia | Part that might not be complete or accurate |
| Go Back to -> | Orange | Reference to return to a previous step |
| π Link | Blue | Clickable link to another section or flow |
| π MT-X | - | Metric tracked at this step - click to view details in metrics tables |
β οΈ Warning: Metric placements (π) are approximate and may not reflect the exact line of code where the metric is written. They indicate the general step in the flow where tracking occurs.
Main flowΒΆ
Flow - click to expand
Partial flowsΒΆ
Legend - Flow Icons
- π Main flow - Primary payment flows and major checkout steps
- π Sub-flow - Nested flows within a payment method (e.g., card selection, payment processing)
- βΉοΈ Optional - Optional flows that can be skipped (e.g., remove saved card)
- β οΈ Incomplete - Flows that need verification or are marked as ROUGH/TODO
Pre-checkout - Add to cart flowΒΆ
Flow - click to expand
Cart removal metrics (not in happy flow)
When a user removes items from the cart, the following metrics are tracked:
Checkout step 1 - Authentication flowΒΆ
Flow - click to expand
Checkout step 2 - Payment selectionΒΆ
Flow - click to expand
Checkout step 3 - PaymentΒΆ
CM API Base URLs
| API | Tag | Description | Production | Sandbox |
|---|---|---|---|---|
| CM REST API | {restBaseUrl} |
Modern REST interface for payment methods like iDEAL and PayPal | https://secure.docdatapayments.com/ps/api/public/v1/merchants/{merchant_key} |
https://testsecure.docdatapayments.com/ps/api/public/v1/merchants/{merchant_key} |
| CM SOAP Order/Payment API | {soapBaseUrl} |
Legacy SOAP interface for payment operations (create, start, proceed, status) | https://secure.docdatapayments.com/ps/services/paymentservice/1_3?wsdl |
https://test.docdatapayments.com/ps/services/paymentservice/1_3?wsdl |
| CM SOAP Token API | {soapTokenBaseUrl} |
SOAP interface for managing saved payment tokens (add, list, delete) For example for saved creditcards | https://secure.docdatapayments.com/token/services/tokenservice/1_0?wsdl |
https://test.docdatapayments.com/token/services/tokenservice/1_0?wsdl |
SOAP-based payment methods:
π Bank TransferΒΆ
Flow - click to expand
β οΈ TODO: MaestroΒΆ
TODO - Maestro flow unclear
Current implementation status unclear.
Based on code analysis, Maestro should likely follow the creditcard flow (card details entry + 3D Secure authentication). However:
- Issue: Test environment does not accept Maestro test card numbers, making it impossible to verify the actual payment flow
- Database/code routing: The Maestro method in the ddp_pmethods table is active, but it is not connected to any country or lang in the ddp_method_lang and ddp_method_country
- Expected behavior: Should work similarly to Visa/Mastercard creditcard flow
Action needed: Verify actual Maestro payment flow in production or with CM Payments to confirm the implementation and document the complete flow.
π KlarnaΒΆ
Klarna notes
- Phone number required: This has already been checked in the payment selection step.
- Uses proceedWaiting: Unlike other SOAP methods, Klarna doesn't return authentication data. It uses a polling mechanism to wait for async status updates. See π Klarna Proceed Flow below.
Flow - click to expand
gender, date of birth, phone number CMS -->> B: Response with payment_cluster_key B ->> CMS: Start payment - SOAP {soapBaseUrl} β start() (DocDataPaymentApi->startPaymentWithoutToken) note over B: π MT-98 to MT-118: cm - start_payment (various) note over B: π MT-137 to MT-139: StartPaymentResponse metrics CMS -->> B: Response with redirect URL (status: REDIRECTED_FOR_AUTHENTICATION) deactivate CMS B -->> U: Redirect to Klarna hosted checkout page U ->> P: Complete payment authorization in Klarna activate P P -->> U: Redirect to /module/docdatapayments/proceed?key={payment_cluster_key} deactivate P deactivate B U ->> B: Redirect to Proceed - /module/docdatapayments/proceed?key={payment_cluster_key} U -> B: π Continue to Klarna Proceed Flow
π Creditcard (Visa&MasterCard)ΒΆ
π Card SelectionΒΆ
Card Selection Flow - click to expand
- ddp_token_key (saved card)
- card_cipher (new card) U -> B: π Continue to Payment Flow
π Payment FlowΒΆ
Payment Flow - click to expand
βΉοΈ Optional: Remove CardΒΆ
Remove Card Flow - click to expand
π Mistercash (Bancontact)ΒΆ
Bancontact (also known as Mistercash) has a unique flow compared to other payment methods. It creates the order before the user selects their payment option (saved card, new card, or QR/App). This allows the system to generate QR codes and app intent URLs for mobile payments.
Key Differences from Creditcard Flow
- Early Order Creation: Order created on page load (via
bancontactqr) instead of on payment submit - needed to generate QR code and Intent URL - QR Code Payment (Desktop): User scans QR β authorizes in app β original browser polls every 3 seconds β redirects to validation when complete
- Intent URL (Mobile): A deep link URL (e.g.
BancontactMobile://...) that opens the Bancontact app directly on mobile devices with the payment data pre-filled. After authorization, the app redirects back to the shop. - Cookie-based State:
payment_cluster_keyandorder_idstored in cookies between page load and payment start - Cancel Payment Flow: Since order is created before payment starts, Bancontact needs
bankcontactCancelPaymentto cancel the order if user backs out. Other payment methods don't need this since no order exists until payment is submitted.
π Card Selection & Order CreationΒΆ
Card Selection Flow - click to expand
π QR Code Payment Flow (Desktop)ΒΆ
QR Code Flow - click to expand
π App Payment Flow (Mobile)ΒΆ
App Flow - click to expand
π Card Payment FlowΒΆ
Card Flow - click to expand
βΉοΈ Optional: Remove Bancontact CardΒΆ
Remove Card Flow - click to expand
βΉοΈ Optional: Cancel PaymentΒΆ
Cancel Payment Flow - click to expand
REST-based payment methods:
π IDEALΒΆ
Flow - click to expand
π PayPalΒΆ
Flow - click to expand
Shared flows:
β οΈ ROUGH: 3D Secure AuthenticationΒΆ
Rough: Flow - click to expand
This flow is most likely not correct, but it is added to give an understanding to the full flow.
Checkout step 4 - Proceed, Validation and ConfirmationΒΆ
Return URL by API type
The Return URL's are set using the CM portal. So NOT from our code.
| API Type | Return URL | Payment Methods |
|---|---|---|
| SOAP | /module/docdatapayments/proceed |
Bank Transfer, Klarna, Creditcard, Bancontact |
| REST | /module/docdatapayments/validation |
iDEAL, PayPal |
π Proceed Flow (SOAP-based methods, except Klarna)ΒΆ
This flow handles the return from external payment providers for SOAP-based payment methods. The proceed endpoint processes authentication data and calls proceedPayment() to finalize the payment with CM.
Flow - click to expand
π Proceed Flow (Klarna)ΒΆ
Klarna has its own proceed flow
Klarna does not use the standard SOAP Proceed Flow above. It uses a unique proceedWaiting polling mechanism because Klarna doesn't return authentication data. Instead, Klarna updates the order status asynchronously (via webhook), so the system must poll until the order is marked as paid.
Flow - click to expand
π Validation Flow (All payment methods)ΒΆ
All payment methods end up here, either directly (REST) or via proceed (SOAP).
π Common validation startΒΆ
Flow - click to expand
Payment method validation notes
- Bank Transfer: Payment not completed at checkout. Order placed with
_PS_OS_BANKWIRE_(awaiting). Customer receives email with bank details and transfers manually. - iDEAL & PayPal: REST API - return directly to
/validation(not/proceed). NoproceedPayment()needed. - Creditcard & Bancontact: Return to
/proceedwith 3DS data (PaRes/MD), then redirect to/validation?success=1. See β οΈ 3D Secure. - Klarna: Has its own proceed flow with
proceedWaitingpolling loop. See π Klarna Proceed Flow.
π Validation: SuccessΒΆ
Flow - click to expand
amount matches (Β±10 cents) B ->> B: Set order state to _PS_OS_PAYMENT_ (paid), addPrestashopOrderHistory note over B: π MT-11: order_state_updated B -->> U: Redirect to /order-confirmation?id_cart&id_module&id_order&key U ->> B: Redirect to Order Confirmation - /order-confirmation?id_cart&id_module&id_order&key note over B: π MT-29, MT-30: page_views - order_confirmation B -->> U: Order confirmation page else note over U,B: Payment not approved or amount mismatch B -->> U: Stay on validation (log failure, no state change) end deactivate B