command->info('🌱 Seeding payment providers...'); // Skip encryption test for now to focus on basic seeding $this->command->info('📝 Skipping encryption test to focus on basic data seeding'); $providers = [ [ 'name' => 'stripe', 'display_name' => 'Stripe', 'description' => 'Accept payments via Stripe - Credit cards, Apple Pay, Google Pay and more', 'is_active' => false, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\StripeProvider', 'secret_key' => env('STRIPE_SECRET') ?: 'sk_test_placeholder', 'publishable_key' => env('STRIPE_PUBLISHABLE_KEY') ?: 'pk_test_placeholder', 'webhook_secret' => env('STRIPE_WEBHOOK_SECRET') ?: 'whsec_placeholder', 'webhook_url' => env('APP_URL', 'https://example.com') . '/webhook/stripe', 'success_url' => env('APP_URL', 'https://example.com') . '/payment/success', 'cancel_url' => env('APP_URL', 'https://example.com') . '/payment/cancel', 'currency' => env('CASHIER_CURRENCY', 'USD'), ], 'supports_recurring' => true, 'supports_one_time' => true, 'supported_currencies' => [ 'USD' => 'US Dollar' ], 'fee_structure' => [ 'fixed_fee' => '0.50', 'percentage_fee' => '3.9', ], 'priority' => 60, 'is_fallback' => false, ], [ 'name' => 'lemon_squeezy', 'display_name' => 'Lemon Squeezy', 'description' => 'Modern payment platform for digital products and subscriptions', 'is_active' => false, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\LemonSqueezyProvider', 'api_key' => env('LEMON_SQUEEZY_API_KEY', 'lsk_...'), 'store_id' => env('LEMON_SQUEEZY_STORE_ID', '...'), 'webhook_secret' => env('LEMON_SQUEEZY_WEBHOOK_SECRET', 'whsec_...'), 'webhook_url' => env('APP_URL') . '/webhook/lemon-squeezy', 'success_url' => env('APP_URL') . '/payment/success', 'cancel_url' => env('APP_URL') . '/payment/cancel', ], 'supports_recurring' => true, 'supports_one_time' => true, 'supported_currencies' => [ 'USD' => 'US Dollar' ], 'fee_structure' => [ 'fixed_fee' => '0.50', 'percentage_fee' => '5.0', ], 'priority' => 50, 'is_fallback' => false, ], [ 'name' => 'polar', 'display_name' => 'Polar.sh', 'description' => 'Modern crowdfunding and payment platform for creators', 'is_active' => false, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\PolarProvider', 'api_key' => env('POLAR_API_KEY', 'pol_...'), 'webhook_secret' => env('POLAR_WEBHOOK_SECRET', 'whsec_...'), 'sandbox' => env('POLAR_SANDBOX', false), 'sandbox_api_key' => env('POLAR_SANDBOX_API_KEY', 'pol_test_...'), 'sandbox_webhook_secret' => env('POLAR_SANDBOX_WEBHOOK_SECRET', 'whsec_test_...'), 'access_token' => env('POLAR_ACCESS_TOKEN', 'polar_...'), 'webhook_url' => env('APP_URL') . '/webhook/polar', 'success_url' => env('APP_URL') . '/payment/success', 'cancel_url' => env('APP_URL') . '/payment/cancel', ], 'supports_recurring' => true, 'supports_one_time' => true, 'supported_currencies' => [ 'USD' => 'US Dollar', 'EUR' => 'Euro', ], 'fee_structure' => [ 'fixed_fee' => '0.50', 'percentage_fee' => '5.0', ], 'priority' => 40, 'is_fallback' => false, ], [ 'name' => 'oxapay', 'display_name' => 'OxaPay', 'description' => 'Cryptocurrency payment gateway supporting multiple digital assets', 'is_active' => false, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\OxapayProvider', 'merchant_api_key' => env('OXAPAY_MERCHANT_API_KEY', 'merchant_...'), 'sandbox_merchant_api_key' => env('OXAPAY_SANDBOX_MERCHANT_API_KEY', 'merchant_sb_...'), 'payout_api_key' => env('OXAPAY_PAYOUT_API_KEY', 'payout_...'), 'sandbox_payout_api_key' => env('OXAPAY_SANDBOX_PAYOUT_API_KEY', 'payout_sb_...'), 'callback_url' => env('OXAPAY_CALLBACK_URL', env('APP_URL') . '/webhook/oxapay'), 'success_url' => env('APP_URL') . '/payment/success', 'cancel_url' => env('APP_URL') . '/payment/cancel', 'sandbox' => env('OXAPAY_SANDBOX', true), 'currency' => env('OXAPAY_CURRENCY', 'USD'), // string 'lifetime' => env('OXAPAY_LIFETIME', 30), // integer · min: 15 · max: 2880 'fee_paid_by_payer' => env('OXAPAY_FEE_PAID_BY_PAYER', 1), // number · decimal · max: 1 'under_paid_coverage' => env('OXAPAY_UNDER_PAID_COVERAGE', 2.5), // number · decimal · max: 60 'auto_withdrawal' => env('OXAPAY_AUTO_WITHDRAWAL', false), // boolean 'mixed_payment' => env('OXAPAY_MIXED_PAYMENT', false), // boolean ], 'supports_recurring' => false, 'supports_one_time' => true, 'supported_currencies' => [ 'BTC' => 'Bitcoin', 'ETH' => 'Ethereum', 'USDT' => 'Tether USD', 'USDC' => 'USD Coin', 'LTC' => 'Litecoin', 'BCH' => 'Bitcoin Cash', 'BNB' => 'Binance Coin', ], 'fee_structure' => [ 'fixed_fee' => '0.00', 'percentage_fee' => '1.0', ], 'priority' => 30, 'is_fallback' => false, ], [ 'name' => 'crypto', 'display_name' => 'Native Crypto', 'description' => 'Direct cryptocurrency payments with blockchain confirmations', 'is_active' => false, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\CryptoProvider', 'webhook_secret' => env('CRYPTO_WEBHOOK_SECRET', 'crypto_whsec_...'), 'confirmation_timeout_minutes' => env('CRYPTO_CONFIRMATION_TIMEOUT', 30), 'exchange_rate_provider' => env('CRYPTO_EXCHANGE_RATE_PROVIDER', 'coingecko'), 'coingecko_api_key' => env('COINGECKO_API_KEY'), 'blockchair_api_key' => env('BLOCKCHAIR_API_KEY'), 'webhook_url' => env('APP_URL') . '/webhook/crypto', 'success_url' => env('APP_URL') . '/payment/success', 'cancel_url' => env('APP_URL') . '/payment/cancel', 'supported_wallets' => [ 'btc' => ['bitcoin', 'lightning'], 'eth' => ['ethereum', 'erc20'], 'ltc' => ['litecoin'], ], ], 'supports_recurring' => false, 'supports_one_time' => true, 'supported_currencies' => [ 'BTC' => 'Bitcoin', 'ETH' => 'Ethereum', 'LTC' => 'Litecoin', 'USDT' => 'Tether USD', 'USDC' => 'USD Coin', ], 'fee_structure' => [ 'fixed_fee' => '0.00', 'percentage_fee' => '0.0', 'note' => 'Only blockchain network fees apply', ], 'priority' => 20, 'is_fallback' => false, ], [ 'name' => 'activation_key', 'display_name' => 'Activation Key', 'description' => 'Manual activation using pre-generated activation keys', 'is_active' => true, 'configuration' => [ 'class' => 'App\\Services\\Payments\\Providers\\ActivationKeyProvider', 'key_prefix' => env('ACTIVATION_KEY_PREFIX', 'AK-'), 'key_length' => env('ACTIVATION_KEY_LENGTH', 32), 'expiration_days' => env('ACTIVATION_KEY_EXPIRATION_DAYS'), 'require_email_verification' => env('ACTIVATION_KEY_REQUIRE_EMAIL', true), 'max_keys_per_user' => env('ACTIVATION_KEY_MAX_PER_USER', 5), 'allowed_characters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ], 'supports_recurring' => false, 'supports_one_time' => true, 'supported_currencies' => [], // No currency needed for activation keys 'fee_structure' => [ 'fixed_fee' => '0.00', 'percentage_fee' => '0.0', 'note' => 'No fees for activation key system', ], 'priority' => 10, // Lowest priority 'is_fallback' => true, ], ]; foreach ($providers as $providerData) { try { // First try to find existing provider $existingProvider = PaymentProvider::where('name', $providerData['name'])->first(); if ($existingProvider) { // Update existing provider $existingProvider->update($providerData); $this->command->info("✅ Updated payment provider: {$providerData['display_name']} ({$providerData['name']})"); } else { // Create new provider $provider = PaymentProvider::create($providerData); $this->command->info("✅ Created payment provider: {$providerData['display_name']} ({$providerData['name']})"); } } catch (\Exception $e) { $this->command->error("❌ Error seeding provider {$providerData['name']}: {$e->getMessage()}"); continue; } } $this->command->info('🎉 Payment providers seeding completed!'); $this->command->info('💡 Configuration data is managed by Laravel\'s encrypted:array cast.'); } }