{"id":17769,"date":"2026-08-05T11:42:38","date_gmt":"2026-08-05T05:57:38","guid":{"rendered":"https:\/\/www.bay20.com\/de\/?p=17769"},"modified":"2026-08-05T11:49:31","modified_gmt":"2026-08-05T06:04:31","slug":"wie-fuegt-man-in-bigcommerce-beim-bezahlvorgang-round-up-spenden-hinzu","status":"publish","type":"post","link":"https:\/\/www.bay20.com\/de\/wie-fuegt-man-in-bigcommerce-beim-bezahlvorgang-round-up-spenden-hinzu\/","title":{"rendered":"Wie f\u00fcgt man in BigCommerce beim Bezahlvorgang \u201eRound-Up\u201c-Spenden hinzu?"},"content":{"rendered":"\n<p>Das haben Sie wahrscheinlich schon einmal an der Kasse eines Supermarkts gesehen. Ihr Gesamtbetrag betr\u00e4gt 47,35 $, und das System fragt Sie, ob Sie auf 48,00 $ aufrunden m\u00f6chten, wobei die zus\u00e4tzlichen 65 Cent an eine Wohlt\u00e4tigkeitsorganisation gehen. Es ist eine kleine Bitte, der man leicht zustimmen kann, und im Laufe der Zeit kommt dabei eine ordentliche Summe zusammen. Das Gleiche k\u00f6nnen Sie auch in einem <strong><a href=\"https:\/\/www.bay20.com\/de\/bigcommerce-entwicklungsunternehmen\/\" target=\"_blank\" rel=\"noopener\" title=\"\">BigCommerce<\/a><\/strong>-Shop umsetzen. Diese Funktion ist zwar nicht standardm\u00e4\u00dfig integriert, l\u00e4sst sich aber problemlos hinzuf\u00fcgen. Sie ben\u00f6tigen lediglich eine kleine Backend-Funktion und die Server-to-Server (S2S) Cart-API von BigCommerce, damit es funktioniert. So habe ich es umgesetzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>So funktioniert es, Schritt f\u00fcr Schritt<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Kunde gelangt zur Kasse, und der Warenkorb-Gesamtbetrag wird wie gewohnt berechnet.<\/li>\n\n\n\n<li>Er sieht ein Kontrollk\u00e4stchen mit einem Text wie \u201eMeine Bestellung aufrunden, um die Differenz zu spenden\u201c.<\/li>\n\n\n\n<li>Wenn er es anklickt, f\u00fcgt eine kleine Backend-Funktion dem Warenkorb eine neue Position namens \u201eSpende\u201c hinzu, deren Preis der Aufrundungsdifferenz entspricht.<\/li>\n\n\n\n<li>Der Warenkorb-Gesamtbetrag wird sofort aktualisiert, und die Spende erscheint als eigene Position auf der Bestellung.<\/li>\n<\/ol>\n\n\n\n<p>Wichtig ist, dass dies nicht nur auf dem Bildschirm geschehen darf. Man kann nicht einfach eine h\u00f6here Zahl anzeigen und es dabei belassen. BigCommerce muss diese Spende tats\u00e4chlich als echten Artikel im Warenkorb erkennen, sonst wird sie sp\u00e4ter weder auf der Bestellung noch in Berichten korrekt angezeigt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"980\" height=\"454\" src=\"https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-980x454.png\" alt=\"\" class=\"wp-image-17770\" srcset=\"https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-980x454.png 980w, https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-300x139.png 300w, https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-768x356.png 768w, https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-1000x463.png 1000w, https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2-800x371.png 800w, https:\/\/www.bay20.com\/de\/wp-content\/uploads\/2026\/08\/image-2.png 1366w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-i-used-a-backend-function-instead-of-doing-it-in-the-browser\"><strong>Warum ich eine Backend-Funktion verwendet habe, anstatt dies im Browser zu erledigen<\/strong><\/h2>\n\n\n\n<p>Mit BigCommerce lassen sich Warenkorbdaten recht einfach \u00fcber den Browser auslesen, doch \u00c4nderungen am Warenkorb, die vertrauensw\u00fcrdig sein sollen, m\u00fcssen an einem sichereren Ort erfolgen. W\u00fcrde man dies direkt im Browser versuchen, m\u00fcsste man die API-Schl\u00fcssel des Shops jedem offenlegen, der die Entwicklertools \u00f6ffnet \u2013 und das m\u00f6chte man nat\u00fcrlich nicht.<\/p>\n\n\n\n<p>Stattdessen habe ich daher eine kleine serverlose Funktion (ich habe <strong>Vercel<\/strong> verwendet, aber jeder \u00e4hnliche Dienst funktioniert einwandfrei) als Zwischenschicht eingesetzt. Sie verwaltet die API-Schl\u00fcssel und ist die einzige Instanz, die tats\u00e4chlich mit BigCommerce kommuniziert. Dadurch hast du au\u00dferdem eine zentrale Stelle, an der du die Regeln steuern kannst, beispielsweise wie viel jemand spenden darf oder ob du auf den n\u00e4chsten Dollar oder die n\u00e4chsten f\u00fcnf Dollar aufrundest.<\/p>\n\n\n\n<p><strong>Was die Funktion konkret macht<\/strong><\/p>\n\n\n\n<p>Nichts Besonderes. Sie ruft den Warenkorb-Gesamtbetrag ab, berechnet, wie viel zus\u00e4tzlich ben\u00f6tigt wird, um ihn aufzurunden, und f\u00fcgt diesen Betrag \u00fcber die S2S-Cart-API als Einzelposten hinzu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \/api\/round-up.js (Vercel serverless function)\nexport default async function handler(req, res) {\n  const { cartId, currentTotal } = req.body;\n\n  const roundedTotal = Math.ceil(currentTotal);\n  const donationAmount = +(roundedTotal - currentTotal).toFixed(2);\n\n  if (donationAmount &lt;= 0) {\n    return res.status(200).json({ message: \"Already a round number\" });\n  }\n\n  \/\/ Add the donation as a line item using the S2S Cart API\n  const response = await fetch(\n    `https:\/\/api.bigcommerce.com\/stores\/{store_hash}\/v3\/carts\/${cartId}\/items`,\n    {\n      method: \"POST\",\n      headers: {\n        \"X-Auth-Token\": process.env.BC_API_TOKEN,\n        \"Content-Type\": \"application\/json\",\n      },\n      body: JSON.stringify({\n        line_items: &#91;\n          {\n            name: \"Round-Up Donation\",\n            quantity: 1,\n            list_price: donationAmount,\n          },\n        ],\n      }),\n    }\n  );\n\n  const data = await response.json();\n  res.status(200).json(data);\n}<\/code><\/pre>\n\n\n\n<p>Ein paar Dinge, die ich dabei gelernt habe:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lass keine Duplikate entstehen. <\/strong>Wenn jemand das Kontrollk\u00e4stchen aktiviert, deaktiviert und dann erneut aktiviert, musst du zuerst die alte Spendenposition entfernen und nicht einfach immer neue hinzuf\u00fcgen. Am einfachsten ist es, die von der API zur\u00fcckgegebene Positions-ID zu speichern und sie an einem Ort abzulegen, auf den das Frontend zugreifen kann, beispielsweise in einem Cookie oder einem lokalen Status, der mit dem Warenkorb verkn\u00fcpft ist.<\/li>\n\n\n\n<li><strong>Die Rundungsregel liegt in Ihrem Ermessen und ist nicht fest vorgegeben.<\/strong> Manche Shops runden auf den n\u00e4chsten Dollar auf. Andere runden auf die n\u00e4chsten f\u00fcnf Dollar auf oder lassen den K\u00e4ufer den Betrag selbst w\u00e4hlen. Halten Sie dies als eine Einstellung, die Sie \u00e4ndern k\u00f6nnen, anstatt Math.ceil \u00fcberall fest zu programmieren.<\/li>\n\n\n\n<li><strong>Manchmal ben\u00f6tigst du ein echtes Produkt und nicht nur eine Artikelposition.<\/strong> Je nachdem, wie dein Katalog und deine Steuern eingerichtet sind, ben\u00f6tigst du m\u00f6glicherweise ein tats\u00e4chliches, verstecktes \u201eSpenden\u201c-Produkt in BigCommerce anstelle einer vollst\u00e4ndig fiktiven Artikelposition, insbesondere wenn die Steuern daf\u00fcr korrekt berechnet werden sollen.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-happens-when-someone-changes-their-mind\"><strong>Was passiert, wenn jemand seine Meinung \u00e4ndert?<\/strong><\/h2>\n\n\n\n<p>Es kommt auch vor, dass Nutzer das Kontrollk\u00e4stchen deaktivieren. In diesem Fall ben\u00f6tigst du eine entsprechende Funktion, die die Spende entfernt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await fetch(\n  `https:\/\/api.bigcommerce.com\/stores\/{store_hash}\/v3\/carts\/${cartId}\/items\/${donationLineItemId}`,\n  {\n    method: \"DELETE\",\n    headers: { \"X-Auth-Token\": process.env.BC_API_TOKEN },\n  }\n);<\/code><\/pre>\n\n\n\n<p>Stellen Sie sicher, dass das Kontrollk\u00e4stchen auf dem Bildschirm tats\u00e4chlich mit dem Inhalt des Warenkorbs \u00fcbereinstimmt. Manchmal \u00e4ndert ein Kunde die Menge oder l\u00f6st einen Gutschein ein, was dazu f\u00fchren kann, dass die Spende nicht mehr stimmt, ohne dass er das Kontrollk\u00e4stchen \u00fcberhaupt ber\u00fchrt hat. Es lohnt sich, bei jeder \u00c4nderung des Warenkorb-Gesamtbetrags noch einmal zu \u00fcberpr\u00fcfen, ob die Spende noch vorhanden ist.<\/p>\n\n\n\n<p><strong>Auf der Shop-Seite<\/strong><\/p>\n\n\n\n<p>Das Kontrollk\u00e4stchen selbst ist einfach. Platzieren Sie es einfach in der N\u00e4he der Bestell\u00fcbersicht und verwenden Sie ein wenig JavaScript, um:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>den aktuellen Warenkorb-Gesamtbetrag abzurufen,<\/li>\n\n\n\n<li>Ihre Backend-Funktion aufzurufen, wenn das Kontrollk\u00e4stchen aktiviert oder deaktiviert wird,<\/li>\n\n\n\n<li>den Gesamtbetrag auf dem Bildschirm zu aktualisieren, sobald Sie eine Antwort erhalten haben.<\/li>\n<\/ul>\n\n\n\n<p>Wenn sich der Warenkorb-Gesamtbetrag schnell \u00e4ndern kann, beispielsweise wenn jemand einen Gutscheincode eingibt oder Mengen \u00e4ndert, f\u00fcgen Sie eine kurze Verz\u00f6gerung ein, bevor Sie Ihre Funktion aufrufen. Andernfalls rufen Sie sie am Ende viel \u00f6fter auf, als n\u00f6tig.<\/p>\n\n\n\n<p><strong>Vergiss Steuern und Buchhaltung nicht<\/strong><\/p>\n\n\n\n<p>Sprich mit dem Finanzverantwortlichen des Shops, bevor du diese Funktion implementierst \u2013 nicht erst danach. Spenden m\u00fcssen oft steuerbefreit sein, und die meisten H\u00e4ndler m\u00f6chten, dass Spendengelder getrennt von den tats\u00e4chlichen Produktverk\u00e4ufen ausgewiesen werden. Das l\u00e4sst sich im Vorfeld viel einfacher planen als sp\u00e4ter nachbessern.<\/p>\n\n\n\n<p><strong>Fazit<\/strong><\/p>\n\n\n\n<p>Diese Funktion sieht von au\u00dfen betrachtet einfach aus \u2013 nur ein Kontrollk\u00e4stchen \u2013, betrifft aber den Warenkorb, die Steuern und die Art und Weise, wie die Gelder ausgewiesen werden. Die Verwendung einer kleinen Backend-Funktion in Verbindung mit der S2S Cart API sorgt f\u00fcr \u00dcbersichtlichkeit und Sicherheit und macht es einfach, die Rundungsregel sp\u00e4ter zu \u00e4ndern, ohne den Code Ihres Themes anzutasten.<\/p>\n\n\n\n<p>Wenn Sie vorhaben, so etwas zu entwickeln, sollten Sie sich im Vorfeld Zeit nehmen, um die Gesch\u00e4ftsregeln zu kl\u00e4ren \u2013 zum Beispiel, wie hoch der Aufrundungsbetrag sein soll, wie die Steuern gehandhabt werden sollen und was passiert, wenn jemand seine Meinung \u00e4ndert. Das wird Ihnen mehr Zeit sparen als alles andere.<\/p>\n\n\n\n<p>Bitte kontaktieren Sie uns unter <strong>manish@bay20.com<\/strong> oder rufen Sie uns unter <strong>+91-9582784309 oder +91-8800519180<\/strong> an, wenn Sie Unterst\u00fctzung im Zusammenhang mit <strong><a href=\"https:\/\/www.bay20.com\/de\/digitales-marketing-unternehmen\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Bigcommerce<\/a><\/strong> ben\u00f6tigen. Sie k\u00f6nnen auch unsere Website besuchen, um sich \u00fcber unsere Dienstleistungen zu informieren.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das haben Sie wahrscheinlich schon einmal an der Kasse eines Supermarkts gesehen. Ihr Gesamtbetrag betr\u00e4gt 47,35 $, und das System fragt Sie, ob Sie auf 48,00 $ aufrunden m\u00f6chten, wobei die zus\u00e4tzlichen 65 Cent an eine Wohlt\u00e4tigkeitsorganisation gehen. Es ist eine kleine Bitte, der man leicht zustimmen kann, und im Laufe der Zeit kommt dabei [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17703,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[175],"class_list":["post-17769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bigcommerce","tag-bigcommerce"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/17769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/comments?post=17769"}],"version-history":[{"count":1,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/17769\/revisions"}],"predecessor-version":[{"id":17771,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/posts\/17769\/revisions\/17771"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/media\/17703"}],"wp:attachment":[{"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/media?parent=17769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/categories?post=17769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bay20.com\/de\/wp-json\/wp\/v2\/tags?post=17769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}