baks-dev/yandex-market-orders
Symfony/PHP модуль для работы с заказами Яндекс.Маркета: поддержка схем FBS и DBS, установка профилей пользователя, способов оплаты и доставки через консольные команды, миграции БД и установка ассетов. Тесты PHPUnit.
Install Dependencies:
composer require baks-dev/yandex-market baks-dev/yandex-market-orders
Configure Yandex Market Profile: Choose your marketplace model (FBS/DBS) and run:
# For FBS (Fulfillment by Seller)
php bin/console baks:users-profile-type:yandex-market-fbs
php bin/console baks:payment:yandex-market-fbs
php bin/console baks:delivery:yandex-market-fbs
# For DBS (Delivery by Seller)
php bin/console baks:users-profile-type:yandex-market-dbs
php bin/console baks:payment:yandex-market-dbs
php bin/console baks:delivery:yandex-market-dbs
Set Up Database Schema:
php bin/console baks:assets:install
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
Configure API Credentials:
Add Yandex Market API credentials to .env:
YANDEX_MARKET_FBS_TOKEN=your_fbs_token_here
YANDEX_MARKET_DBS_TOKEN=your_dbs_token_here
YANDEX_KASSA_SECRET_KEY=your_kassa_secret_key
First Order Sync: Use the package's service to fetch and process orders:
use BaksDev\YandexMarketOrders\Services\YandexMarketOrderService;
$orderService = app(YandexMarketOrderService::class);
$orders = $orderService->fetchOrders(); // Fetches pending orders from Yandex Market
foreach ($orders as $order) {
$orderService->processOrder($order); // Syncs order to your Laravel app
}
Verify Webhooks (if applicable): Ensure your Laravel app is configured to handle Yandex Market webhooks for real-time updates.
Fetch Orders:
Use YandexMarketOrderService to pull orders from Yandex Market:
$service = app(YandexMarketOrderService::class);
$orders = $service->fetchOrders(['status' => 'new']);
Process Orders: Map Yandex Market orders to your Laravel order model:
foreach ($orders as $yandexOrder) {
$laravelOrder = $service->createOrderFromYandex($yandexOrder);
// Custom logic (e.g., inventory check, email notification)
event(new OrderProcessed($laravelOrder));
}
Update Order Status: Sync status back to Yandex Market:
$service->updateOrderStatus($yandexOrderId, 'shipped');
Configure Yandex.Kassa: Use the payment command to set up Yandex.Kassa integration:
php bin/console baks:payment:yandex-market-fbs
Handle Webhooks: Create a Laravel route to handle Yandex.Kassa payment notifications:
Route::post('/yandex-kassa/webhook', [YandexKassaWebhookController::class, 'handle']);
Process Payments:
use BaksDev\YandexMarketOrders\Services\YandexMarketPaymentService;
$paymentService = app(YandexMarketPaymentService::class);
$payment = $paymentService->capturePayment($orderId, $amount);
Configure Delivery: Run the delivery command for your model:
php bin/console baks:delivery:yandex-market-fbs
Update Delivery Status:
use BaksDev\YandexMarketOrders\Services\YandexMarketDeliveryService;
$deliveryService = app(YandexMarketDeliveryService::class);
$deliveryService->updateDeliveryStatus($orderId, 'delivered');
Leverage Laravel events to extend functionality:
// In EventServiceProvider
protected $listen = [
\BaksDev\YandexMarketOrders\Events\OrderCreated::class => [
\App\Listeners\SendOrderConfirmation::class,
\App\Listeners\UpdateInventory::class,
],
];
Automate order syncs with Laravel tasks:
# Sync orders every 5 minutes
* * * * * cd /path-to-project && php artisan yandex:market:orders:sync --env=production
Schema Conflicts:
baks:assets:install output and manually merge schemas if needed.Webhook Handling:
/yandex-market/webhook
/yandex-kassa/webhook
API Rate Limits:
YandexMarketOrderService:
try {
$orders = $client->fetchOrders();
} catch (RateLimitExceededException $e) {
sleep(2 ** $attempt);
retry();
}
Token Management:
env or a secrets manager (e.g., AWS Secrets Manager).Time Zone Mismatches:
$order->created_at = $yandexOrder->created_at->setTimezone('UTC');
Enable Debug Logging:
Add to config/logging.php:
'channels' => [
'yandex' => [
'driver' => 'single',
'path' => storage_path('logs/yandex-market.log'),
'level' => 'debug',
],
],
Then log API responses:
\Log::channel('yandex')->debug('API Response', ['data' => $response]);
Test with Sandbox: Use Yandex Market's sandbox environment before going live:
$client = new YandexMarketClient([
'token' => 'sandbox_token',
'endpoint' => 'https://sandbox.api.yandex.ru/...',
]);
Validate Webhooks Locally:
Test webhook payloads with Laravel's artisan serve and tools like ngrok:
ngrok http 8000
Then configure Yandex Market to send webhooks to your ngrok.io URL.
Custom Order Processing: Override the default order service:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->bind(
\BaksDev\YandexMarketOrders\Services\YandexMarketOrderService::class,
\App\Services\CustomYandexMarketOrderService::class
);
}
Add Custom Fields: Extend the order model to include Yandex-specific fields:
use BaksDev\YandexMarketOrders\Models\YandexMarketOrder;
class CustomYandexMarketOrder extends YandexMarketOrder
{
protected $casts = [
'yandex_tracking_number' => 'string',
'yandex_delivery_cost' => 'float',
];
}
Modify Payment Logic: Extend the payment service to add custom validation:
use BaksDev\YandexMarketOrders\Services\YandexMarketPaymentService;
class CustomYandexMarketPaymentService extends YandexMarketPaymentService
{
public function capturePayment($orderId, $amount)
{
// Custom logic (e.g., fraud check)
if ($this->isFraudulent($orderId)) {
throw new \RuntimeException('Fraud detected');
}
return parent::capturePayment($orderId, $amount);
}
}
Add New Delivery Methods:
How can I help you explore Laravel packages today?