baks-dev/avito-orders
Laravel/PHP модуль заказов Avito (FBS/DBS): добавляет тип профиля, оплату и доставку для заказов Avito. Установка через Composer, настройка через консольные команды (baks:*), есть тесты PHPUnit. PHP 8.4+.
Installation:
composer require baks-dev/avito-orders
Ensure your project uses PHP 8.4+ and Laravel 10/11 (or Symfony/Lumen if leveraging Symfony bridge).
Register Required Commands: Choose either FBS (Fulfillment by Avito) or DBS (Delivery by Avito):
# For FBS (warehouse fulfillment)
php artisan baks:users-profile-type:avito-fbs
php artisan baks:payment:avito-fbs
php artisan baks:delivery:avito-fbs
# For DBS (direct delivery)
php artisan baks:users-profile-type:avito-dbs
php artisan baks:payment:avito-dbs
php artisan baks:delivery:avito-dbs
Note: Commands assume baks-dev/core is installed. If using Laravel, bind Symfony commands to Laravel’s App\Console\Kernel.
First Use Case:
AvitoOrderCreated) to trigger Laravel jobs or notifications.
Example:
// In a Laravel service
event(new \BaksDev\AvitoOrders\Events\AvitoOrderCreated($orderData));
php artisan test --group=avito-orders
Verify Setup:
avito_profile_types, avito_payments, and avito_deliveries.order.paid, delivery.shipped).
// In EventServiceProvider
protected $listen = [
\BaksDev\AvitoOrders\Events\AvitoOrderPaid::class => [
\App\Listeners\UpdateInventory::class,
],
];
// Example job for inventory updates
class UpdateInventory implements ShouldQueue
{
use Dispatchable, InteractsWithQueue;
public function handle()
{
// Logic to update inventory after Avito order is paid
}
}
$user->profile()->attach(\BaksDev\AvitoOrders\Enums\ProfileType::AVITO_FBS);
$order->delivery()->associate(new \BaksDev\AvitoOrders\Models\AvitoDelivery(
$orderId,
\BaksDev\AvitoOrders\Enums\DeliveryMethod::AVITO_FBS
));
HasApiTokens for secure endpoints:
Route::post('/avito/payment/webhook', [AvitoWebhookController::class, 'handle'])
->middleware('throttle:60');
Payment facade or create a custom service:
class AvitoRefundService
{
public function refund(Order $order, float $amount)
{
// Use BaksDev's refund logic via Avito API
$refund = \BaksDev\AvitoOrders\Facades\AvitoPayment::refund($order->avito_id, $amount);
$order->update(['status' => 'refunded']);
}
}
app/Console/Kernel.php:
protected function schedule(Schedule $schedule)
{
$schedule->command('baks:delivery:avito-fbs')->daily();
}
// app/Console/Commands/ExtendAvitoDelivery.php
class ExtendAvitoDelivery extends Command
{
protected $signature = 'avito:delivery:extend {orderId}';
public function handle()
{
$delivery = \BaksDev\AvitoOrders\Models\AvitoDelivery::find($orderId);
$delivery->extendDeadline();
}
}
AvitoOrderCreated event → Laravel creates Order model.AvitoOrderPaid → Dispatch UpdateInventory job.baks:delivery:avito-fbs → Avito handles shipping; update Laravel’s Order status via webhook.AVITO_DBS profile → Trigger AvitoOrderReceived event.DeliveryService to generate tracking:
$tracking = \BaksDev\AvitoOrders\Facades\AvitoDelivery::generateTracking($order);
Order status (e.g., shipped, delivered).AppServiceProvider:
$this->app->bind(
\BaksDev\Core\Avito\Client::class,
fn($app) => new \BaksDev\Core\Avito\Client(config('avito.api_key'))
);
App\Console\Kernel:
protected $commands = [
\BaksDev\AvitoOrders\Command\AvitoFbsCommand::class,
// Add custom commands here
];
Schema builder to extend Avito tables:
Schema::table('avito_deliveries', function (Blueprint $table) {
$table->foreignId('order_id')->constrained()->onDelete('cascade');
});
class Order extends Model
{
public function delivery()
{
return $this->hasOne(AvitoDelivery::class);
}
}
public function testAvitoOrderCreation()
{
$this->artisan('baks:users-profile-type:avito-fbs')
->expectsOutput('Profile type registered');
$this->assertDatabaseHas('profile_types', [
'name' => 'avito_fbs',
]);
}
Mockery to stub Avito responses:
$mock = Mockery::mock(\BaksDev\Core\Avito\Client::class);
$mock->shouldReceive('createOrder')->andReturn($avitoOrder);
$this->app->instance(\BaksDev\Core\Avito\Client::class, $mock);
Symfony Dependency Conflicts:
baks-dev/core may pull in Symfony components (e.g., HttpKernel) that conflict with Laravel.composer why-not to identify conflicts. Isolate Symfony dependencies in a separate service if possible.Database Schema Mismatches:
Schema::raw('ALTER TABLE avito_orders ADD COLUMN laravel_order_id INT');
Event System Collisions:
class AvitoEventDispatcher
{
public function dispatch($event)
{
event(new LaravelAvitoEvent($event));
}
}
CLI Command Namespace Conflicts:
php artisan namespace.How can I help you explore Laravel packages today?