Minimum sipariş tutarı zorunluluğu

Mağaza para biriminde belirlenen ve her pazar için çevrilen minimum sipariş tutarının altında checkout’u engelleyen Shopify doğrulama Function’ı.

Function API
Cart and Checkout Validation
Hedef (target)
cart.validations.generate.run
Plan
Herkese açık uygulamada her plan; özel uygulamada Shopify Plus
Uygulama yetkisi
write_validations
API sürümü
2026-10
Son kontrol

Kısaca

Bu doğrulama Function’ı, sepet ara toplamı bir minimumun (varsayılan olarak mağaza para biriminde 500) altındaysa checkout’u engeller; minimum müşterinin para birimine çevrilir. Müşteriler sepeti serbestçe doldurabilir, kural checkout’tan itibaren uygulanır. Cart and Checkout Validation API’nin cart.validations.generate.run hedefini kullanır (2026-10); herkese açık uygulamada her planda çalışır.

Nasıl kullanılır

  1. Shopify CLI ile bir uygulama oluşturun ve uzantıyı ekleyin: shopify app generate extension --template cart_checkout_validation, dil olarak JavaScript.
  2. Oluşturulan shopify.extension.toml dosyasını ve src/ içindeki iki dosyayı aşağıdakilerle değiştirin.
  3. Testleri çalıştırın: shopify app function run --input tests/below-minimum-at-checkout.input.json.
  4. shopify app deploy ile deploy edin ve doğrulamayı validationCreate ile etkinleştirin.
  5. Minimumu ve mesajı doğrulamanın $app:function-configuration metafield’ına yazın; örneğin {"minimumAmount": 250}.

Kod

shopify.extension.toml
api_version = "2026-10"

[[extensions]]
name = "Minimum order value"
handle = "minimum-order-value"
type = "function"

  [[extensions.targeting]]
  target = "cart.validations.generate.run"
  input_query = "src/cart_validations_generate_run.graphql"
  export = "cart-validations-generate-run"

  [extensions.build]
  command = ""
  path = "dist/function.wasm"
src/cart_validations_generate_run.graphql
query CartValidationsGenerateRunInput {
  buyerJourney {
    step
  }
  cart {
    cost {
      subtotalAmount {
        amount
      }
    }
  }
  presentmentCurrencyRate
  validation {
    metafield(namespace: "$app", key: "function-configuration") {
      jsonValue
    }
  }
}
src/cart_validations_generate_run.js
// @ts-check

/**
 * @typedef {import("../generated/api").CartValidationsGenerateRunInput} CartValidationsGenerateRunInput
 * @typedef {import("../generated/api").CartValidationsGenerateRunResult} CartValidationsGenerateRunResult
 */

/** Settings stored as JSON in the validation's metafield. */
const DEFAULT_CONFIG = {
  // In the store's currency; converted to the customer's currency below.
  minimumAmount: 500,
  // {amount} is replaced with the converted minimum.
  message: "The minimum order value is {amount}. Add a few more items to check out.",
};

/** Errors about the cart as a whole show at the top of checkout and on the cart. */
const CART_TARGET = "$.cart";

/** @type {CartValidationsGenerateRunResult} */
const NO_ERRORS = { operations: [] };

/**
 * @param {CartValidationsGenerateRunInput} input
 * @returns {CartValidationsGenerateRunResult}
 */
