PHPackages                             rollpix/module-qr-landing - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. rollpix/module-qr-landing

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

rollpix/module-qr-landing
=========================

QR code landing page for physical store products — redirects scans to PDP with UTM tracking

1.0.3(3mo ago)01MITPHPPHP ~8.1.0||~8.2.0||~8.3.0

Since Mar 4Pushed 3mo agoCompare

[ Source](https://github.com/ROLLPIX/M2-QR-Landing)[ Packagist](https://packagist.org/packages/rollpix/module-qr-landing)[ RSS](/packages/rollpix-module-qr-landing/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (4)Dependencies (4)Versions (5)Used By (0)

Rollpix\_QrLanding
==================

[](#rollpix_qrlanding)

> **[Versión en español](README.es.md)**

**SPONSOR:** [www.rollpix.com](https://www.rollpix.com)

Magento 2 module that serves as a QR code landing page for physical store products. When a customer scans a QR code printed next to a product, the module records the visit and redirects to the product detail page (PDP), preserving UTM parameters for Google Analytics tracking.

Compatibility
-------------

[](#compatibility)

RequirementVersionPHP8.1 | 8.2 | 8.3Magento2.4.7 | 2.4.7-p1~p4 | 2.4.8Installation
------------

[](#installation)

### Via Composer (recommended)

[](#via-composer-recommended)

```
composer config repositories.rollpix-qr-landing vcs https://github.com/ROLLPIX/M2-qr-landing.git
composer require rollpix/module-qr-landing
bin/magento module:enable Rollpix_QrLanding
bin/magento setup:upgrade
bin/magento cache:flush
```

### Manual

[](#manual)

1. Create `app/code/Rollpix/QrLanding` and copy all repo files there
2. Run:

```
bin/magento module:enable Rollpix_QrLanding
bin/magento setup:upgrade
bin/magento cache:flush
```

Admin Configuration
-------------------

[](#admin-configuration)

**Path:** Stores &gt; Configuration &gt; Rollpix &gt; QR Landing

FieldTypeDefaultScopeEnable ModuleYes/NoYesStore ViewEnable TrackingYes/NoYesStore ViewIdentifier TypeSelectSKUStore ViewFallback URLText`/`Store ViewWhat It Does
------------

[](#what-it-does)

### QR Landing Controller (`/qr/{sku}`)

[](#qr-landing-controller-qrsku)

- Receives QR scan via URL like `/qr/ABC123?utm_source=qr_store`
- Validates that the module is enabled for the current store view
- Resolves the SKU to a product and verifies it exists and is enabled
- Records the visit in `rollpix_qr_visits` (automatic when tracking is enabled, with 5-minute deduplication per IP+SKU)
- Sanitizes all stored inputs (strip\_tags + length truncation)
- Redirects (302) to the product page, appending UTM parameters
- If the product is not found, redirects to the **Fallback URL** (defaults to homepage); shows 404 if fallback is empty

### REST API — Status (`GET /V1/rollpix-qr/status`)

[](#rest-api--status-get-v1rollpix-qrstatus)

- **Auth:** Bearer token (admin)
- **ACL:** `Rollpix_QrLanding::status`
- Returns: `{ "enabled", "tracking_enabled", "module_version", "identifier_type" }`

### REST API — Report (`GET /V1/rollpix-qr/report`)

[](#rest-api--report-get-v1rollpix-qrreport)

- **Auth:** Bearer token (admin)
- **ACL:** `Rollpix_QrLanding::report`
- **Query params:** `from`, `to` (Y-m-d), `sku`, `page`, `pageSize`
- Returns visit aggregations by SKU and daily counts

Behavior When Disabled
----------------------

[](#behavior-when-disabled)

- `/qr/{sku}` returns 404 (or redirects to fallback URL if configured)
- REST APIs still respond (they report `enabled: false`)
- No visits are recorded

Technical Architecture
----------------------

[](#technical-architecture)

```
M2-qr-landing/                          ← repo root
├── registration.php
├── composer.json
├── etc/
│   ├── module.xml
│   ├── di.xml                           (interface preferences)
│   ├── acl.xml
│   ├── config.xml
│   ├── db_schema.xml                    (rollpix_qr_visits table)
│   ├── db_schema_whitelist.json
│   ├── webapi.xml                       (status + report endpoints)
│   ├── adminhtml/
│   │   └── system.xml
│   └── frontend/
│       ├── di.xml                       (custom router registration)
│       └── routes.xml
├── Api/
│   ├── StatusInterface.php
│   └── ReportInterface.php
├── Block/Adminhtml/System/Config/
│   └── ModuleInfo.php
├── Controller/Qr/
│   └── Index.php
├── Helper/
│   └── Config.php
├── Model/
│   ├── Status.php
│   ├── Report.php
│   ├── Visit.php
│   ├── Config/Source/
│   │   └── IdentifierType.php
│   └── ResourceModel/
│       ├── Visit.php
│       └── Visit/
│           └── Collection.php
├── Router/
│   └── QrRouter.php
├── view/frontend/layout/
│   └── qr_qr_index.xml
└── i18n/
    └── es_AR.csv

```

ComponentTypePurpose`QrRouter`Custom RouterParses `/qr/{sku}` into controller params`Controller\Qr\Index`HttpGetActionInterfaceLanding logic: validate, track, redirect`Helper\Config`Config readerReads `rollpix_qrlanding/general/*``Model\Status`API implementationReturns module status`Model\Report`API implementationAggregated visit reportManual Testing Guide
--------------------

[](#manual-testing-guide)

```
# 1. Redirect works with existing SKU
curl -sI "https://yourstore.com/qr/EXISTING_SKU"
# → HTTP 302 + Location: product URL

# 2. Tracking records visit (automatic when tracking is enabled)
curl -sI "https://yourstore.com/qr/EXISTING_SKU?utm_source=test"
# → Check rollpix_qr_visits table

# 3. Non-existent SKU returns 404
curl -sI "https://yourstore.com/qr/FAKE_SKU"
# → HTTP 404

# 4. Status API
curl -s -H "Authorization: Bearer $TOKEN" "https://yourstore.com/rest/V1/rollpix-qr/status"

# 5. Report API
curl -s -H "Authorization: Bearer $TOKEN" "https://yourstore.com/rest/V1/rollpix-qr/report?from=2026-01-01"
```

Uninstall
---------

[](#uninstall)

### Via Composer

[](#via-composer)

```
bin/magento module:uninstall Rollpix_QrLanding
# or
composer remove rollpix/module-qr-landing
bin/magento setup:upgrade
```

### Manual

[](#manual-1)

```
bin/magento module:disable Rollpix_QrLanding
rm -rf app/code/Rollpix/QrLanding
bin/magento setup:upgrade
```

The `rollpix_qr_visits` table will be removed automatically on module uninstall via composer. For manual removal, drop it manually.

License
-------

[](#license)

[MIT](LICENSE)

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance79

Regular maintenance activity

Popularity1

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

4

Last Release

110d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/20818155?v=4)[Nicolas Marquevich](/maintainers/nmarquev)[@nmarquev](https://github.com/nmarquev)

---

Top Contributors

[![nmarquev](https://avatars.githubusercontent.com/u/20818155?v=4)](https://github.com/nmarquev "nmarquev (5 commits)")

### Embed Badge

![Health badge](/badges/rollpix-module-qr-landing/health.svg)

```
[![Health](https://phpackages.com/badges/rollpix-module-qr-landing/health.svg)](https://phpackages.com/packages/rollpix-module-qr-landing)
```

###  Alternatives

[run-as-root/magento2-prometheus-exporter

Magento2 Prometheus Exporter

68353.9k](/packages/run-as-root-magento2-prometheus-exporter)[baldwin/magento2-module-url-data-integrity-checker

Magento 2 module which can find potential url related problems in your catalog data

282806.2k](/packages/baldwin-magento2-module-url-data-integrity-checker)[loki/magento2-components

Core module for defining Alpine.js components with advanced AJAX features

1010.0k22](/packages/loki-magento2-components)[customgento/module-cookiebot-m2

This Magento 2 module integrates Cookiebot into your store.

2468.3k](/packages/customgento-module-cookiebot-m2)[mage-os/module-inventory-reservations-grid

Add a grid with the list of inventory reservations.

1512.6k](/packages/mage-os-module-inventory-reservations-grid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
