PHPackages                             mmt/laravel-trading-service-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. mmt/laravel-trading-service-sdk

ActiveLibrary[API Development](/categories/api)

mmt/laravel-trading-service-sdk
===============================

Laravel SDK for interacting with the MMT Trading Service.

v2.3.0.0(1mo ago)052↓16.7%MITPHP ^8.3

Since Apr 13Compare

[ Source](https://github.com/MMTech-Solutions/LARAVEL-TRADING-SERVICE-SDK)[ Packagist](https://packagist.org/packages/mmt/laravel-trading-service-sdk)[ RSS](/packages/mmt-laravel-trading-service-sdk/feed)WikiDiscussions Synced 3w ago

READMEChangelogDependencies (2)Versions (11)Used By (0)

mmt/laravel-trading-service-sdk
===============================

[](#mmtlaravel-trading-service-sdk)

Cliente PHP (**SDK**) para Laravel que integra aplicaciones con el **MMT Trading Service**: operaciones de administración de brokers y de plataformas de trading (MT5, B2Trader y futuras) mediante una API tipada, sin acoplar el dominio de la aplicación a detalles HTTP.

**Versión estable:** `2.2.0.0` (etiqueta Git `v2.2.0.0`). Release anterior: `v2.1.0.0`.

> **⚠ Breaking changes en v2.0.0.0** — Ver sección [Migración desde v1.x](#migraci%C3%B3n-desde-v1x).

Propósito
---------

[](#propósito)

- Centralizar URLs, verbos HTTP y forma de las peticiones respecto al contrato del servicio remoto.
- Exponer **comandos** (`CommandInterface` + DTOs con `toArray()`) y un **resultado de acción** uniforme (`ActionResultInterface`), materializado en HTTP por `ResponseResult`, alineado con el envelope JSON del API.
- Integrarse en **Laravel** mediante service provider, configuración y contenedor de inyección de dependencias.
- Soportar múltiples plataformas de trading desde la misma sesión: `$session->mt5()`, `$session->b2t()`.

Requisitos
----------

[](#requisitos)

- PHP `^8.3`
- [Guzzle](https://github.com/guzzle/guzzle) `^7.2` (transporte HTTP por defecto)
- Laravel con carga del paquete vía `composer.json` → `extra.laravel.providers` (descubrimiento automático)

Instalación
-----------

[](#instalación)

```
composer require mmt/laravel-trading-service-sdk
```

Publicar configuración (opcional):

```
php artisan vendor:publish --tag=laravel-trading-service-sdk-config
```

Variables y clave de configuración:

UsoValorVariable de entorno`TRADING_SERVICE_URL` — URL base del Trading ServiceArchivo de config`config/laravel-trading-service-sdk.php`Clave en runtime`config('laravel-trading-service-sdk.base_url')`Uso rápido
----------

[](#uso-rápido)

### 1. Conexión y sesión (`BrokerSession`)

[](#1-conexión-y-sesión-brokersession)

El punto de entrada es `TradingService`. Tras conectar el broker obtienes una sesión que encapsula el `connection_id` y expone la API por plataforma (`mt5()`, `b2t()`).

Cada plataforma tiene su propio comando de conexión que implementa `ConnectCommandInterface`:

**MT5:**

```
use Mmt\TradingServiceSdk\Platforms\TradingService;
use Mmt\TradingServiceSdk\Platforms\MT5\Commands\MT5ConnectCommand;
use Mmt\TradingServiceSdk\Enums\PlatformEnum;

$trading = app(TradingService::class);

$session = $trading->connect(
    new MT5ConnectCommand(
        server: 'broker.example.com',
        port: 443,
        platform_type: PlatformEnum::MT5,
        login: 'manager_login',
        password: 'secret',
        name: 'Mi broker MT5',
    ),
    $connectionId // opcional: recibe el id creado por referencia
);

$mt5 = $session->mt5();
$result = $mt5->listGroups();
```

**B2Trader:**

```
use Mmt\TradingServiceSdk\Platforms\B2Trader\Commands\B2TConnectCommand;

$session = $trading->connect(
    new B2TConnectCommand(
        server: 'https://bbp-ts-api.example.com',
        port: 443,
        login: 'admin@example.com',
        password: 'secret',
        name: 'my-broker-staging',
        keycloak_url: 'https://sso.example.com/realms/b2broker/protocol/openid-connect/token',
        bbp_client_id: 'bbp-client',
        bbp_client_secret: 'client-secret',
        history_base_url: 'https://bbp-ts-api.example.com',
        default_transfer_asset_id: 'usd',
        dss_ws_base_url: 'wss://bbp-dss-api.example.com',
    ),
    $connectionId
);

$b2t = $session->b2t();
$result = $b2t->getServerTime();
```

Para reutilizar una conexión ya conocida (persistida en BD, caché, etc.):

```
$session = $trading->fromConnectionId($connectionIdGuardado);

$mt5 = $session->mt5();
$b2t = $session->b2t();
```

### 2. Resultado de transporte (`ActionResultInterface` / `ResponseResult`)

[](#2-resultado-de-transporte-actionresultinterface--responseresult)

`TransportInterface::send()` devuelve `ActionResultInterface`. La implementación HTTP concreta es `Mmt\TradingServiceSdk\TransportDrivers\Drivers\Http\ResponseResult`, construida con:

- `fromSuccessResponse(string $rawJson)` — parsea el envelope de éxito (`code`, `message`, `data`).
- `fromErrorResponse(string $rawJson)` — parsea errores (incluye `detail` en `getErrorDetails()` cuando exista).

Métodos habituales: `isSuccess()`, `getCode()`, `getMessage()`, `getData(?string $castToFqcn = null)`, `getErrorDetails()`, `getRawResponse()`.

**Cast opcional de `data`:** si pasas un FQCN de clase con constructor promovido cuyos nombres de parámetro coinciden con las claves de cada elemento del JSON, `getData(EsaClase::class)` devuelve una instancia; si `data` es una lista homogénea, devuelve un array de instancias.

```
if ($result->isSuccess()) {
    $raw   = $result->getData();                  // array asociativo / lista
    $typed = $result->getData(SomeDTO::class);    // instancia o array de instancias
}
```

### 3. Inyección directa de plataforma

[](#3-inyección-directa-de-plataforma)

Puedes resolver cualquier interfaz de plataforma directamente si ya conoces el `connectionId`:

```
use Mmt\TradingServiceSdk\Platforms\MT5\Contracts\MT5TradingServiceInterface;
use Mmt\TradingServiceSdk\Platforms\B2Trader\Contracts\B2TTradingServiceInterface;

$mt5 = resolve(MT5TradingServiceInterface::class, ['connectionId' => $connectionId]);
$b2t = resolve(B2TTradingServiceInterface::class, ['connectionId' => $connectionId]);
```

El provider registra ambas implementaciones con **`bind`**, no singleton, para que cada resolución pueda llevar su propio `connectionId`.

Buenas prácticas con `connection_id`
------------------------------------

[](#buenas-prácticas-con-connection_id)

- Obtén una conexión nueva (`connect` / flujo admin equivalente) **solo cuando** corresponda (alta de broker, rotación de credenciales, etc.), no en cada petición HTTP de tu app.
- **Persiste** el `connection_id` (y lo que exija tu integración, p. ej. `broker_key`) y reutilízalo hasta que el servicio invalide la sesión.

La forma devuelta al conectar está descrita en `Platforms\Shared\ObjectResponses\BrokerConnectionResponse`.

Arquitectura
------------

[](#arquitectura)

CapaRol**`TradingService`**Conexión al broker y fábrica de `BrokerSession` / `fromConnectionId`. Acepta cualquier `ConnectCommandInterface`.**`BrokerSession` / `BrokerSessionInterface`**Mantiene `connectionId` y delega en `mt5()` y `b2t()`.**`MT5TradingService` + `MT5TradingServiceInterface`**Contrato y rutas bajo `/v1/mt5/connections/{connectionId}/…`.**`B2TTradingService` + `B2TTradingServiceInterface`**Contrato y rutas bajo `/v1/b2t/connections/{connectionId}/…`.**Comandos** (`Contracts/CommandInterface`, `Platforms/*/Commands`)Entrada serializable vía `toArray()`. Los comandos de conexión implementan también `ConnectCommandInterface`.**Transporte** (`TransportInterface`, `TransportPacket`, `TradingServiceHttpClient`)Aísla método, endpoint, query serializada y timeouts opcionales en metadata del paquete.**`ActionResultInterface`**Contrato del resultado; **`ResponseResult`** (HTTP) es la implementación por defecto.Plataformas soportadas
----------------------

[](#plataformas-soportadas)

### MT5

[](#mt5)

La lista autoritativa de operaciones disponibles es **`MT5TradingServiceInterface`**: símbolos, grupos, usuarios, posiciones (abrir / modificar / cerrar / cerrar todas), deals, órdenes, márgenes, transacciones, precios, etc.

- Comandos: `src/Platforms/MT5/Commands/`
- Respuestas: `src/Platforms/MT5/ObjectResponses/`
- Enums: `src/Platforms/MT5/Enums/`
- Conexión: `MT5ConnectCommand`

### B2Trader

[](#b2trader)

La lista autoritativa de operaciones disponibles es **`B2TTradingServiceInterface`**: usuarios, perfiles, cuentas, márgenes, posiciones, órdenes, deals, transferencias, símbolos, ticks, grupos, perfiles de apalancamiento, roles, etc.

- Comandos: `src/Platforms/B2Trader/Commands/`
- DTOs (entidades de dominio): `src/Platforms/B2Trader/DTOs/`
- ObjectResponses (envoltorios de operación): `src/Platforms/B2Trader/ObjectResponses/`
- Enums: `src/Platforms/B2Trader/Enums/`
- Conexión: `B2TConnectCommand`

**Convención B2Trader — DTOs vs ObjectResponses:**

CarpetaContenido`DTOs/`Entidades de dominio reutilizables: `Account`, `AccountAccessData`, `AccountState`, `Asset`, `BulkClosedPosition`, `ClosedPosition`, `DealInfo`, `GroupInfo`, `LeverageProfile`, `MarginLevel`, `Order`, `Position`, `RoleInfo`, `SymbolInfo`, `TickInfo`, `TransactionHistoryItem`, `UserAccessData`, `UserProfile``ObjectResponses/`Envoltorios de operación específicos (siempre con sufijo `Response`): `OpenPositionResponse`, `ClosePositionResponse`, `CloseAllPositionsResponse`, `ClosedPositionsResponse`, `GroupsResponse`, `AccountGroupResponse`, `AccountsByLoginResponse`, `AddBalanceResponse`, `SetBalanceResponse`, `ServerTimeResponse`Estructura del código (resumen)
-------------------------------

[](#estructura-del-código-resumen)

```
src/
├── Contracts/                    # CommandInterface, ConnectCommandInterface
├── Enums/                        # PlatformEnum (MT5, B2T), LanguagesEnum, …
├── Exceptions/
├── Session/                      # BrokerSession, BrokerSessionInterface
├── Platforms/
│   ├── TradingService.php
│   ├── Shared/                   # BrokerConnectionResponse
│   ├── MT5/                      # Contrato, servicio, Commands, ObjectResponses, Enums
│   └── B2Trader/                 # Contrato, servicio, Commands, DTOs, ObjectResponses, Enums
├── TransportDrivers/
│   ├── Contracts/                # TransportInterface, TransportPacket, ActionResultInterface
│   ├── Drivers/Http/             # TradingServiceHttpClient, ResponseResult
│   └── Traits/                   # WithHttpClient
└── TradingServiceSdkServiceProvider.php

```

Migración desde v1.x
--------------------

[](#migración-desde-v1x)

### `ConnectBrokerCommand` eliminado

[](#connectbrokercommand-eliminado)

`ConnectBrokerCommand` (`Platforms\Shared\Commands\ConnectBrokerCommand`) ha sido eliminado. Reemplázalo por el comando específico de la plataforma:

```
// Antes (v1.x)
use Mmt\TradingServiceSdk\Platforms\Shared\Commands\ConnectBrokerCommand;
$trading->connect(new ConnectBrokerCommand(...));

// Ahora (v2.x) — MT5
use Mmt\TradingServiceSdk\Platforms\MT5\Commands\MT5ConnectCommand;
$trading->connect(new MT5ConnectCommand(...));

// Ahora (v2.x) — B2Trader
use Mmt\TradingServiceSdk\Platforms\B2Trader\Commands\B2TConnectCommand;
$trading->connect(new B2TConnectCommand(...));
```

### `TradingService::connect()` — tipo de parámetro

[](#tradingserviceconnect--tipo-de-parámetro)

El parámetro pasó de `ConnectBrokerCommand` (clase concreta) a `ConnectCommandInterface`. Ambos comandos nuevos implementan esa interfaz, por lo que el cambio es transparente si usas los nuevos comandos.

### `BrokerSessionInterface` — nuevo método `b2t()`

[](#brokersessioninterface--nuevo-método-b2t)

Si implementas `BrokerSessionInterface` fuera del SDK (p. ej. en tests), debes añadir el método:

```
public function b2t(): B2TTradingServiceInterface;
```

Versionado
----------

[](#versionado)

Este repositorio usa etiquetas Git para releases públicas:

EtiquetaNotas breves`v1.0.0.0`Base estable: sesión, MT5 vía interfaz, `ActionResult` / `ResponseResult` HTTP.`v1.1.0.0`Menor: `openPosition`, `LanguagesEnum` en usuarios, `getData(FQCN)` con mapeo a DTOs.`v1.2.1.0`Menor: ajustes en MT5, `BrokerConnectionResponse` con campo `platform`.`v2.0.0.0`**Breaking:** soporte B2Trader, `ConnectCommandInterface`, comandos de conexión por plataforma (`MT5ConnectCommand`, `B2TConnectCommand`), `BrokerSession::b2t()`, `PlatformEnum::B2T`. Eliminado `ConnectBrokerCommand`.`v2.1.0.0`Menor: `getUserByEmail` B2Trader y ajustes menores.`v2.2.0.0`**Breaking (B2T connect):** `B2TConnectCommand` payload alineado con Trading Service — eliminados `frontoffice_*` y `kafka_*`; añadido `dss_ws_base_url`; `keycloak_url`, `bbp_client_id`, `bbp_client_secret` requeridos; `fromArray()` añadido.`v2.3.0.0`Menor: B2T `setAccountAccess` (`POST accounts/access`), `getAccountAccess` (`GET accounts/{login}/access`), `SetAccountAccessCommand`, DTO `AccountAccessData`. El endpoint legacy `setUserAccess` (`POST users/access`) se mantiene.En la aplicación consumidora fija la dependencia a la etiqueta concreta (p. ej. `2.0.0.0`) o al criterio semver que uses internamente.

Licencia
--------

[](#licencia)

MIT (ver `composer.json`).

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance92

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

10

Last Release

39d ago

Major Versions

v1.2.1.0 → v2.0.0.02026-05-26

### Community

Maintainers

![](https://www.gravatar.com/avatar/7cd3222ff3acc4f4a0d5d216d7c83597a66e7f8249351abd0c54fa8912457d4e?d=identicon)[TitanDvd92](/maintainers/TitanDvd92)

![](https://avatars.githubusercontent.com/u/83184814?v=4)[Ernesto Alejandro Quintero Suárez](/maintainers/ernestoale97)[@ernestoale97](https://github.com/ernestoale97)

---

Tags

laravelsdktradingMMT

### Embed Badge

![Health badge](/badges/mmt-laravel-trading-service-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/mmt-laravel-trading-service-sdk/health.svg)](https://phpackages.com/packages/mmt-laravel-trading-service-sdk)
```

###  Alternatives

[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.2k543.5M2.7k](/packages/aws-aws-sdk-php)[openai-php/laravel

OpenAI PHP for Laravel is a supercharged PHP API client that allows you to interact with the Open AI API

3.7k9.5M90](/packages/openai-php-laravel)[statamic/cms

The Statamic CMS Core Package

4.8k3.6M1.0k](/packages/statamic-cms)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

293.1k](/packages/eslazarev-wildberries-sdk)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3661.3M47](/packages/tencentcloud-tencentcloud-sdk-php)[mozex/anthropic-laravel

Laravel integration for the Anthropic API: facade, config publishing, install command, testing fakes, messages, streaming, tool use, thinking, and batches.

74331.3k1](/packages/mozex-anthropic-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
