PHP code example of mvonline / discount-laravel
1. Go to this page and download the library: Download mvonline/discount-laravel library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mvonline / discount-laravel example snippets
use Mvonline\DiscountLaravel\Enums\DiscountType;
use Mvonline\DiscountLaravel\Models\DiscountCode;
DiscountCode::create([
'code' => 'SAVE20',
'name' => '20% off',
'type' => DiscountType::PERCENTAGE,
'value' => 20,
'is_active' => true,
'can_be_combined' => true,
]);
DiscountCode::create([
'code' => 'FLAT15',
'name' => '$15 off',
'type' => DiscountType::FIXED_AMOUNT,
'value' => 15,
'is_active' => true,
]);
DiscountCode::create([
'code' => 'PCT25CAP',
'name' => '25% off, max $30',
'type' => DiscountType::PERCENTAGE_WITH_CAP,
'value' => 25,
'is_active' => true,
'metadata' => ['max_discount_amount' => 30.00],
]);
DiscountCode::create([
'code' => 'USER42ONLY',
'name' => 'User 42 perk',
'type' => DiscountType::SPECIFIC_USER,
'value' => 10,
'is_active' => true,
'conditions' => ['allowed_users' => [42]],
]);
DiscountCode::create([
'code' => 'VIPONLY',
'name' => 'VIP discount',
'type' => DiscountType::SPECIFIC_GROUP,
'value' => 15,
'is_active' => true,
'conditions' => ['allowed_groups' => ['vip', 'gold']],
]);
DiscountCode::create([
'code' => 'SKU123',
'name' => 'SKU 123 promo',
'type' => DiscountType::SPECIFIC_PRODUCT,
'value' => 5,
'is_active' => true,
'conditions' => ['product_ids' => [123, 456]],
]);
DiscountCode::create([
'code' => 'BOGOHAT',
'name' => 'BOGO hats',
'type' => DiscountType::BOGO,
'value' => 0,
'is_active' => true,
'metadata' => ['buy_qty' => 1, 'get_qty' => 1, 'scope' => 'sku:HAT-01'],
]);
DiscountCode::create([
'code' => 'BUY3GET1',
'name' => 'Buy 3 get 1',
'type' => DiscountType::BUY_X_GET_Y,
'value' => 0,
'is_active' => true,
'metadata' => ['buy' => 3, 'get' => 1, 'discount_on_get' => 100],
]);
DiscountCode::create([
'code' => 'SUMMER24',
'name' => 'Summer sale',
'type' => DiscountType::WITH_EXPIRY,
'value' => 10,
'is_active' => true,
'starts_at' => now()->startOfMonth(),
'expires_at' => now()->addMonths(3),
]);
DiscountCode::create([
'code' => 'FIRST500',
'name' => 'First 500 customers',
'type' => DiscountType::FIRST_N_USERS,
'value' => 50,
'is_active' => true,
'usage_limit' => 500,
'usage_count' => 0,
]);
DiscountCode::create([
'code' => 'MIN100P10',
'name' => '10% on $100+',
'type' => DiscountType::PERCENTAGE,
'value' => 10,
'minimum_basket_value' => 100,
'is_active' => true,
]);
DiscountCode::create([
'code' => 'BUNDLEABC',
'name' => 'A+B+C bundle',
'type' => DiscountType::BUNDLE,
'value' => 20,
'is_active' => true,
'conditions' => ['
DiscountCode::create([
'code' => 'CATSALE',
'name' => 'Electronics sale',
'type' => DiscountType::CATEGORY_BASED,
'value' => 12,
'is_active' => true,
'conditions' => ['category_ids' => [10, 11]],
]);
DiscountCode::create([
'code' => 'FREESHIP',
'name' => 'Free shipping',
'type' => DiscountType::SHIPPING,
'value' => 0,
'is_active' => true,
'metadata' => ['shipping_discount_type' => 'free', 'max_shipping_value' => 9.99],
]);
DiscountCode::create([
'code' => 'POINTS500',
'name' => '500 points',
'type' => DiscountType::LOYALTY_POINTS,
'value' => 5.00,
'is_active' => true,
'metadata' => ['points_cost' => 500, 'points_per_currency' => 100],
]);
DiscountCode::create([
'code' => 'REF-ALICE',
'name' => 'Alice refers you',
'type' => DiscountType::REFERRAL,
'value' => 10,
'is_active' => true,
'metadata' => ['referrer_id' => 101, 'campaign' => 'spring'],
]);
DiscountCode::create([
'code' => 'BULK',
'name' => 'Bulk tiers',
'type' => DiscountType::BULK_PURCHASE,
'value' => 0,
'is_active' => true,
'metadata' => ['tiers' => [['min_qty' => 10, 'percent' => 5], ['min_qty' => 50, 'percent' => 12]]],
]);
DiscountCode::create([
'code' => 'CARDONLY',
'name' => 'Card discount',
'type' => DiscountType::PAYMENT_METHOD,
'value' => 3,
'is_active' => true,
'conditions' => ['allowed_payment_methods' => ['card', 'apple_pay']],
]);
DiscountCode::create([
'code' => 'WELCOME',
'name' => 'First order',
'type' => DiscountType::FIRST_TIME_BUYER,
'value' => 15,
'is_active' => true,
]);
DiscountCode::create([
'code' => 'BLACKFRIDAY',
'name' => 'Black Friday',
'type' => DiscountType::SEASONAL,
'value' => 30,
'is_active' => true,
'starts_at' => '2026-11-24 00:00:00',
'expires_at' => '2026-11-30 23:59:59',
]);
DiscountCode::create([
'code' => 'LIMIT50',
'name' => 'Limited stock',
'type' => DiscountType::LIMITED_QUANTITY,
'value' => 20,
'is_active' => true,
'usage_limit' => 50,
'metadata' => ['sku_stock' => ['SKU-1' => 20]],
]);
DiscountCode::create([
'code' => 'NYCONLY',
'name' => 'NYC stores',
'type' => DiscountType::LOCATION_BASED,
'value' => 8,
'is_active' => true,
'conditions' => ['regions' => ['US-NY'], 'store_ids' => [7, 8]],
]);
DiscountCode::create([
'code' => 'HIGHVALUE',
'name' => 'High-value segment',
'type' => DiscountType::CUSTOMER_SEGMENT,
'value' => 12,
'is_active' => true,
'conditions' => ['segments' => ['high_value', 'repeat_buyer']],
]);
DiscountCode::create([
'code' => 'CLUB',
'name' => 'Members club',
'type' => DiscountType::MEMBERSHIP,
'value' => 10,
'is_active' => true,
'conditions' => ['membership_tiers' => ['gold', 'platinum']],
]);
DiscountCode::create([
'code' => 'GC-9F3A',
'name' => 'Gift card',
'type' => DiscountType::GIFT_CARD,
'value' => 50.00,
'is_active' => true,
'metadata' => ['balance' => 50.00, 'currency' => 'USD'],
]);
DiscountCode::create([
'code' => 'TIERED',
'name' => 'Spend tiers',
'type' => DiscountType::TIERED,
'value' => 0,
'is_active' => true,
'metadata' => ['tiers' => [['min' => 0, 'pct' => 5], ['min' => 200, 'pct' => 10]]],
]);
DiscountCode::create([
'code' => 'FLASH2H',
'name' => '2h flash',
'type' => DiscountType::FLASH,
'value' => 40,
'is_active' => true,
'starts_at' => now(),
'expires_at' => now()->addHours(2),
]);
DiscountCode::create([
'code' => 'ANNIV',
'name' => 'Anniversary',
'type' => DiscountType::USER_ANNIVERSARY,
'value' => 15,
'is_active' => true,
'metadata' => ['match' => 'signup_anniversary_month'],
]);
DiscountCode::create([
'code' => 'APPONLY',
'name' => 'App exclusive',
'type' => DiscountType::APP_EXCLUSIVE,
'value' => 7,
'is_active' => true,
'conditions' => ['channels' => ['ios', 'android']],
]);
DiscountCode::create([
'code' => 'GIFTMUG',
'name' => 'Free mug',
'type' => DiscountType::FREE_GIFT,
'value' => 0,
'is_active' => true,
'metadata' => ['gift_sku' => 'MUG-01', 'max_gifts' => 1],
]);
DiscountCode::create([
'code' => 'UPGRADE',
'name' => 'Pro upgrade',
'type' => DiscountType::UPGRADE,
'value' => 99.00,
'is_active' => true,
'conditions' => ['from_plan' => 'basic', 'to_plan' => 'pro'],
]);
DiscountCode::create([
'code' => 'SUB3MO',
'name' => '3 months off',
'type' => DiscountType::SUBSCRIPTION,
'value' => 10,
'is_active' => true,
'metadata' => ['interval' => 'month', 'duration_cycles' => 3],
]);
DiscountCode::create([
'code' => 'MILE10K',
'name' => '$10k lifetime spend',
'type' => DiscountType::MILESTONE,
'value' => 25,
'is_active' => true,
'metadata' => ['min_lifetime_spend' => 10000],
]);
DiscountCode::create([
'code' => 'RAF2026',
'name' => 'Refer a friend',
'type' => DiscountType::REFER_A_FRIEND,
'value' => 20,
'is_active' => true,
'metadata' => ['referee_reward' => 20, 'referrer_reward' => 20],
]);
DiscountCode::create([
'code' => 'NEWPHONE',
'name' => 'Launch week',
'type' => DiscountType::PRODUCT_LAUNCH,
'value' => 50,
'is_active' => true,
'conditions' => ['launch_product_ids' => [9001]],
'expires_at' => now()->addWeek(),
]);
DiscountCode::create([
'code' => 'ROUNDUP',
'name' => 'Round up for charity',
'type' => DiscountType::DONATION_BASED,
'value' => 0,
'is_active' => true,
'metadata' => ['charity_id' => 'red-cross', 'round_up_to' => 1.00],
]);
DiscountCode::create([
'code' => 'MORESAVE',
'name' => 'Buy more save more',
'type' => DiscountType::BUY_MORE_SAVE_MORE,
'value' => 0,
'is_active' => true,
'metadata' => ['steps' => [['min' => 100, 'pct' => 5], ['min' => 250, 'pct' => 10]]],
]);
DiscountCode::create([
'code' => 'COMBOPIZZA',
'name' => 'Pizza combo',
'type' => DiscountType::COMBO,
'value' => 19.99,
'is_active' => true,
'conditions' => ['combo_line_items' => [['sku' => 'PZ-1'], ['sku' => 'DR-2']]]],
]);
DiscountCode::create([
'code' => 'TRADEOLD',
'name' => 'Trade-in',
'type' => DiscountType::EXCHANGE,
'value' => 200,
'is_active' => true,
'metadata' => ['trade_in_sku' => 'OLD-PHONE', 'valuation_source' => 'pos'],
]);
use Mvonline\DiscountLaravel\Enums\DiscountType;
use Mvonline\DiscountLaravel\Models\DiscountCode;
DiscountCode::create([
'code' => 'VIP15',
'name' => 'VIP 15%',
'type' => DiscountType::SPECIFIC_GROUP,
'value' => 15,
'is_active' => true,
'conditions' => [
'allowed_groups' => ['vip', 'gold'],
],
'metadata' => [
'marketing_campaign' => 'spring-2026',
],
]);
use Mvonline\DiscountLaravel\DTOs\CartDTO;
use Mvonline\DiscountLaravel\DTOs\CustomerDTO;
use Mvonline\DiscountLaravel\DTOs\DiscountCalculationRequestDTO;
use Mvonline\DiscountLaravel\Services\DiscountCalculator;
$cartDTO = new CartDTO(
items: collect([['id' => 1, 'name' => 'Item', 'price' => 50, 'quantity' => 2]]),
subtotal: 100.00,
tax: 10.00,
shipping: 5.00,
total: 115.00,
currency: 'USD',
metadata: ['store_id' => 'NYC-07'],
);
$customerDTO = new CustomerDTO(
id: 42,
type: 'user',
groups: ['vip'],
segments: ['high_value'],
location: 'US-NY',
paymentMethod: 'card',
isFirstTimeBuyer: false,
metadata: ['channel' => 'ios'],
);
$request = new DiscountCalculationRequestDTO(
cart: $cartDTO,
customer: $customerDTO,
discountCodes: ['VIP15'],
metadata: ['request_id' => 'uuid-for-logging'],
);
$result = app(DiscountCalculator::class)->calculate($request);
use Mvonline\DiscountLaravel\DTOs\CartDTO;
use Mvonline\DiscountLaravel\DTOs\CustomerDTO;
use Mvonline\DiscountLaravel\DTOs\DiscountCalculationRequestDTO;
use Mvonline\DiscountLaravel\Services\DiscountCalculator;
$cartDTO = new CartDTO(
items: collect([/* cart line items */]),
subtotal: 100.00,
tax: 10.00,
shipping: 5.00,
total: 115.00
);
$customerDTO = new CustomerDTO(
id: 1,
type: 'user',
groups: ['vip'],
isFirstTimeBuyer: false
);
$request = new DiscountCalculationRequestDTO(
cart: $cartDTO,
customer: $customerDTO,
discountCodes: ['SUMMER2024']
);
$result = app(DiscountCalculator::class)->calculate($request);
if ($result->isValid) {
// $result->totalDiscount, $result->finalTotal, $result->toArray() for JSON
} else {
// $result->errorMessage
}
bash
php artisan vendor:publish --tag="discount-manager-config"
php artisan vendor:publish --tag="discount-manager-migrations"
php artisan migrate