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