Benutzerdefiniertes Preismodul

Ein Beispiel

Wetterabhängige Grillwurstpreise

Wenn in der Schweiz der Sommer anbricht und die Leute anfangen, Freunde zur ersten Grillparty des Jahres einzuladen, steigt die Nachfrage nach Würstchen in die Höhe. Unser lieber Freund, der Metzger Bruno, möchte mit seinem Online-Shop seine hausgemachten Würste direkt an den Kunden verkaufen und hatte diese verrückte Idee einer speziellen Produktpreisgestaltung, die er wetterabhängige Grillwurstpreise nennt.

Hinzufügen eines Preismoduls

Um dies zu demonstrieren, werden wir eine ausgeklügelte Preisgestaltung implementieren, die den Katalogpreis um 1 USD erhöht, wenn die Temperatur in Zürich 20 Grad Celsius erreicht:

import { ProductPricingDirector, ProductPricingAdapter } from "meteor/unchained:core-pricing";
import fetch from "isomorphic-unfetch";
            
const PRODUCT_TAG_SAUSAGE = "sausage";
const SAUSAGE_THRESHOLD_CELSIUS = 20;

class WeatherDependentBarbequeSausagePricing extends ProductPricingAdapter {
  static key = "shop.unchained.wd-bbq-sausage-pricing";
  static version = "1.0";
  static label = "Calculate the price of a sausage 🌭🌦";
  static orderIndex = 3;

  static isActivatedFor({product}) {
    if (
      product.tags &&
      product.tags.length > 0 &&
      product.tags.indexOf(PRODUCT_TAG_SAUSAGE) !== -1
    ) {
      return true;
    }
    return false;
  }

  async calculate() {
    const { currency, quantity } = this.context;
    try {
      const response = await fetch(
        "https://community-open-weather-map.p.rapidapi.com/weather?q=zurich,ch&units=metric", 
        {
          headers: {
            "x-rapidapi-key": "2a849e288dmsh59370f28a9102f6p1c881cjsn28010ce8ff58",
            "x-rapidapi-host": "community-open-weather-map.p.rapidapi.com",
            "useQueryString": true
          }
        }
      );
      if (response.status === 200) {
        const { main } = await response.json();
        const { temp} = main;
        if (temp) {
          if (temp > SAUSAGE_THRESHOLD_CELSIUS) {
            console.log("🌭 -> High season, sausage pricy!!"); 
            this.result.addItem({
              currency,
              amount: 100 * quantity,
              isTaxable: true,
              isNetPrice: true,
              meta: { adapter: this.constructor.key }
            });
          }
        }
      }
    } catch (e) {
      console.error('🌭 -> Failed while trying to price weather dependent');
    }

    return super.calculate();
  }
}

ProductPricingDirector.registerAdapter(WeatherDependentBarbequeSausagePricing);
Abfrage erstellen
Unchained Commerce ist vom Design her headless. Um also die Produktdaten von unserer Unchained Engine zu bekommen, müssen wir eine kleine GraphQL-Abfrage basteln, die tatsächlich einige Texte und den aktuellen Preis unserer Wurst auflöst.
query getProduct {
  product(slug: "🌭") {
    _id
    texts {
      title
    }
    ... on SimpleProduct {
      catalogPrice {
        price {
          amount
          currency
        }
      }
    }
  }
}
Erstellen der Benutzeroberfläche
Da Unchained Commerce headless ist, können Sie jedes UI auf jedem Betriebssystem erstellen, das sich irgendwie mit dem HTTP-Endpunkt verbinden kann. Wie genial ist das?

Build the UI with Unchained Create

Unchained Create on Github