Weclapp
Anbindung an Weclapp — das Cloud-ERP, in dem alle Stamm- und Bewegungsdaten gehalten werden. Die common-api …
- spricht die Weclapp REST-API über
WeclappApiService(API-Key in Headers), - empfängt Webhooks unter
/api/v1/weclapp/webhooks(IP-Whitelist), - lädt Mail-Templates über
WeclappMailTemplateServiceund rendert sie viaWeclappTemplateRendererService(für den Grenke-MissingInfo-Mailflow).
Stack
Inhalt
- ApiService — REST-Wrapper mit Custom-Attribute-Logik
- Webhooks — Inbound-Events von Weclapp, IP-gesichert
- Mail-Template-Service — Templates per ID laden
- Template-Renderer —
..variable..und[[if]]-Syntax → Blade - Helper —
getWeclappModel(),getCustomAttribute(), …
Konfiguration
.env:
WECLAPP_BASE_URL="https://bluesafety.weclapp.com/webapp/api/v1/"
WECLAPP_API_KEY="<api-key>"
WECLAPP_WEBHOOK_SECRET="<random-shared-secret>"
WECLAPP_TIMEOUT=30
WECLAPP_CONNECT_TIMEOUT=10
config/services.php:
'weclapp' => [
'base_url' => rtrim(env('WECLAPP_BASE_URL'), '/') . '/',
'api_key' => env('WECLAPP_API_KEY'),
'webhook_secret' => env('WECLAPP_WEBHOOK_SECRET'),
'timeout' => env('WECLAPP_TIMEOUT', 30),
'connect_timeout' => env('WECLAPP_CONNECT_TIMEOUT', 10),
],
Routen
# IP-Whitelist (3.73.185.97 = Weclapp Webhook-Server)
GET|POST /api/v1/weclapp/webhooks
# Sanctum
GET /api/v1/weclapp/show/{model?}/{entity?}/{value?}
GET /api/v1/weclapp/setup/{model?}
GET /api/v1/weclapp/get
GET /api/v1/weclapp/update/{model?}/{entity?}/{value?}
GET /api/v1/weclapp/entityPullAttr/{...} # custom-attr von Weclapp ziehen
GET /api/v1/weclapp/entityPushAttr/{...} # custom-attr in Weclapp pushen
GET /api/v1/weclapp/mfrPost/{request?} # Trigger MFR ↔ Weclapp Sync
Die
show/setup/get/update-Routen leben inWeclappControllerund sind primär für interne Sync-Tools / CLI-Aufrufe gedacht.
Eloquent-Modelle
Im Verzeichnis app/Models/Weclapp/ liegen ~150 Eloquent-Modelle, die direkt gegen die Weclapp-DB sprechen (über das geccomedia/weclapp-Package, das Weclapp REST → Eloquent abstrahiert).
use App\Models\Weclapp\Customer;
$customer = Customer::where('company', 'Artur Zeier')->firstOrFail();
Mass-Assignment
$customer = new Customer();
Customer::unguard();
$customer->fill(['partyType' => 'ORGANIZATION']);
Customer::reguard();
Sub-Entities
use App\Models\Weclapp\Comment;
$comments = Comment::whereEntity('customer', 123)->orderByDesc()->get();
Logging
use App\Http\Controllers\Weclapp\Connection;
app(Connection::class)->enableQueryLog();
Customer::create(['name' => 'Test']);
app(Connection::class)->getQueryLog();
Welche Modelle es gibt, kannst du in
Helper::getWeclappModel()oder direkt imapp/Models/Weclapp/-Ordner sehen — vonaccountTransactionbisweclappOs.