Inloggade kunder i din webbutik

Inloggade kunder i din webbutik

Kopiera sidan

Låt endast inloggade kunder anropa en webhook via din butiks domän, inaktivera den direkta URL:en och hämta det verifierade kund-ID:t i Shopify Flow.

Anropa en webhook från din egen webbutik och se vilken kund som skickade den. Ett grossistbeställningsformulär, en knapp för återbeställning på en B2B-kontosida eller ett förfrågningsformulär för inloggade kunder kan starta ett Shopify Flow-arbetsflöde, och arbetsflödet tar emot ID:t för den kund som är inloggad. Shopify signerar det ID:t, så att ingen kan utge sig för att vara en annan kund.

Detta bygger vidare på app-proxyns URL, se CORS, appens proxy-URL och webbläsarens anrop.

Ställ in det

  1. Öppna webhooken och gå till Avancerade inställningar.
  2. Under ”URL-inställningar” aktiverar du alternativet ”Använd appens proxy-URL”. Webhook-URL:en finns nu på din butiks domän, till exempel https://your-store.com/apps/webhooks/abc123.
  3. Under ”Vem kan anropa denna webhook?” väljer du ett av tre alternativ:
Alternativ Appens proxy-URL Direktlänk till appen
Alla som har webbadressen Fungerar för alla Verk
Endast via din butiks domän Fungerar för alla, även gäster Avvisat med felkod 403
Endast kunder som är inloggade i din butik Fungerar för inloggade kunder; gäster får felmeddelande 401 Avvisat med felkod 403
  1. Spara. Inställningen gäller för nästa förfrågan.
Avancerade inställningar, URL-inställningar: Alternativet ”Använd appens proxy-URL” är aktiverat och ”Vem kan anropa denna webhook” är inställt på ”Endast kunder som är inloggade i din butik”
Inställningen finns under Avancerade inställningar > URL-inställningar, precis under växeln för appens proxy-URL.

Vad appen kontrollerar

Varje förfrågan som skickas via appens proxy-URL innehåller en signatur från Shopify. Appen kontrollerar följande, i denna ordning:

  • Signaturen. En begäran utan en giltig Shopify-signatur avvisas med felkod 401. Ingen kan förfalska den, eftersom Shopify skapar den med din apps hemliga nyckel.
  • Din butik. En begäran som är undertecknad för en annan butik avvisas med felkod 403.
  • Den inloggade kunden. När endast kunder som är inloggade i din butik tillåts avvisas en förfrågan utan inloggad kund med felkoden 401 (customer_login_required). Kund-ID:t hämtas från signaturen, aldrig från förfrågans huvuddel.
  • Den direkta URL:en. Oavsett vilken begränsning som gäller returnerar appens direkta URL ett 403-fel (proxy_required), så att ingen kan kringgå dessa kontroller.

En avvisad begäran når aldrig Shopify Flow och räknas inte in i ditt abonnemang.

Vad Shopify Flow tar emot

Webhook-utlösaren och synkroniseringswebhook-utlösaren har ett fält som heter customerId: det numeriska ID:t för den inloggade kunden, till exempel 7350001. Fältet är tomt för gäster och för alla förfrågningar som inte har skickats via appens proxy-URL. Dina mappade fält skickas som vanligt, se Kartläggning av nyttolast och Shopify Flow-variabler.

Ring från din butik

Begäran måste skickas från en sida i din butik medan kunden är inloggad, så att den går via din butiks domän. Kopiera webhook-URL:en från appen: Shopify låter dig ändra proxyvägen, så din kan skilja sig från exemplet. Det här kodavsnittet i en temasektion skickar företagets adress som B2B-kunden köper åt:

sections/wholesale-request.liquidhtml
<script>
  fetch('/apps/webhooks/abc123', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      companyLocationId: 'gid://shopify/CompanyLocation/{{ customer.current_location.id }}'
    })
  })
</script>

Koppla fält 1 till companyLocationId så att arbetsflödet får platsuppgiften som fieldOne.

Checka in kunden i Shopify Flow

Shopify Flow kan läsa all information om kunden, så kontrollen hör hemma i arbetsflödet:

  1. Utlösare: Webhook-utlösare från Workflow Webhooks. Om du har flera webhooks lägger du till ett villkor: Webhook-ID:t ska stämma överens med det ID som visas i appen.
  2. Hämta kunddata med sökfrågan id:{{customerId}}. Shopify Flow hämtar uppgifter om den inloggade kunden, inklusive taggar och företagsroller.
  3. Villkor: kunden har taggen wholesale, och en av kundens företagskontaktprofiler har en rolltilldelning där företagets plats-ID är lika med fieldOne och där rollen är Ordering only eller Location admin.
  4. I så fall: utför dina åtgärder, till exempel skapa ett orderutkast för den platsen. I annat fall: avbryt, eller skicka ett svar till webbgränssnittet med Synkron respons, så att sidan kan förklara orsaken för kunden.

Bra att veta

  • Appens proxy-URL kräver att din webbutik är tillgänglig. För en lösenordsskyddad webbutik svarar den först efter att lösenordet till webbutiken har angetts.
  • Gästerna får svar 401, så visa en inloggningslänk på den sidan.
  • Historiken visar kund-ID för varje förfrågan, och vid en återuppspelning skickas det på nytt.
  • När en kund begär att deras uppgifter ska raderas, raderas de historikposter som de har skickat in.