Integracion con SAP Business One
Por que SAP
SAP Business One es el ERP de referencia para empresas medianas del sector logistico en Europa. Su estandar en facturacion electronica (S/4HANA) y su integracion con aduanas lo hacen ideal para transporte internacional.
Lo que puedes integrar
| Proceso | API Cargoffer | API SAP B1 |
|---|---|---|
| Facturas venta | contract.signed | Invoices (POST) |
| Clientes | company/contracts | BusinessPartners |
| Proveedores (transportistas) | truckers/ | Suppliers |
| Pagos | payment.received | IncomingPayments |
Conexion via Service Layer
SAP Business One expone una API REST llamada Service Layer. Necesitas:
- Servidor SAP con Service Layer habilitado
- Credenciales de empresa (CompanyDB, UserName, Password)
- Licencia para integraciones API
Autenticacion
bash
curl -X POST "https://tu-sap-server:50000/b1s/v1/Login" \
-H "Content-Type: application/json" \
-d '{
"CompanyDB": "TuEmpresa",
"UserName": "manager",
"Password": "tu_password"
}'La respuesta incluye un cookie de sesion (B1SESSION) que usaras en las siguientes llamadas.
Guia paso a paso: Factura desde contrato
Paso 1: Configurar webhook en Cargoffer
bash
curl -X POST "https://api.pro.cargoffer.com/api/webhook" \
-H "Authorization: Bearer *** \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-sap-server:50000/webhook/cargoffer",
"events": ["contract.signed"]
}'Paso 2: Buscar cliente en SAP por CIF
bash
curl -X GET "https://tu-sap-server:50000/b1s/v1/BusinessPartners?\$filter=CardCode eq 'A12345678'" \
-H "Cookie: B1SESSION=tu_session_id"Si no existe, lo creas:
bash
curl -X POST "https://tu-sap-server:50000/b1s/v1/BusinessPartners" \
-H "Cookie: B1SESSION=tu_session_id" \
-H "Content-Type: application/json" \
-d '{
"CardCode": "A12345678",
"CardName": "Cliente SA",
"CardType": "C",
"FederalTaxID": "A12345678",
"Currency": "EUR"
}'Paso 3: Crear factura
bash
curl -X POST "https://tu-sap-server:50000/b1s/v1/Invoices" \
-H "Cookie: B1SESSION=tu_session_id" \
-H "Content-Type: application/json" \
-d '{
"CardCode": "A12345678",
"DocDate": "2026-06-17",
"DocDueDate": "2026-07-17",
"DocumentLines": [{
"ItemCode": "TRANSPORTE",
"Quantity": 1,
"UnitPrice": 1250.00,
"WarehouseCode": "01",
"AccountCode": "70500001"
}],
"Comments": "Transporte SRV-2026-001 Madrid-Barcelona"
}'Paso 4: Python con requests
python
import requests
class SAPConnector:
def __init__(self, server, company, user, password):
self.base = f"{server}/b1s/v1"
self.session = requests.Session()
# Login
r = self.session.post(f"{self.base}/Login", json={
"CompanyDB": company,
"UserName": user,
"Password": password
})
self.session_id = r.cookies.get("B1SESSION")
def crear_factura(self, contrato):
"""Crea una factura en SAP desde un contrato de Cargoffer."""
factura = {
"CardCode": contrato["client"]["cif"],
"CardName": contrato["client"]["name"],
"DocDate": contrato["date"],
"DocumentLines": [{
"ItemCode": "TRANSPORTE",
"Quantity": 1,
"UnitPrice": contrato["amount"]
}],
"Comments": f"Transporte {contrato['serviceCode']}"
}
r = self.session.post(f"{self.base}/Invoices", json=factura)
return r.status_code, r.json()Caso de uso: Importacion masiva de contratos
Al cierre del mes, puedes exportar todos los contratos de Cargoffer y crear las facturas en SAP Business One de forma masiva:
python
TOKEN=*** = SAPConnector("https://tu-sap-server:50000", "Empresa", "admin", "pass")
# Obtener todos los contratos del mes
r = requests.get(
"https://api.pro.cargoffer.com/api/company/contracts/",
headers={"Authorization": f"Bearer {TOKEN}"}
)
for contrato in r.json():
status, result = sap.crear_factura(contrato)
print(f"{contrato['serviceCode']}: HTTP {status} - {'OK' if status == 201 else 'ERROR'}")