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')

Miten se toimii

Cron-tick, pollaus ja median tuonti

Suunnittele lisäosa, ajoita työ, lähetä, pollaa seuraavalla tickillä, tuo.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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ä.

  6. 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_image

Kehittä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.

Lisäosa ilman riippuvuuspuuta

Bearer-header, JSON-body, pollaus. Kaikki, mitä WordPress tekee jo valmiiksi.