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設定により、自動割引と他のディスカウントコードの併用可否を制御できます。