Rakenna · WooCommerce
Rakenna WooCommerce-try-on-lisäosa
Yhdellä lauseella
WooCommerce-lisäosa kutsuu Photta APIa tavallisella HTTP:llä WP-Cron-tapahtumasta, pollaa työtä seuraavalla tickillä ja tuo valmiin kuvan mediakirjastoon.
- Credits: 5 credits resoluutiolla 2K · 6 credits resoluutiolla 4K
- Tyypillinen kesto: 1.5–4 min
- Käsittely: asynkroninen, polling
Jokainen luku tällä sivulla on peräisin Photta-rajapinnan dokumentaatiosta · tarkistettu
PHP SDK:ta ei tarvita. WP-Cron lähettää työn, seuraava tick pollaa sitä ja WP-CLI tuo valmiin kuvan mediakirjastoon.
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')const res = await fetch("https://api.photta.app/api/v1/tryon/apparel", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PHOTTA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}),
});
const { data } = await res.json(); // data.id, data.statusimport os, requests
res = requests.post(
"https://api.photta.app/api/v1/tryon/apparel",
headers={"Authorization": f"Bearer {os.environ['PHOTTA_API_KEY']}"},
json={
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": True,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
},
)
data = res.json()["data"] # data["id"], data["status"]Miten se toimii
Cron-tick, pollaus ja median tuonti
Suunnittele lisäosa, ajoita työ, lähetä, pollaa seuraavalla tickillä, tuo.
Vaihe 1
Suunnittele lisäosa
Yksi jonotaulu, yksi cron-hook, yksi asetussivu avaimelle. Generointia ei koskaan tehdä sivupyynnön aikana, joten mikään ostajan tekemä ei voi jäädä jumiin sen takia.
Vaihe 2
Hanki Photta API -avain
Lue se ympäristömuuttujasta wp-config.php-tiedostossa sen sijaan, että tallentaisit sen options-tauluun, jotta tietokannan vienti ei sisällä tunnustietojasi.
Vaihe 3
Ajoita cron-tapahtuma
Rekisteröi toistuva hook ja ota muutama jonossa oleva tuote suorituskertaa kohden. Sivusto, jolla on todellista liikennettä, saa tiheitä tickejä; hiljainen sivusto vaatii oikean järjestelmätason cronin.
Vaihe 4
Lähetä tuote
Lähetä tuotekuva käyttäen wp_remote_post-funktiota — sama URL, headerit ja JSON-body kuin cURL-esimerkissä. Tallenna palautettu id jonoriville.
Vaihe 5
Pollaa seuraavalla tickillä
Lue tila jokaiselle riville, joka on vielä tilassa processing. Koska tickien välillä on minuutteja, yksi pollaus per tick riittää yleensä; mikään ei tee sleep-kutsua pyynnön sisällä.
Vaihe 6
Tuo kuva
Kun työ on tilassa completed, tuo URL mediakirjastoon ja liitä se tuotteeseen. WP-CLI hoitaa latauksen, joten lisäosa ei koskaan puskuroi tiedostoa.
Lisäosan neljä liikkuvaa osaa
Photta-kutsut muodostetaan API-dokumentaation pohjalta; wp_remote_post ottaa saman URL-osoitteen, headerit ja bodyn.
# wp-config.php holds the key; the plugin reads it with getenv()
# define( 'PHOTTA_API_KEY', getenv( 'PHOTTA_API_KEY' ) );
export PHOTTA_API_KEY="photta_live_xxx"
export PHOTTA_BASE_URL="https://api.photta.app/api/v1"RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/tryon/apparel \
-H "Authorization: Bearer $PHOTTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_type": "top",
"product_images": [
"https://cdn.yourstore.com/products/shirt-front.jpg"
],
"product_back_image": "https://cdn.yourstore.com/products/shirt-back.jpg",
"product_category": "t_shirt",
"mannequin_id": "mnk_f3a9b1",
"pose_id": "pose_c2d4e5",
"background": "https://cdn.yourstore.com/backgrounds/studio-loft.jpg",
"lock_background": true,
"resolution": "2K",
"aspect_ratio": "3:4",
"body_size": "M",
"expression": "neutral",
"user_instruction": "Keep the collar pattern crisp and centered."
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')# $ID is data.id from the POST response. Poll every 3 seconds until status is "completed" or "failed".
for i in $(seq 1 120); do
RESULT=$(curl -s "https://api.photta.app/api/v1/tryon/apparel/$ID" -H "Authorization: Bearer $PHOTTA_API_KEY")
STATUS=$(echo "$RESULT" | jq -r '.data.status')
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && echo "generation failed" && exit 1
sleep 3
done
echo "$RESULT" | jq -r '.data.output_url'# WP-CLI does the download, so the plugin never buffers the file itself
wp media import "$OUTPUT_URL" \
--post_id="$PRODUCT_ID" \
--title="Virtual try-on" \
--featured_imageKehittäjien usein kysymää
WordPress-kehittäjien usein kysymät kysymykset
Onko saatavilla virallista PHP SDK:ta?
Ei. API on puhdasta RESTiä HTTPS:n yli Bearer-headerilla, joten wp_remote_post kattaa kaiken ilman erillistä päivitettävää riippuvuutta.
Miten teen kutsun PHP:stä?
Käytä funktiota wp_remote_post Authorization- ja Content-Type-headereilla sekä JSON-bodylla. Tämän sivun cURL-esimerkki on täsmälleen sama pyyntö, kenttä kentältä.
Miksi generointia ei tehdä sivun latauksen yhteydessä?
Generointi kestää kauemmin kuin sivupyynnön pitäisi. Renderöinti pyynnön aikana tarkoittaa, että ostaja joutuu odottamaan, aikakatkaisu katkaisee sen ja credits-yksiköt kuluvat joka tapauksessa.
Kuinka monta tuotetta yhden ajon tulisi käsitellä?
Ota pieni erä tickiä kohden ja anna jonon tyhjentyä tickien myötä. Tämä pitää jokaisen ajon lyhyenä ja pysyt reilusti julkaistun rate limitin puitteissa.
Mitä epäonnistuneille töille tapahtuu?
Merkitse rivi tilaan failed ja säilytä vastausviestin virhetyyppi. Epäonnistuneen generoinnin credits-yksiköt hyvitetään automaattisesti, joten uudelleenyritys ei veloita kahdesti.
Liittyvät sivut
Aiheeseen liittyvää luettavaa
Ominaisuudet
Virtuaalinen try-on API vaatteille
REST API, joka asettaa vaatteet tekoälymallinukkejen päälle. Asynkroninen, 1.5–4 minuutin generointi, 5 credits resoluutiolla 2K, 6 resoluutiolla 4K. cURL-, Node.js- ja Python-esimerkit.
LuePikaopas
Ensimmäinen Photta-kuva alle viidessä minuutissa.
Rekisteröidy, luo API-avain, suorita ensimmäinen cURL-kutsusi, tee pollingia valmistumiseen asti ja tallenna tulos. Viisi vaihetta, dokumentoitu alusta loppuun.
LueKielet
cURL walkthrough
LueErrors
Lue
Jokainen luku tällä sivulla on peräisin Photta-rajapinnan dokumentaatiosta · tarkistettu
Lisäosa ilman riippuvuuspuuta
Bearer-header, JSON-body, pollaus. Kaikki, mitä WordPress tekee jo valmiiksi.