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