Katalog, Verfügbarkeit und Warenkorb-Übernahme per API. Für Preisvergleiche, Apotheken-Tools, Shops und Partnerseiten. Es gibt für jedes System einen Weg.
Ein Download, ein Schlüssel, fertig. Der Button erscheint auf Produktseiten und im Warenkorb.
custom/plugins/ kopieren oder ZIP im Admin hochladen.bin/console plugin:install --activate DoktorfyIntegration{% render %} einfügen.doktorfy.id pro Produkt setzen (oder Barcode als GTIN).Seiten ohne eigenen Server (z. B. Shopify) nutzen einen öffentlichen Schlüssel pk_live_…. Er steht im Seitencode, kann aber nur Warenkörbe anlegen. Wir geben ihn nur für deine Adressen frei (Origin-Prüfung), dazu gelten Limits je Partner und je IP.
fetch("https://doktorfy.de/api/v1/partner/public/carts", {
method: "POST",
headers: { "Content-Type": "application/json", "X-Partner-Public-Key": "pk_live_DEIN_SCHLUESSEL" },
body: JSON.stringify({ ref: "bestellung-123", items: [{ product_id: 3179, grams: 20 }] })
}).then(r => r.json()).then(j => { location.href = j.handoff_url; }); Getestet in einem echten Browser gegen die API: Produkt und Warenkorb führen zur Übernahme, eine nicht freigegebene Adresse wird blockiert, Fehlerfälle zeigen eine Meldung. Die Liquid-Snippets habe ich mit einer Liquid-Engine gerendert, aber nicht in einem Shopify-Shop installiert. WooCommerce (WordPress 6, WooCommerce 11.2, Block-Theme und Block-Warenkorb) und Shopware 6.7.2.2 wurden in echten Installationen geprüft.
Du brauchst keinen Schlüssel, um auf Doktorfy zu verlinken. Jedes Produkt im Katalog hat eine eigene Adresse. Setze sie als Button auf deiner Seite.
Eine Provision lässt sich nur über die Warenkorb-Übernahme zuordnen, nicht über einen normalen Link.
Deine Seite sendet die ausgewählten Produkte an uns. Wir prüfen Bestand und wählen die passende Apotheke. Die Antwort enthält einen Link, auf den du deinen Kunden leitest.
curl -X POST https://doktorfy.de/api/v1/partner/carts \
-H "Authorization: Bearer DEIN_SCHLUESSEL" \
-H "Content-Type: application/json" \
-d '{"ref":"deine-bestellnr","items":[{"product_id":3179,"grams":20}],"mode":"abholung"}' {
"token": "…",
"handoff_url": "https://doktorfy.de/uebernehmen/…",
"expires_at": "…",
"status": "ok"
} Der Link ist 24 Stunden gültig. Der Bestand wird beim Öffnen neu geprüft, weil er sich ändern kann.
Der Aufruf läuft immer auf deinem Server, nie im Browser. So bleibt dein Schlüssel geheim.
<?php
// Beispiel: Button "Bei Doktorfy bestellen"
function doktorfy_handoff(int $productId, int $grams, string $ref): ?string {
$ch = curl_init("https://doktorfy.de/api/v1/partner/carts");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("DOKTORFY_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"ref" => $ref,
"items" => [["product_id" => $productId, "grams" => $grams]],
]),
]);
$res = json_decode((string)curl_exec($ch), true);
return $res["handoff_url"] ?? null;
}
$url = doktorfy_handoff(3179, 20, "bestellung-123");
if ($url) { header("Location: " . $url); exit; } const res = await fetch("https://doktorfy.de/api/v1/partner/carts", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.DOKTORFY_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
ref: "bestellung-123",
items: [{ product_id: 3179, grams: 20 }],
}),
});
const { handoff_url } = await res.json();
// Kunde auf handoff_url weiterleiten curl "https://doktorfy.de/api/v1/partner/catalog?limit=100&available=1" \
-H "Authorization: Bearer DEIN_SCHLUESSEL"
curl "https://doktorfy.de/api/v1/partner/catalog/3179/availability?lat=50.94&lng=6.96&radius_km=50" \
-H "Authorization: Bearer DEIN_SCHLUESSEL" | Aufruf | Zweck |
|---|---|
GET /catalog | Produkte, Parameter limit, cursor, available, form, manufacturer |
GET /catalog/{id}/availability | Apotheken mit Preis, Menge, Abholung, Versand, Express, optional Entfernung |
POST /carts | Warenkorb anlegen, Antwort mit handoff_url |
GET /carts/{token} | Status: open, claimed, expired, ordered |
Du hinterlegst eine https-Adresse. Wir melden cart.claimed (Kunde hat den Link geöffnet) und order.created (Bestellung entstanden, mit order_ref). Jede Meldung ist mit HMAC-SHA256 signiert.
<?php
$body = file_get_contents("php://input");
$sig = $_SERVER["HTTP_X_DOKTORFY_SIGNATURE"] ?? "";
$calc = "sha256=" . hash_hmac("sha256", $body, getenv("DOKTORFY_WEBHOOK_SECRET"));
if (!hash_equals($calc, $sig)) { http_response_code(401); exit; }
http_response_code(200); // sonst Wiederholung nach 1 min, 5 min, 30 min, 2 h, 12 h Schreib uns kurz, wofür du die API nutzen willst. Du bekommst deinen Schlüssel und einen Ansprechpartner.
Integration anfragen →Ratgeber, klinische Updates und Angebote vom Doktorfy-Team. Kein Spam. Jederzeit abbestellbar.