export function cartValidationsGenerateRun(input) {
  // Let customers keep adding to the cart freely; enforce the rule from checkout on.
  if (input.buyerJourney.step === "CART_INTERACTION") return NO_ERRORS;

  const config = { ...DEFAULT_CONFIG, ...input.validation?.metafield?.jsonValue };
  // The cart is priced in the customer's currency; the minimum is set in the store's.
  const minimum = config.minimumAmount * Number(input.presentmentCurrencyRate);
  const subtotal = Number(input.cart.cost.subtotalAmount.amount);
  if (subtotal >= minimum) return NO_ERRORS;

  const message = config.message.replace("{amount}", minimum.toFixed(2));
  return { operations: [{ validationAdd: { errors: [{ message, target: CART_TARGET }] } }] };
}
Test girdisi ve beklenen çıktı
tests/below-minimum-at-checkout.input.json
{
  "buyerJourney": { "step": "CHECKOUT_COMPLETION" },
  "cart": { "cost": { "subtotalAmount": { "amount": "420.0" } } },
  "presentmentCurrencyRate": "1.0",
  "validation": { "metafield": null }
}
tests/below-minimum-at-checkout.output.json
{
  "operations": [
    {
      "validationAdd": {
        "errors": [
          { "message": "The minimum order value is 500.00. Add a few more items to check out.", "target": "$.cart" }
        ]
      }
    }
  ]
}
tests/below-minimum-in-cart.input.json
{
  "buyerJourney": { "step": "CART_INTERACTION" },
  "cart": { "cost": { "subtotalAmount": { "amount": "420.0" } } },
  "presentmentCurrencyRate": "1.0",
  "validation": { "metafield": null }
}
tests/below-minimum-in-cart.output.json
{ "operations": [] }
tests/converted-minimum-met.input.json
{
  "buyerJourney": { "step": "CHECKOUT_INTERACTION" },
  "cart": { "cost": { "subtotalAmount": { "amount": "95.0" } } },
  "presentmentCurrencyRate": "0.031",
  "validation": { "metafield": { "jsonValue": { "minimumAmount": 3000 } } }
}
tests/converted-minimum-met.output.json
{ "operations": [] }

Lintel tarafından yazıldı. MIT lisansı: kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.

Sınırlar ve özel durumlar

  • Ara toplam, Shopify’ın cart.cost.subtotalAmount tanımına göre vergiler ve sepet düzeyindeki indirimler öncesi tutardır.
  • Minimum presentmentCurrencyRate ile çevrilir; pazar başına sabit yerel fiyat kullanıyorsanız çevrilen tutar yuvarlak bir sayı olmayabilir.
  • Alıcı yolculuğu adımı (buyer journey step) CART_INTERACTION iken hata döndürülmez; checkout etkileşiminde ve tamamlamada döndürülür.

Sık sorulan sorular

Shopify’da minimum sipariş tutarı nasıl belirlenir?
Bu örnekteki gibi, ara toplamı minimumunuzla karşılaştırıp altında checkout’u engelleyen bir sepet ve ödeme doğrulama Function’ı kullanın.
Müşteriler mesajı sepet sayfasında görür mü?
Bu kodla görmez; sepet kullanılabilir kalsın diye checkout’a kadar bekler. Mesajın sepette de çıkmasını istiyorsanız CART_INTERACTION kontrolünü kaldırın.
Toptan müşteriler için farklı bir minimum olabilir mi?
Evet. Input sorgusuna cart.buyerIdentity.purchasingCompany ya da bir müşteri etiketi kontrolü ekleyin ve onlar için ikinci bir tutar kullanın.
  • Function API sürümü 2026-10 için yazıldı ve gösterilen tarihte Shopify’ın başvuru belgeleriyle karşılaştırıldı. Shopify her çeyrekte yeni bir sürüm yayımlar.
  • Function içeren özel (custom) uygulamalar yalnızca Shopify Plus mağazalarında çalışır. Aynı Function herkese açık bir uygulamada, sayfada aksi yazmıyorsa her planda çalışır.
  • Her örnek test verileriyle gelir ve yayımlamadan önce bu testleri çalıştırırız. Kodu değiştirdikten sonra testleri tekrar çalıştırın: shopify app function run.
  • MIT lisansı. Kodu kendi mağazanızda da müşteri işlerinizde de kullanabilirsiniz.

Mağazanız için kurulmasını, test edilmesini ve bakımını isterseniz: Shopify Functions geliştirme.

Geliştirmek istediğiniz bir şey mi var? Gelin, birlikte konuşalım.

Aynı anda sınırlı sayıda proje alıyoruz.

Gencer KarakayaShopify mühendisi

Proje özetinizi bir mühendis okur; size e-postayla yanıt veririz.