Shopify Functions

【Functions】法人ランク別・購入点数別の動的ディスカウント&掛率適用

Shopify Functions(Product Discount API)を用いて、顧客のメタフィールドに保存された「会員ランク」や「取引先コード」に応じた卸価格(例: 20%〜50% OFF)をカート内でリアルタイム適用するロジック。

主な活用ユースケース: B2B卸売ECのランク別掛率、まとめ買い(3点以上で10%OFF、5点以上で20%OFF)の自動割引。
main.rsrust
use shopify_function::prelude::*;
use shopify_function::Result;

#[shopify_function_target(query_file = "src/run.graphql")]
fn run(input: input::ResponseData) -> Result<output::FunctionResult> {
    let vip_tier = input.cart.buyer_identity
        .as_ref()
        .and_then(|buyer| buyer.customer.as_ref())
        .and_then(|cust| cust.metafield.as_ref())
        .map(|m| m.value.as_str());

    let discount_percentage = match vip_tier {
        Some("TIER_GOLD") => 30.0,
        Some("TIER_SILVER") => 15.0,
        _ => 0.0,
    };

    if discount_percentage > 0.0 {
        return Ok(output::FunctionResult {
            discounts: vec![output::Discount {
                message: Some(format!("会員ランク特別割引 ({:.0}% OFF)", discount_percentage)),
                targets: vec![output::Target::ProductVariant(output::ProductVariantTarget {
                    id: "all".to_string(),
                    quantity: None,
                })],
                value: output::Value::Percentage(output::Percentage { value: discount_percentage }),
            }],
            discount_application_strategy: output::DiscountApplicationStrategy::First,
        });
    }

    Ok(output::FunctionResult { discounts: vec![], discount_application_strategy: output::DiscountApplicationStrategy::First })
}

アーキテクチャ & 実装のポイント

Shopify Plusネイティブの割引エンジンと完全連動
クーポンコードの入力不要で自動適用
B2B卸取引の複雑な価格体系をコードで完全制御

このレシピに関するFAQ

Q. クーポンコードとの併用制限は設定できますか?

A. はい。DiscountApplicationStrategy設定により、自動割引と他のディスカウントコードの併用可否を制御できます。

Functions受託開発のご相談

本コードスニペットをベースにした実ストアへの組み込み・Wasmビルド・保守運用を承っています。

AI見積もりシミュレーターを使う エンジニアに直接相談する