{"id":233291,"date":"2026-05-15T11:16:41","date_gmt":"2026-05-15T09:16:41","guid":{"rendered":"https:\/\/deinperfectday.de\/anbieter-shop-anbindung-magento\/"},"modified":"2026-05-15T11:16:41","modified_gmt":"2026-05-15T09:16:41","slug":"anbieter-shop-anbindung-magento","status":"publish","type":"page","link":"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung-magento\/","title":{"rendered":"LP Shop-Anbindung \u2014 Magento 2"},"content":{"rendered":"<div class=\"pd-scope\">        <div class=\"pd-scope\">\n        <header id=\"site-header\">\n          <div class=\"container nav\">\n            <a href=\"https:\/\/deinperfectday.de\/tr\/\" class=\"logo logo-image\" aria-label=\"Perfect Day Startseite\">\n              <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Perfect Day \u2014 Enjoy your experience\" width=\"220\" height=\"50\" fetchpriority=\"high\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/logo-dunkel.png\">\n            <\/a>\n\n            <button\n              type=\"button\"\n              class=\"mega-toggle\"\n              id=\"megaToggle\"\n              aria-expanded=\"false\"\n              aria-controls=\"mega-menu\"\n              aria-label=\"Hauptmen\u00fc \u00f6ffnen\">\n              <span class=\"mega-toggle-text\">Men\u00fc<\/span>\n              <span class=\"mega-toggle-icon\" aria-hidden=\"true\">\n                <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M4 7h16M4 12h16M4 17h16\"\/><\/svg>\n              <\/span>\n            <\/button>\n\n            <div class=\"nav-cta\">\n              <a class=\"btn btn-ghost\" href=\"https:\/\/plattform.deinperfectday.de\/\">Anmelden<\/a>\n              <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\">Jetzt Anbieter werden <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n            <\/div>\n          <\/div>\n\n          <!-- ============== MEGA MENU DRAWER ============== -->\n          <div class=\"mega-menu\" id=\"mega-menu\" hidden role=\"dialog\" aria-modal=\"false\" aria-label=\"Hauptmen\u00fc\">\n            <div class=\"container mega-grid\">\n\n              <!-- Spalte 1: F\u00fcr Anbieter -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">F\u00fcr Anbieter<\/h3>\n                <ul class=\"mega-list\">\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/stadtgutscheine\/\">\n                        <strong>Stadtgutscheine<\/strong>\n                        <span>Multi-Anbieter-Gutscheine, Teil-Einl\u00f6sung, Restguthaben automatisch.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/online-ticketing\/\">\n                        <strong>Online-Ticketing<\/strong>\n                        <span>0,49 \u20ac\/Ticket. Keine Buchungsgeb\u00fchr f\u00fcr deine G\u00e4ste.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/gutscheinbuecher\/\">\n                        <strong>Gutscheinb\u00fccher<\/strong>\n                        <span>Digital, 5-sprachig, sofortige Updates. Keine Druckkosten.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/coupons\/\">\n                        <strong>Coupons<\/strong>\n                        <span>Ab 9,90 \u20ac\/Monat. Drei Tiers, fester Preis, monatlich k\u00fcndbar.<\/span>\n                      <\/a>\n                    <\/li>\n                                    <li class=\"mega-list-divider\">\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/preise\/\">\n                      <strong>Preise &amp; Modelle<\/strong>\n                      <span>Transparente Konditionen, 10 % B\u00fcndel-Rabatt f\u00fcr drei S\u00e4ulen.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/buchen\/\">\n                      <strong>S\u00e4ulen buchen<\/strong>\n                      <span>Buchungs-Assistent: S\u00e4ulen w\u00e4hlen und verbindlich buchen.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\" class=\"mega-link-highlight\">\n                      <strong>Anbieter werden \u2192<\/strong>\n                      <span>Kostenfrei registrieren, schnelle R\u00fcckmeldung.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n              <\/div>\n\n              <!-- Spalte 2: Entdecken & Konzept -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">Entdecken<\/h3>\n                <ul class=\"mega-list\">\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/app\/\">\n                      <strong>App entdecken<\/strong>\n                      <span>Wie die Endkunden-App funktioniert.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/roi-rechner\/\">\n                      <strong>ROI-Rechner<\/strong>\n                      <span>Plattform-Kosten pro Jahr in 10 Sekunden.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/app-versionen\/\">\n                      <strong>App-Versionen<\/strong>\n                      <span>Was ist neu in der App \u2014 der Versionsverlauf.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/#prinzip\">\n                      <strong>Das Konzept<\/strong>\n                      <span>Cross-Pollination der vier S\u00e4ulen erkl\u00e4rt.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter\/\">\n                      <strong>Anbieter-Hub<\/strong>\n                      <span>\u00dcbersicht aller S\u00e4ulen mit Wettbewerbsvergleich.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/mitarbeiter-benefits\/\">\n                      <strong>Mitarbeiter-Benefits<\/strong>\n                      <span>Firmen-Abos: Stadtgutscheine automatisiert f\u00fcrs Team.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n\n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Stadtgutschein live in<\/h3>\n                <p class=\"mega-cities\">\n                  Garrel \u00b7 L\u00f6ningen \u00b7 Twistringen<br>\n                  <small>Weitere St\u00e4dte folgen 2026.<\/small>\n                <\/p>\n              <\/div>\n\n              <!-- Spalte 3: Service + Account -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">Service<\/h3>\n                <ul class=\"mega-list\">\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/hilfe\/\">\n                      <strong>Hilfe &amp; Funktionen<\/strong>\n                      <span>Alle App-Funktionen Schritt f\u00fcr Schritt erkl\u00e4rt.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/support\/\">\n                      <strong>Support<\/strong>\n                      <span>Hilfe f\u00fcr Anbieter und Kunden.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/plattform.deinperfectday.de\/\">\n                      <strong>Plattform-Login<\/strong>\n                      <span>F\u00fcr aktive Anbieter mit Account.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n\n                                  <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Sprache<\/h3>\n                  <div class=\"mega-lang-switcher\"><div class=\"trp-shortcode-switcher__wrapper\"\r\n     style=\"--bg:#ffffff;--bg-hover:#0000000d;--text:#143852;--text-hover:#1d2327;--border:1px solid #1438521a;--border-width:1px;--border-color:#1438521a;--border-radius:5px;--flag-radius:2px;--flag-size:18px;--aspect-ratio:4\/3;--font-size:14px;--transition-duration:0.2s\"\r\n     role=\"group\"\r\n     data-open-mode=\"hover\">\r\n\r\n    \r\n        <!-- ANCHOR (in-flow only; sizing\/borders; inert) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-anchor trp-open-on-hover\"\r\n             aria-hidden=\"true\"\r\n             inert\r\n             data-no-translation>\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <a class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Turkish\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/tr_TR.svg\"><span class=\"trp-language-item-name\">Turkish<\/span><\/a>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n            <\/div>\r\n\r\n        <!-- OVERLAY (positioned; interactive surface) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-overlay trp-open-on-hover\"\r\n             role=\"navigation\"\r\n             aria-label=\"Website language selector\"\r\n             data-no-translation\r\n        >\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <div class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation role=\"button\" aria-expanded=\"false\" tabindex=\"0\" aria-label=\"Change language\" aria-controls=\"trp-shortcode-dropdown-6a0c07db37274\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/tr_TR.svg\"><span class=\"trp-language-item-name\">Turkish<\/span><\/div>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n    \r\n            <div class=\"trp-switcher-dropdown-list\"\r\n                 id=\"trp-shortcode-dropdown-6a0c07db37274\"\r\n                 role=\"group\"\r\n                 aria-label=\"Available languages\"\r\n                 hidden\r\n                 inert\r\n            >\r\n                                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"German\">\r\n                            <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/de_DE.svg\">                                                            <span class=\"trp-language-item-name\" data-no-translation>German<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"English\">\r\n                            <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/en_GB.svg\">                                                            <span class=\"trp-language-item-name\" data-no-translation>English<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Spanish\">\r\n                            <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/es_ES.svg\">                                                            <span class=\"trp-language-item-name\" data-no-translation>Spanish<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Russian\">\r\n                            <img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"trp-flag-image lazyload\" alt=\"\" role=\"presentation\" loading=\"lazy\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/ru_RU.svg\">                                                            <span class=\"trp-language-item-name\" data-no-translation>Russian<\/span>\r\n                                                                                <\/a>\r\n                                                <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\n                \n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Lade die App<\/h3>\n                                  <div class=\"app-badges mega-app-badges\">\n                                          <a href=\"https:\/\/apps.apple.com\/de\/app\/id1525409363\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Apple App Store \u00f6ffnen\">\n                        <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Im Apple App Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-app-store.png\">\n                      <\/a>\n                                                              <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=koop.perfect.day&#038;utm_source=emea_Med\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Google Play Store \u00f6ffnen\">\n                        <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Im Google Play Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-play-store.png\">\n                      <\/a>\n                                      <\/div>\n                \n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Rechtliches<\/h3>\n                <ul class=\"mega-list mega-list-compact\">\n                                    <li><a href=\"https:\/\/deinperfectday.de\/impressum\/\">Impressum<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutz\/\">Datenschutz (Webseite)<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/anbieter-agb\/\">Anbieter-AGB<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/agb\/terms-of-service\/\">App-Nutzungsbedingungen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutzerklaerung\/\">App-Datenschutz<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/konto-loeschen\/\">Konto l\u00f6schen<\/a><\/li>\n                <\/ul>\n              <\/div>\n\n            <\/div>\n\n            <button type=\"button\" class=\"mega-close\" id=\"megaClose\" aria-label=\"Men\u00fc schlie\u00dfen\">\n              <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><path d=\"M6 6l12 12M6 18L18 6\"\/><\/svg>\n            <\/button>\n          <\/div>\n          <!-- End Mega Menu -->\n\n        <\/header>\n        <\/div>\n                <main id=\"main\">\n\n          <nav class=\"container breadcrumb\" aria-label=\"Brotkrumen-Navigation\">\n            <ol>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/\">Startseite<\/a><\/li>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter\/\">F\u00fcr Anbieter<\/a><\/li>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Shop-Anbindung<\/a><\/li>\n              <li><span aria-current=\"page\">Magento 2<\/span><\/li>\n            <\/ol>\n          <\/nav>\n\n          <!-- Hero -->\n          <section class=\"subhero subhero-compact et_pb_section\" aria-label=\"Einf\u00fchrung\">\n            <div class=\"container\">\n              <div class=\"reveal subhero-center\">\n                <span class=\"eyebrow\"><span class=\"pulse\" aria-hidden=\"true\"><\/span> &nbsp;Magento 2 \u00b7 25\u201335 Min \u00b7 fortgeschritten<\/span>\n                <h1>Perfect Day in Magento 2 anbinden.<\/h1>\n                <p class=\"subhero-sub\">Magento hat keine eingebaute Webhook-Funktion \u2014 du brauchst ein kleines Custom-Modul, das auf das Order-Event lauscht. Diese Anleitung richtet sich an Anbieter mit eigenem Magento-Entwickler oder einer Agentur. Ohne Dev-Hand empfehlen wir unseren Setup-Service.<\/p>\n              <\/div>\n            <\/div>\n          <\/section>\n\n                    <!-- Voraussetzungs-Callout -->\n          <div class=\"container\">\n            <div class=\"guide-callout reveal\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4M12 8h.01\"\/><\/svg>\n              <p><strong>Vorab n\u00f6tig:<\/strong> Geh einmal die <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung-vorbereitung\/\">allgemeine Vorbereitung<\/a> durch \u2014 Coupon anlegen, Anwendungspasswort holen, Webhook-URL bereitlegen. Dauert rund f\u00fcnf Minuten und gilt f\u00fcr alle Shop-Systeme.<\/p>\n            <\/div>\n          <\/div>\n          \n          <!-- Anleitungs-Abschnitte -->\n                    <section class=\"block guide-section et_pb_section\" aria-labelledby=\"sec-0\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-0\" class=\"guide-section-title\">Drei Wege im \u00dcberblick<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Welcher Weg passt zu dir?<\/h3>\n                                                              <div class=\"guide-step-body\"><ul class=\"feature-list\"><li> <strong>Custom-Modul<\/strong> selbst schreiben \u2014 rund 2\u20133 Stunden Magento-Dev. In dieser Anleitung beschrieben.<\/li><li> <strong>Webhook-Extension<\/strong> aus dem Magento Marketplace nutzen + JSON-Mapping konfigurieren.<\/li><li> <strong>Hosted-Bridge<\/strong> \u00fcber Make.com \/ Zapier \u2014 kein eigener Code.<\/li><\/ul><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"sec-1\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-1\" class=\"guide-section-title\">Weg 1 \u2014 Custom-Modul (f\u00fcr Magento-Entwickler)<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Attribut \u201epfd_coupon_id\" pro Produkt anlegen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Magento-Admin \u2192 <strong>Stores \u2192 Attribute \u2192 Product<\/strong> \u2192 <strong>\u201eAdd New Attribute\"<\/strong>. Attribute Code <code>pfd_coupon_id<\/code>, Input Type \u201eText Field\", Required \u201eNo\". Dann unter <strong>Stores \u2192 Attribute Set<\/strong> das Attribut der passenden Gruppe zuweisen. Pro Coupon-Produkt die ID im Produkt-Editor eintragen.<\/p><\/div>\n                                                          <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Modul-Struktur anlegen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Das Custom-Modul besteht aus wenigen Dateien:<\/p><\/div>\n                                        <div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">Verzeichnisstruktur<\/span><\/div><pre><code>app\/code\/DigElite\/PerfectDayConnector\/\n\u251c\u2500\u2500 etc\/\n\u2502   \u251c\u2500\u2500 module.xml\n\u2502   \u2514\u2500\u2500 events.xml\n\u251c\u2500\u2500 Observer\/\n\u2502   \u2514\u2500\u2500 OrderPaidObserver.php\n\u2514\u2500\u2500 registration.php<\/code><\/pre><\/div>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">registration.php + module.xml<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Die Registrierungs- und Modul-Definitionsdateien sind Magento-Standard. <code>registration.php<\/code> registriert das Modul, <code>etc\/module.xml<\/code> deklariert es mit <code>setup_version 1.0.0<\/code>.<\/p><\/div>\n                                                          <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">events.xml \u2014 auf das Order-Paid-Event lauschen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Verkn\u00fcpft den Observer mit dem Magento-Event <code>sales_order_payment_pay<\/code>:<\/p><\/div>\n                                        <details class=\"code-collapsible reveal\"><summary>Vollst\u00e4ndigen Code anzeigen \u2014 XML \u00b7 etc\/events.xml<\/summary><div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">XML \u00b7 etc\/events.xml<\/span><\/div><pre><code>&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;config xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\n        xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:Event\/etc\/events.xsd&quot;&gt;\n    &lt;event name=&quot;sales_order_payment_pay&quot;&gt;\n        &lt;observer name=&quot;pfd_order_paid&quot;\n                  instance=&quot;DigElite\\PerfectDayConnector\\Observer\\OrderPaidObserver&quot;\/&gt;\n    &lt;\/event&gt;\n&lt;\/config&gt;<\/code><\/pre><\/div><\/details>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">OrderPaidObserver.php \u2014 der eigentliche Versand<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Der Observer sammelt die Coupon-IDs aus den Bestellpositionen, baut den Payload und schickt ihn an den Perfect-Day-Webhook. Trag deinen Username und das Anwendungspasswort in die Konstanten ein.<\/p><\/div>\n                                        <details class=\"code-collapsible reveal\"><summary>Vollst\u00e4ndigen Code anzeigen \u2014 PHP \u00b7 Observer\/OrderPaidObserver.php<\/summary><div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">PHP \u00b7 Observer\/OrderPaidObserver.php<\/span><\/div><pre><code>&lt;?php\nnamespace DigElite\\PerfectDayConnector\\Observer;\n\nuse Magento\\Framework\\Event\\ObserverInterface;\nuse Magento\\Framework\\Event\\Observer;\nuse Magento\\Framework\\HTTP\\Client\\Curl;\n\nclass OrderPaidObserver implements ObserverInterface\n{\n    private const PFD_USER = &#039;DEIN-USER&#039;;\n    private const PFD_PWD  = &#039;xxxx xxxx xxxx xxxx xxxx xxxx&#039;;\n    private const PFD_URL  = &#039;https:\/\/plattform.deinperfectday.de\/wp-json\/perfectday\/shop\/webhook\/order&#039;;\n\n    public function __construct(private Curl $curl) {}\n\n    public function execute(Observer $observer): void\n    {\n        $order = $observer-&gt;getEvent()-&gt;getPayment()-&gt;getOrder();\n        if (!$order) return;\n\n        $items = [];\n        foreach ($order-&gt;getAllItems() as $it) {\n            $couponId = (int) $it-&gt;getProduct()-&gt;getData(&#039;pfd_coupon_id&#039;);\n            if ($couponId &lt;= 0) continue;\n            $items[] = [&#039;coupon_id&#039; =&gt; $couponId, &#039;count&#039; =&gt; (int)$it-&gt;getQtyOrdered()];\n        }\n        if (empty($items)) return;\n\n        $payload = [\n            &#039;shop_order_id&#039; =&gt; (string) $order-&gt;getIncrementId(),\n            &#039;shop_type&#039;     =&gt; &#039;magento&#039;,\n            &#039;shop_domain&#039;   =&gt; parse_url($order-&gt;getStore()-&gt;getBaseUrl(), PHP_URL_HOST),\n            &#039;customer&#039; =&gt; [\n                &#039;email&#039;  =&gt; $order-&gt;getCustomerEmail(),\n                &#039;name&#039;   =&gt; trim($order-&gt;getCustomerFirstname() . &#039; &#039; . $order-&gt;getCustomerLastname()),\n                &#039;locale&#039; =&gt; substr($order-&gt;getStore()-&gt;getLocaleCode() ?: &#039;de&#039;, 0, 2),\n            ],\n            &#039;items&#039;             =&gt; $items,\n            &#039;order_total_cents&#039; =&gt; (int) round((float) $order-&gt;getGrandTotal() * 100),\n            &#039;currency&#039;          =&gt; $order-&gt;getOrderCurrencyCode(),\n            &#039;placed_at&#039;         =&gt; $order-&gt;getCreatedAt(),\n        ];\n\n        $this-&gt;curl-&gt;setHeaders([\n            &#039;Content-Type&#039;  =&gt; &#039;application\/json&#039;,\n            &#039;Authorization&#039; =&gt; &#039;Basic &#039; . base64_encode(self::PFD_USER . &#039;:&#039; . self::PFD_PWD),\n        ]);\n        $this-&gt;curl-&gt;post(self::PFD_URL, json_encode($payload));\n    }\n}<\/code><\/pre><\/div><\/details>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Modul aktivieren<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Per CLI auf dem Server:<\/p><\/div>\n                                        <div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">Bash<\/span><\/div><pre><code>bin\/magento module:enable DigElite_PerfectDayConnector\nbin\/magento setup:upgrade\nbin\/magento cache:flush<\/code><\/pre><\/div>                  <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" aria-labelledby=\"sec-2\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-2\" class=\"guide-section-title\">Weg 2 \u2014 Marketplace-Extension + Mapping<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Webhook-Extension konfigurieren<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Mit einer kommerziellen Webhook-Extension: Trigger auf <code>Order Status Change \u2192 Paid<\/code> setzen, URL <code>https:\/\/plattform.deinperfectday.de\/wp-json\/perfectday\/shop\/webhook\/order<\/code>, Header <code>Authorization: Basic &lt;base64(user:pwd)&gt;<\/code>. Im Body-Mapping das JSON-Format nachbauen, im Item-Mapping das Custom-Attribut <code>pfd_coupon_id<\/code> auf <code>items[*].coupon_id<\/code> verkn\u00fcpfen. Die meisten Webhook-Extensions k\u00f6nnen das ohne weiteren Code.<\/p><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"sec-3\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-3\" class=\"guide-section-title\">Test-Bestellung<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Bestellung ausl\u00f6sen und pr\u00fcfen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Test-Bestellung t\u00e4tigen, bezahlen, dann im Plattform-Backoffice unter <strong>Perfect Day \u2192 Shop-Bestellungen<\/strong> den Eintrag mit <code>shop_type=magento<\/code> pr\u00fcfen. Kunden-Mailbox auf die Brand-Mail kontrollieren.<\/p><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n          \n                    <!-- Troubleshooting -->\n          <section class=\"block et_pb_section\" aria-labelledby=\"trouble-h\">\n            <div class=\"container guide-container\">\n              <div class=\"section-head reveal\" style=\"margin-bottom: 2rem;\">\n                <span class=\"eyebrow\">Wenn etwas klemmt<\/span>\n                <h2 id=\"trouble-h\">Troubleshooting.<\/h2>\n              <\/div>\n              <div class=\"faq-list\">\n                                  <details class=\"faq-item reveal\">\n                    <summary>Der Observer feuert nicht<\/summary>\n                    <div class=\"faq-body\"><p>Cache nach <code>setup:upgrade<\/code> nicht geleert? <code>bin\/magento cache:flush<\/code> ausf\u00fchren.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>Custom-Attribut bleibt leer<\/summary>\n                    <div class=\"faq-body\"><p>Das Attribut <code>pfd_coupon_id<\/code> ist keinem Attribute-Set zugewiesen. Unter <strong>Stores \u2192 Attribute Set<\/strong> nachholen.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>HTTP-Calls h\u00e4ngen \/ blockieren den Checkout<\/summary>\n                    <div class=\"faq-body\"><p>Der Magento-Cron blockiert. Verschiebe den HTTP-Call in eine Queue mit <code>Magento\\Framework\\MessageQueue\\PublisherInterface<\/code>, statt ihn synchron im Observer auszuf\u00fchren.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>HTTP 401 \/ 403 \/ 400<\/summary>\n                    <div class=\"faq-body\"><p>Gleiche Fehler-Codes wie bei den anderen Shops: 401 = Auth falsch, 403 = Coupon-ID geh\u00f6rt nicht zu deinem Account, 400 = ung\u00fcltiger JSON-Body (oft fehlende Kunden-E-Mail).<\/p><\/div>\n                  <\/details>\n                              <\/div>\n            <\/div>\n          <\/section>\n          \n                    <!-- Setup-Service -->\n          <section class=\"block et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"service-h\">\n            <div class=\"container\">\n              <div class=\"guide-service reveal\">\n                <div>\n                  <span class=\"eyebrow\">Setup-Service<\/span>\n                  <h2 id=\"service-h\" style=\"margin: 0.6rem 0;\">Lieber von uns einrichten lassen?<\/h2>\n                  <p>Magento ist der aufw\u00e4ndigste der unterst\u00fctzten Shops. Wenn du keinen Dev-Zugang hast, \u00fcbernehmen wir die Custom-Modul-Entwicklung \u2014 oder wir hosten eine Bridge, bei der du nur den Magento-API-Zugang bereitstellst.<\/p>\n                <\/div>\n                <div>\n                  <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/support\/?subject=Shop-Anbindung%20Setup-Service%3A%20Magento%202\">Setup-Service anfragen <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/section>\n          \n                    <section class=\"block faq et_pb_section\" aria-labelledby=\"faq-h\">\n            <div class=\"container\">\n              <div class=\"section-head reveal\">\n                <span class=\"eyebrow\">H\u00e4ufige Fragen<\/span>\n                <h2 id=\"faq-h\">Noch Fragen?<\/h2>\n              <\/div>\n              <div class=\"faq-list\">\n                                  <details class=\"faq-item reveal\"><summary>Brauche ich zwingend einen Entwickler?<\/summary><div class=\"faq-body\">F\u00fcr Weg 1 (Custom-Modul) ja \u2014 es ist echte Magento-Entwicklung. Weg 3 (Hosted-Bridge \u00fcber Make.com\/Zapier) geht ohne eigenen Code. Oder du nutzt unseren Setup-Service.<\/div><\/details>\n                                  <details class=\"faq-item reveal\"><summary>Warum nicht einfach ein fertiges Plugin?<\/summary><div class=\"faq-body\">Magento-Erweiterungen m\u00fcssen sehr eng auf die jeweilige Magento-Version und das Theme abgestimmt sein. Ein generisches Plugin w\u00e4re fehleranf\u00e4lliger als ein schlankes Custom-Modul oder eine Bridge. Bei genug Nachfrage pr\u00fcfen wir ein offizielles Modul.<\/div><\/details>\n                              <\/div>\n            <\/div>\n          <\/section>\n          \n          <!-- Bottom-CTA -->\n          <div class=\"container\">\n            <div class=\"big-cta reveal\">\n              <h2>Shop verbunden \u2014 und jetzt?<\/h2>\n              <p>Sobald der Webhook l\u00e4uft, erscheinen alle Bestellungen automatisch in deinem Backoffice. Brauchst du eine weitere Anbindung, geht jeder weitere Shop in wenigen Minuten.<\/p>\n              <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Zur Shop-\u00dcbersicht <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n            <\/div>\n          <\/div>\n\n        <\/main>\n                <div class=\"pd-scope\">\n        <footer aria-labelledby=\"footer-h\">\n          <h2 id=\"footer-h\" class=\"sr-only\">Footer-Navigation<\/h2>\n          <div class=\"container\">\n            <div class=\"footer-grid\">\n              <div class=\"footer-brand\">\n                <a href=\"https:\/\/deinperfectday.de\/tr\/\" class=\"logo logo-image\" aria-label=\"Perfect Day Startseite\">\n                  <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Perfect Day \u2014 Enjoy your experience\" width=\"200\" height=\"46\" loading=\"lazy\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/logo-hell.png\">\n                <\/a>\n                <p>Stadtgutscheine, Tickets, Gutscheinb\u00fccher und Coupons \u2014 eine App f\u00fcr deine Stadt. Datenschutz aus Deutschland, 5-sprachig.<\/p>\n\n                                  <div class=\"app-badges\" style=\"margin-top: 1rem;\">\n                                          <a href=\"https:\/\/apps.apple.com\/de\/app\/id1525409363\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Apple App Store \u00f6ffnen\">\n                        <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Im Apple App Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-app-store.png\">\n                      <\/a>\n                                                              <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=koop.perfect.day&#038;utm_source=emea_Med\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Google Play Store \u00f6ffnen\">\n                        <img src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"Im Google Play Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\" class=\"lazyload\" data-src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-play-store.png\">\n                      <\/a>\n                                      <\/div>\n                              <\/div>\n              <div class=\"footer-col\">\n                <h3>F\u00fcr Anbieter<\/h3>\n                <ul>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/stadtgutscheine\/\">Stadtgutscheine<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/online-ticketing\/\">Online-Ticketing<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/gutscheinbuecher\/\">Gutscheinb\u00fccher<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/coupons\/\">Coupons<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/mitarbeiter-benefits\/\">Mitarbeiter-Benefits<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Shop-Anbindung<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/preise\/\">Preise &amp; Modelle<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\">Anbieter werden<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/buchen\/\">S\u00e4ulen buchen<\/a><\/li>\n                <\/ul>\n              <\/div>\n              <div class=\"footer-col\">\n                <h3>\u00dcber &amp; Kontakt<\/h3>\n                <ul>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/app\/\">App entdecken<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/app-versionen\/\">App-Versionen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/roi-rechner\/\">ROI-Rechner<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/#prinzip\">Konzept<\/a><\/li>\n                  <li><a href=\"https:\/\/plattform.deinperfectday.de\/\">Plattform-Login<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/hilfe\/\">Hilfe &amp; Funktionen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/support\/\">Support<\/a><\/li>\n                <\/ul>\n              <\/div>\n              <div class=\"footer-col\">\n                <h3>Rechtliches<\/h3>\n                <ul>\n                                    <li><a href=\"https:\/\/deinperfectday.de\/impressum\/\">Impressum<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutz\/\">Datenschutz (Webseite)<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/anbieter-agb\/\">Anbieter-AGB<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/agb\/terms-of-service\/\">App-Nutzungsbedingungen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutzerklaerung\/\">App-Datenschutz<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/konto-loeschen\/\">Konto l\u00f6schen<\/a><\/li>\n                <\/ul>\n              <\/div>\n            <\/div>\n            <div class=\"footer-bottom\">\n              <span class=\"logo-text\">PERFECT <span class=\"teal\">DAY<\/span><\/span>\n              <span>\u00a9 2026 DigElite \u00b7 deinperfectday.de<\/span>\n            <\/div>\n            <p class=\"footer-cities\">Stadtgutschein aktuell live in: Garrel \u00b7 L\u00f6ningen \u00b7 Twistringen \u2014 weitere St\u00e4dte folgen 2026.<\/p>\n            <p class=\"footer-vat\">Alle genannten Preise verstehen sich zzgl. der gesetzlichen Mehrwertsteuer.<\/p>\n          <\/div>\n        <\/footer>\n        <\/div>\n        <\/div>\n","protected":false},"excerpt":{"rendered":"<div class=\"pd-scope\">        <div class=\"pd-scope\">\n        <header id=\"site-header\">\n          <div class=\"container nav\">\n            <a href=\"https:\/\/deinperfectday.de\/tr\/\" class=\"logo logo-image\" aria-label=\"Perfect Day Startseite\">\n              <img\n                src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/logo-dunkel.png\"\n                alt=\"Perfect Day \u2014 Enjoy your experience\"\n                width=\"220\" height=\"50\"\n                fetchpriority=\"high\" decoding=\"async\">\n            <\/a>\n\n            <button\n              type=\"button\"\n              class=\"mega-toggle\"\n              id=\"megaToggle\"\n              aria-expanded=\"false\"\n              aria-controls=\"mega-menu\"\n              aria-label=\"Hauptmen\u00fc \u00f6ffnen\">\n              <span class=\"mega-toggle-text\">Men\u00fc<\/span>\n              <span class=\"mega-toggle-icon\" aria-hidden=\"true\">\n                <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M4 7h16M4 12h16M4 17h16\"\/><\/svg>\n              <\/span>\n            <\/button>\n\n            <div class=\"nav-cta\">\n              <a class=\"btn btn-ghost\" href=\"https:\/\/plattform.deinperfectday.de\/\">Anmelden<\/a>\n              <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\">Jetzt Anbieter werden <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n            <\/div>\n          <\/div>\n\n          <!-- ============== MEGA MENU DRAWER ============== -->\n          <div class=\"mega-menu\" id=\"mega-menu\" hidden role=\"dialog\" aria-modal=\"false\" aria-label=\"Hauptmen\u00fc\">\n            <div class=\"container mega-grid\">\n\n              <!-- Spalte 1: F\u00fcr Anbieter -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">F\u00fcr Anbieter<\/h3>\n                <ul class=\"mega-list\">\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/stadtgutscheine\/\">\n                        <strong>Stadtgutscheine<\/strong>\n                        <span>Multi-Anbieter-Gutscheine, Teil-Einl\u00f6sung, Restguthaben automatisch.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/online-ticketing\/\">\n                        <strong>Online-Ticketing<\/strong>\n                        <span>0,49 \u20ac\/Ticket. Keine Buchungsgeb\u00fchr f\u00fcr deine G\u00e4ste.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/gutscheinbuecher\/\">\n                        <strong>Gutscheinb\u00fccher<\/strong>\n                        <span>Digital, 5-sprachig, sofortige Updates. Keine Druckkosten.<\/span>\n                      <\/a>\n                    <\/li>\n                                      <li>\n                      <a href=\"https:\/\/deinperfectday.de\/tr\/coupons\/\">\n                        <strong>Coupons<\/strong>\n                        <span>Ab 9,90 \u20ac\/Monat. Drei Tiers, fester Preis, monatlich k\u00fcndbar.<\/span>\n                      <\/a>\n                    <\/li>\n                                    <li class=\"mega-list-divider\">\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/preise\/\">\n                      <strong>Preise &amp; Modelle<\/strong>\n                      <span>Transparente Konditionen, 10 % B\u00fcndel-Rabatt f\u00fcr drei S\u00e4ulen.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/buchen\/\">\n                      <strong>S\u00e4ulen buchen<\/strong>\n                      <span>Buchungs-Assistent: S\u00e4ulen w\u00e4hlen und verbindlich buchen.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\" class=\"mega-link-highlight\">\n                      <strong>Anbieter werden \u2192<\/strong>\n                      <span>Kostenfrei registrieren, schnelle R\u00fcckmeldung.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n              <\/div>\n\n              <!-- Spalte 2: Entdecken & Konzept -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">Entdecken<\/h3>\n                <ul class=\"mega-list\">\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/app\/\">\n                      <strong>App entdecken<\/strong>\n                      <span>Wie die Endkunden-App funktioniert.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/roi-rechner\/\">\n                      <strong>ROI-Rechner<\/strong>\n                      <span>Plattform-Kosten pro Jahr in 10 Sekunden.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/app-versionen\/\">\n                      <strong>App-Versionen<\/strong>\n                      <span>Was ist neu in der App \u2014 der Versionsverlauf.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/#prinzip\">\n                      <strong>Das Konzept<\/strong>\n                      <span>Cross-Pollination der vier S\u00e4ulen erkl\u00e4rt.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter\/\">\n                      <strong>Anbieter-Hub<\/strong>\n                      <span>\u00dcbersicht aller S\u00e4ulen mit Wettbewerbsvergleich.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/mitarbeiter-benefits\/\">\n                      <strong>Mitarbeiter-Benefits<\/strong>\n                      <span>Firmen-Abos: Stadtgutscheine automatisiert f\u00fcrs Team.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n\n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Stadtgutschein live in<\/h3>\n                <p class=\"mega-cities\">\n                  Garrel \u00b7 L\u00f6ningen \u00b7 Twistringen<br>\n                  <small>Weitere St\u00e4dte folgen 2026.<\/small>\n                <\/p>\n              <\/div>\n\n              <!-- Spalte 3: Service + Account -->\n              <div class=\"mega-col\">\n                <h3 class=\"mega-col-title\">Service<\/h3>\n                <ul class=\"mega-list\">\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/tr\/hilfe\/\">\n                      <strong>Hilfe &amp; Funktionen<\/strong>\n                      <span>Alle App-Funktionen Schritt f\u00fcr Schritt erkl\u00e4rt.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/deinperfectday.de\/support\/\">\n                      <strong>Support<\/strong>\n                      <span>Hilfe f\u00fcr Anbieter und Kunden.<\/span>\n                    <\/a>\n                  <\/li>\n                  <li>\n                    <a href=\"https:\/\/plattform.deinperfectday.de\/\">\n                      <strong>Plattform-Login<\/strong>\n                      <span>F\u00fcr aktive Anbieter mit Account.<\/span>\n                    <\/a>\n                  <\/li>\n                <\/ul>\n\n                                  <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Sprache<\/h3>\n                  <div class=\"mega-lang-switcher\"><div class=\"trp-shortcode-switcher__wrapper\"\r\n     style=\"--bg:#ffffff;--bg-hover:#0000000d;--text:#143852;--text-hover:#1d2327;--border:1px solid #1438521a;--border-width:1px;--border-color:#1438521a;--border-radius:5px;--flag-radius:2px;--flag-size:18px;--aspect-ratio:4\/3;--font-size:14px;--transition-duration:0.2s\"\r\n     role=\"group\"\r\n     data-open-mode=\"hover\">\r\n\r\n    \r\n        <!-- ANCHOR (in-flow only; sizing\/borders; inert) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-anchor trp-open-on-hover\"\r\n             aria-hidden=\"true\"\r\n             inert\r\n             data-no-translation>\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <a class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Turkish\"><img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/tr_TR.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/><span class=\"trp-language-item-name\">Turkish<\/span><\/a>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n            <\/div>\r\n\r\n        <!-- OVERLAY (positioned; interactive surface) -->\r\n        <div class=\"trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-overlay trp-open-on-hover\"\r\n             role=\"navigation\"\r\n             aria-label=\"Website language selector\"\r\n             data-no-translation\r\n        >\r\n                <div class=\"trp-current-language-item__wrapper\">\r\n        <div class=\"trp-language-item trp-language-item__default trp-language-item__current\" data-no-translation role=\"button\" aria-expanded=\"false\" tabindex=\"0\" aria-label=\"Change language\" aria-controls=\"trp-shortcode-dropdown-6a0c07db37274\"><img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/tr_TR.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/><span class=\"trp-language-item-name\">Turkish<\/span><\/div>                    <svg class=\"trp-shortcode-arrow\" width=\"20\" height=\"20\" viewBox=\"0 0 20 21\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M5 8L10 13L15 8\" stroke=\"var(--text)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n            <\/div>\r\n    \r\n            <div class=\"trp-switcher-dropdown-list\"\r\n                 id=\"trp-shortcode-dropdown-6a0c07db37274\"\r\n                 role=\"group\"\r\n                 aria-label=\"Available languages\"\r\n                 hidden\r\n                 inert\r\n            >\r\n                                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"German\">\r\n                            <img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/de_DE.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/>                                                            <span class=\"trp-language-item-name\" data-no-translation>German<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"English\">\r\n                            <img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/en_GB.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/>                                                            <span class=\"trp-language-item-name\" data-no-translation>English<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Spanish\">\r\n                            <img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/es_ES.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/>                                                            <span class=\"trp-language-item-name\" data-no-translation>Spanish<\/span>\r\n                                                                                <\/a>\r\n                                            <a class=\"trp-language-item\" href=\"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291#TRPLINKPROCESSED\" title=\"Russian\">\r\n                            <img decoding=\"async\" src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/translatepress-multilingual\/assets\/flags\/4x3\/ru_RU.svg\" class=\"trp-flag-image\" alt=\"\" role=\"presentation\" loading=\"lazy\" \/>                                                            <span class=\"trp-language-item-name\" data-no-translation>Russian<\/span>\r\n                                                                                <\/a>\r\n                                                <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\n                \n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Lade die App<\/h3>\n                                  <div class=\"app-badges mega-app-badges\">\n                                          <a href=\"https:\/\/apps.apple.com\/de\/app\/id1525409363\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Apple App Store \u00f6ffnen\">\n                        <img src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-app-store.png\" alt=\"Im Apple App Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\">\n                      <\/a>\n                                                              <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=koop.perfect.day&#038;utm_source=emea_Med\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Google Play Store \u00f6ffnen\">\n                        <img src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-play-store.png\" alt=\"Im Google Play Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\">\n                      <\/a>\n                                      <\/div>\n                \n                <h3 class=\"mega-col-title\" style=\"margin-top: 1.6rem;\">Rechtliches<\/h3>\n                <ul class=\"mega-list mega-list-compact\">\n                                    <li><a href=\"https:\/\/deinperfectday.de\/impressum\/\">Impressum<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutz\/\">Datenschutz (Webseite)<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/anbieter-agb\/\">Anbieter-AGB<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/agb\/terms-of-service\/\">App-Nutzungsbedingungen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutzerklaerung\/\">App-Datenschutz<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/konto-loeschen\/\">Konto l\u00f6schen<\/a><\/li>\n                <\/ul>\n              <\/div>\n\n            <\/div>\n\n            <button type=\"button\" class=\"mega-close\" id=\"megaClose\" aria-label=\"Men\u00fc schlie\u00dfen\">\n              <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><path d=\"M6 6l12 12M6 18L18 6\"\/><\/svg>\n            <\/button>\n          <\/div>\n          <!-- End Mega Menu -->\n\n        <\/header>\n        <\/div>\n                <main id=\"main\">\n\n          <nav class=\"container breadcrumb\" aria-label=\"Brotkrumen-Navigation\">\n            <ol>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/\">Startseite<\/a><\/li>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter\/\">F\u00fcr Anbieter<\/a><\/li>\n              <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Shop-Anbindung<\/a><\/li>\n              <li><span aria-current=\"page\">Magento 2<\/span><\/li>\n            <\/ol>\n          <\/nav>\n\n          <!-- Hero -->\n          <section class=\"subhero subhero-compact et_pb_section\" aria-label=\"Einf\u00fchrung\">\n            <div class=\"container\">\n              <div class=\"reveal subhero-center\">\n                <span class=\"eyebrow\"><span class=\"pulse\" aria-hidden=\"true\"><\/span> &nbsp;Magento 2 \u00b7 25\u201335 Min \u00b7 fortgeschritten<\/span>\n                <h1>Perfect Day in Magento 2 anbinden.<\/h1>\n                <p class=\"subhero-sub\">Magento hat keine eingebaute Webhook-Funktion \u2014 du brauchst ein kleines Custom-Modul, das auf das Order-Event lauscht. Diese Anleitung richtet sich an Anbieter mit eigenem Magento-Entwickler oder einer Agentur. Ohne Dev-Hand empfehlen wir unseren Setup-Service.<\/p>\n              <\/div>\n            <\/div>\n          <\/section>\n\n                    <!-- Voraussetzungs-Callout -->\n          <div class=\"container\">\n            <div class=\"guide-callout reveal\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4M12 8h.01\"\/><\/svg>\n              <p><strong>Vorab n\u00f6tig:<\/strong> Geh einmal die <a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung-vorbereitung\/\">allgemeine Vorbereitung<\/a> durch \u2014 Coupon anlegen, Anwendungspasswort holen, Webhook-URL bereitlegen. Dauert rund f\u00fcnf Minuten und gilt f\u00fcr alle Shop-Systeme.<\/p>\n            <\/div>\n          <\/div>\n          \n          <!-- Anleitungs-Abschnitte -->\n                    <section class=\"block guide-section et_pb_section\" aria-labelledby=\"sec-0\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-0\" class=\"guide-section-title\">Drei Wege im \u00dcberblick<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Welcher Weg passt zu dir?<\/h3>\n                                                              <div class=\"guide-step-body\"><ul class=\"feature-list\"><li> <strong>Custom-Modul<\/strong> selbst schreiben \u2014 rund 2\u20133 Stunden Magento-Dev. In dieser Anleitung beschrieben.<\/li><li> <strong>Webhook-Extension<\/strong> aus dem Magento Marketplace nutzen + JSON-Mapping konfigurieren.<\/li><li> <strong>Hosted-Bridge<\/strong> \u00fcber Make.com \/ Zapier \u2014 kein eigener Code.<\/li><\/ul><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"sec-1\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-1\" class=\"guide-section-title\">Weg 1 \u2014 Custom-Modul (f\u00fcr Magento-Entwickler)<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Attribut \u201epfd_coupon_id\" pro Produkt anlegen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Magento-Admin \u2192 <strong>Stores \u2192 Attribute \u2192 Product<\/strong> \u2192 <strong>\u201eAdd New Attribute\"<\/strong>. Attribute Code <code>pfd_coupon_id<\/code>, Input Type \u201eText Field\", Required \u201eNo\". Dann unter <strong>Stores \u2192 Attribute Set<\/strong> das Attribut der passenden Gruppe zuweisen. Pro Coupon-Produkt die ID im Produkt-Editor eintragen.<\/p><\/div>\n                                                          <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Modul-Struktur anlegen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Das Custom-Modul besteht aus wenigen Dateien:<\/p><\/div>\n                                        <div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">Verzeichnisstruktur<\/span><\/div><pre><code>app\/code\/DigElite\/PerfectDayConnector\/\n\u251c\u2500\u2500 etc\/\n\u2502   \u251c\u2500\u2500 module.xml\n\u2502   \u2514\u2500\u2500 events.xml\n\u251c\u2500\u2500 Observer\/\n\u2502   \u2514\u2500\u2500 OrderPaidObserver.php\n\u2514\u2500\u2500 registration.php<\/code><\/pre><\/div>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">registration.php + module.xml<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Die Registrierungs- und Modul-Definitionsdateien sind Magento-Standard. <code>registration.php<\/code> registriert das Modul, <code>etc\/module.xml<\/code> deklariert es mit <code>setup_version 1.0.0<\/code>.<\/p><\/div>\n                                                          <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">events.xml \u2014 auf das Order-Paid-Event lauschen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Verkn\u00fcpft den Observer mit dem Magento-Event <code>sales_order_payment_pay<\/code>:<\/p><\/div>\n                                        <details class=\"code-collapsible reveal\"><summary>Vollst\u00e4ndigen Code anzeigen \u2014 XML \u00b7 etc\/events.xml<\/summary><div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">XML \u00b7 etc\/events.xml<\/span><\/div><pre><code>&lt;?xml version=&quot;1.0&quot;?&gt;\n&lt;config xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\n        xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:Event\/etc\/events.xsd&quot;&gt;\n    &lt;event name=&quot;sales_order_payment_pay&quot;&gt;\n        &lt;observer name=&quot;pfd_order_paid&quot;\n                  instance=&quot;DigElite\\PerfectDayConnector\\Observer\\OrderPaidObserver&quot;\/&gt;\n    &lt;\/event&gt;\n&lt;\/config&gt;<\/code><\/pre><\/div><\/details>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">OrderPaidObserver.php \u2014 der eigentliche Versand<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Der Observer sammelt die Coupon-IDs aus den Bestellpositionen, baut den Payload und schickt ihn an den Perfect-Day-Webhook. Trag deinen Username und das Anwendungspasswort in die Konstanten ein.<\/p><\/div>\n                                        <details class=\"code-collapsible reveal\"><summary>Vollst\u00e4ndigen Code anzeigen \u2014 PHP \u00b7 Observer\/OrderPaidObserver.php<\/summary><div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">PHP \u00b7 Observer\/OrderPaidObserver.php<\/span><\/div><pre><code>&lt;?php\nnamespace DigElite\\PerfectDayConnector\\Observer;\n\nuse Magento\\Framework\\Event\\ObserverInterface;\nuse Magento\\Framework\\Event\\Observer;\nuse Magento\\Framework\\HTTP\\Client\\Curl;\n\nclass OrderPaidObserver implements ObserverInterface\n{\n    private const PFD_USER = &#039;DEIN-USER&#039;;\n    private const PFD_PWD  = &#039;xxxx xxxx xxxx xxxx xxxx xxxx&#039;;\n    private const PFD_URL  = &#039;https:\/\/plattform.deinperfectday.de\/wp-json\/perfectday\/shop\/webhook\/order&#039;;\n\n    public function __construct(private Curl $curl) {}\n\n    public function execute(Observer $observer): void\n    {\n        $order = $observer-&gt;getEvent()-&gt;getPayment()-&gt;getOrder();\n        if (!$order) return;\n\n        $items = [];\n        foreach ($order-&gt;getAllItems() as $it) {\n            $couponId = (int) $it-&gt;getProduct()-&gt;getData(&#039;pfd_coupon_id&#039;);\n            if ($couponId &lt;= 0) continue;\n            $items[] = [&#039;coupon_id&#039; =&gt; $couponId, &#039;count&#039; =&gt; (int)$it-&gt;getQtyOrdered()];\n        }\n        if (empty($items)) return;\n\n        $payload = [\n            &#039;shop_order_id&#039; =&gt; (string) $order-&gt;getIncrementId(),\n            &#039;shop_type&#039;     =&gt; &#039;magento&#039;,\n            &#039;shop_domain&#039;   =&gt; parse_url($order-&gt;getStore()-&gt;getBaseUrl(), PHP_URL_HOST),\n            &#039;customer&#039; =&gt; [\n                &#039;email&#039;  =&gt; $order-&gt;getCustomerEmail(),\n                &#039;name&#039;   =&gt; trim($order-&gt;getCustomerFirstname() . &#039; &#039; . $order-&gt;getCustomerLastname()),\n                &#039;locale&#039; =&gt; substr($order-&gt;getStore()-&gt;getLocaleCode() ?: &#039;de&#039;, 0, 2),\n            ],\n            &#039;items&#039;             =&gt; $items,\n            &#039;order_total_cents&#039; =&gt; (int) round((float) $order-&gt;getGrandTotal() * 100),\n            &#039;currency&#039;          =&gt; $order-&gt;getOrderCurrencyCode(),\n            &#039;placed_at&#039;         =&gt; $order-&gt;getCreatedAt(),\n        ];\n\n        $this-&gt;curl-&gt;setHeaders([\n            &#039;Content-Type&#039;  =&gt; &#039;application\/json&#039;,\n            &#039;Authorization&#039; =&gt; &#039;Basic &#039; . base64_encode(self::PFD_USER . &#039;:&#039; . self::PFD_PWD),\n        ]);\n        $this-&gt;curl-&gt;post(self::PFD_URL, json_encode($payload));\n    }\n}<\/code><\/pre><\/div><\/details>                  <\/li>\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Modul aktivieren<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Per CLI auf dem Server:<\/p><\/div>\n                                        <div class=\"code-block\"><div class=\"code-block-bar\"><span class=\"code-lang\">Bash<\/span><\/div><pre><code>bin\/magento module:enable DigElite_PerfectDayConnector\nbin\/magento setup:upgrade\nbin\/magento cache:flush<\/code><\/pre><\/div>                  <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" aria-labelledby=\"sec-2\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-2\" class=\"guide-section-title\">Weg 2 \u2014 Marketplace-Extension + Mapping<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Webhook-Extension konfigurieren<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Mit einer kommerziellen Webhook-Extension: Trigger auf <code>Order Status Change \u2192 Paid<\/code> setzen, URL <code>https:\/\/plattform.deinperfectday.de\/wp-json\/perfectday\/shop\/webhook\/order<\/code>, Header <code>Authorization: Basic &lt;base64(user:pwd)&gt;<\/code>. Im Body-Mapping das JSON-Format nachbauen, im Item-Mapping das Custom-Attribut <code>pfd_coupon_id<\/code> auf <code>items[*].coupon_id<\/code> verkn\u00fcpfen. Die meisten Webhook-Extensions k\u00f6nnen das ohne weiteren Code.<\/p><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n                    <section class=\"block guide-section et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"sec-3\">\n            <div class=\"container guide-container\">\n              <h2 id=\"sec-3\" class=\"guide-section-title\">Test-Bestellung<\/h2>\n                                          <ol class=\"guide-steps\">\n                                  <li class=\"guide-step reveal\">\n                                          <h3 class=\"guide-step-title\">Bestellung ausl\u00f6sen und pr\u00fcfen<\/h3>\n                                                              <div class=\"guide-step-body\"><p>Test-Bestellung t\u00e4tigen, bezahlen, dann im Plattform-Backoffice unter <strong>Perfect Day \u2192 Shop-Bestellungen<\/strong> den Eintrag mit <code>shop_type=magento<\/code> pr\u00fcfen. Kunden-Mailbox auf die Brand-Mail kontrollieren.<\/p><\/div>\n                                                          <\/li>\n                              <\/ol>\n                          <\/div>\n          <\/section>\n          \n                    <!-- Troubleshooting -->\n          <section class=\"block et_pb_section\" aria-labelledby=\"trouble-h\">\n            <div class=\"container guide-container\">\n              <div class=\"section-head reveal\" style=\"margin-bottom: 2rem;\">\n                <span class=\"eyebrow\">Wenn etwas klemmt<\/span>\n                <h2 id=\"trouble-h\">Troubleshooting.<\/h2>\n              <\/div>\n              <div class=\"faq-list\">\n                                  <details class=\"faq-item reveal\">\n                    <summary>Der Observer feuert nicht<\/summary>\n                    <div class=\"faq-body\"><p>Cache nach <code>setup:upgrade<\/code> nicht geleert? <code>bin\/magento cache:flush<\/code> ausf\u00fchren.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>Custom-Attribut bleibt leer<\/summary>\n                    <div class=\"faq-body\"><p>Das Attribut <code>pfd_coupon_id<\/code> ist keinem Attribute-Set zugewiesen. Unter <strong>Stores \u2192 Attribute Set<\/strong> nachholen.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>HTTP-Calls h\u00e4ngen \/ blockieren den Checkout<\/summary>\n                    <div class=\"faq-body\"><p>Der Magento-Cron blockiert. Verschiebe den HTTP-Call in eine Queue mit <code>Magento\\Framework\\MessageQueue\\PublisherInterface<\/code>, statt ihn synchron im Observer auszuf\u00fchren.<\/p><\/div>\n                  <\/details>\n                                  <details class=\"faq-item reveal\">\n                    <summary>HTTP 401 \/ 403 \/ 400<\/summary>\n                    <div class=\"faq-body\"><p>Gleiche Fehler-Codes wie bei den anderen Shops: 401 = Auth falsch, 403 = Coupon-ID geh\u00f6rt nicht zu deinem Account, 400 = ung\u00fcltiger JSON-Body (oft fehlende Kunden-E-Mail).<\/p><\/div>\n                  <\/details>\n                              <\/div>\n            <\/div>\n          <\/section>\n          \n                    <!-- Setup-Service -->\n          <section class=\"block et_pb_section\" style=\"background: var(--paper);\" aria-labelledby=\"service-h\">\n            <div class=\"container\">\n              <div class=\"guide-service reveal\">\n                <div>\n                  <span class=\"eyebrow\">Setup-Service<\/span>\n                  <h2 id=\"service-h\" style=\"margin: 0.6rem 0;\">Lieber von uns einrichten lassen?<\/h2>\n                  <p>Magento ist der aufw\u00e4ndigste der unterst\u00fctzten Shops. Wenn du keinen Dev-Zugang hast, \u00fcbernehmen wir die Custom-Modul-Entwicklung \u2014 oder wir hosten eine Bridge, bei der du nur den Magento-API-Zugang bereitstellst.<\/p>\n                <\/div>\n                <div>\n                  <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/support\/?subject=Shop-Anbindung%20Setup-Service%3A%20Magento%202\">Setup-Service anfragen <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/section>\n          \n                    <section class=\"block faq et_pb_section\" aria-labelledby=\"faq-h\">\n            <div class=\"container\">\n              <div class=\"section-head reveal\">\n                <span class=\"eyebrow\">H\u00e4ufige Fragen<\/span>\n                <h2 id=\"faq-h\">Noch Fragen?<\/h2>\n              <\/div>\n              <div class=\"faq-list\">\n                                  <details class=\"faq-item reveal\"><summary>Brauche ich zwingend einen Entwickler?<\/summary><div class=\"faq-body\">F\u00fcr Weg 1 (Custom-Modul) ja \u2014 es ist echte Magento-Entwicklung. Weg 3 (Hosted-Bridge \u00fcber Make.com\/Zapier) geht ohne eigenen Code. Oder du nutzt unseren Setup-Service.<\/div><\/details>\n                                  <details class=\"faq-item reveal\"><summary>Warum nicht einfach ein fertiges Plugin?<\/summary><div class=\"faq-body\">Magento-Erweiterungen m\u00fcssen sehr eng auf die jeweilige Magento-Version und das Theme abgestimmt sein. Ein generisches Plugin w\u00e4re fehleranf\u00e4lliger als ein schlankes Custom-Modul oder eine Bridge. Bei genug Nachfrage pr\u00fcfen wir ein offizielles Modul.<\/div><\/details>\n                              <\/div>\n            <\/div>\n          <\/section>\n          \n          <!-- Bottom-CTA -->\n          <div class=\"container\">\n            <div class=\"big-cta reveal\">\n              <h2>Shop verbunden \u2014 und jetzt?<\/h2>\n              <p>Sobald der Webhook l\u00e4uft, erscheinen alle Bestellungen automatisch in deinem Backoffice. Brauchst du eine weitere Anbindung, geht jeder weitere Shop in wenigen Minuten.<\/p>\n              <a class=\"btn btn-primary\" href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Zur Shop-\u00dcbersicht <span class=\"arrow\" aria-hidden=\"true\">\u2192<\/span><\/a>\n            <\/div>\n          <\/div>\n\n        <\/main>\n                <div class=\"pd-scope\">\n        <footer aria-labelledby=\"footer-h\">\n          <h2 id=\"footer-h\" class=\"sr-only\">Footer-Navigation<\/h2>\n          <div class=\"container\">\n            <div class=\"footer-grid\">\n              <div class=\"footer-brand\">\n                <a href=\"https:\/\/deinperfectday.de\/tr\/\" class=\"logo logo-image\" aria-label=\"Perfect Day Startseite\">\n                  <img\n                    src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/logo-hell.png\"\n                    alt=\"Perfect Day \u2014 Enjoy your experience\"\n                    width=\"200\" height=\"46\"\n                    loading=\"lazy\" decoding=\"async\">\n                <\/a>\n                <p>Stadtgutscheine, Tickets, Gutscheinb\u00fccher und Coupons \u2014 eine App f\u00fcr deine Stadt. Datenschutz aus Deutschland, 5-sprachig.<\/p>\n\n                                  <div class=\"app-badges\" style=\"margin-top: 1rem;\">\n                                          <a href=\"https:\/\/apps.apple.com\/de\/app\/id1525409363\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Apple App Store \u00f6ffnen\">\n                        <img src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-app-store.png\" alt=\"Im Apple App Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\">\n                      <\/a>\n                                                              <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=koop.perfect.day&#038;utm_source=emea_Med\" class=\"app-badge\" target=\"_blank\" rel=\"noopener\" aria-label=\"Perfect Day im Google Play Store \u00f6ffnen\">\n                        <img src=\"https:\/\/deinperfectday.de\/wp-content\/plugins\/perfectday-pages-plugin\/assets\/images\/icons\/badge-play-store.png\" alt=\"Im Google Play Store laden\" width=\"135\" height=\"40\" loading=\"lazy\" decoding=\"async\">\n                      <\/a>\n                                      <\/div>\n                              <\/div>\n              <div class=\"footer-col\">\n                <h3>F\u00fcr Anbieter<\/h3>\n                <ul>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/stadtgutscheine\/\">Stadtgutscheine<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/online-ticketing\/\">Online-Ticketing<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/gutscheinbuecher\/\">Gutscheinb\u00fccher<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/coupons\/\">Coupons<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/mitarbeiter-benefits\/\">Mitarbeiter-Benefits<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-shop-anbindung\/\">Shop-Anbindung<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/preise\/\">Preise &amp; Modelle<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/anbieter-werden\/\">Anbieter werden<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/buchen\/\">S\u00e4ulen buchen<\/a><\/li>\n                <\/ul>\n              <\/div>\n              <div class=\"footer-col\">\n                <h3>\u00dcber &amp; Kontakt<\/h3>\n                <ul>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/app\/\">App entdecken<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/app-versionen\/\">App-Versionen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/roi-rechner\/\">ROI-Rechner<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/#prinzip\">Konzept<\/a><\/li>\n                  <li><a href=\"https:\/\/plattform.deinperfectday.de\/\">Plattform-Login<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/hilfe\/\">Hilfe &amp; Funktionen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/support\/\">Support<\/a><\/li>\n                <\/ul>\n              <\/div>\n              <div class=\"footer-col\">\n                <h3>Rechtliches<\/h3>\n                <ul>\n                                    <li><a href=\"https:\/\/deinperfectday.de\/impressum\/\">Impressum<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutz\/\">Datenschutz (Webseite)<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/anbieter-agb\/\">Anbieter-AGB<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/agb\/terms-of-service\/\">App-Nutzungsbedingungen<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/datenschutzerklaerung\/\">App-Datenschutz<\/a><\/li>\n                  <li><a href=\"https:\/\/deinperfectday.de\/tr\/konto-loeschen\/\">Konto l\u00f6schen<\/a><\/li>\n                <\/ul>\n              <\/div>\n            <\/div>\n            <div class=\"footer-bottom\">\n              <span class=\"logo-text\">PERFECT <span class=\"teal\">DAY<\/span><\/span>\n              <span>\u00a9 2026 DigElite \u00b7 deinperfectday.de<\/span>\n            <\/div>\n            <p class=\"footer-cities\">Stadtgutschein aktuell live in: Garrel \u00b7 L\u00f6ningen \u00b7 Twistringen \u2014 weitere St\u00e4dte folgen 2026.<\/p>\n            <p class=\"footer-vat\">Alle genannten Preise verstehen sich zzgl. der gesetzlichen Mehrwertsteuer.<\/p>\n          <\/div>\n        <\/footer>\n        <\/div>\n        <\/div>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-template-blank.php","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-233291","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/comments?post=233291"}],"version-history":[{"count":0,"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/pages\/233291\/revisions"}],"wp:attachment":[{"href":"https:\/\/deinperfectday.de\/tr\/wp-json\/wp\/v2\/media?parent=233291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}