Dynamicweb eCommerce fornyelse i Notification på Completed Order

I mit arbejde med den nye indkøbskurv også kaldet “Cart V2″ er jeg stødt ind i en nyhed omkring en Notification på når en Order (Cart) er Completed og dermed gennemført, som kostede en del grå hår, så jeg håber jeg kan spare dine.

Gå direkte til løsningen

Nyheden i Dynamicweb eCommerce Cart V2

Til Cart v2 er der kommet en ny Notification Subscriber “Dynamicweb.Ecom7.Cart.Notifications.CheckoutDoneOrderIsComplete”. Denne bliver fyret af, når ordren er betalt i mit tilfælde og kunden dermed har gennemført sin ordre.

Så jeg skulle implementere en ellers triviel lille detalje når en ordre var betalt, så skulle jeg lige sende en mail ud til kunden, så jeg gemte nogle indstillinger i brugerens Session under checkout og ville så udføre følgende når ordre.

public override void OnNotify( string notification, Dynamicweb.Extensibility.NotificationArgs args )
{
    string settings = HttpContext.Current.Session["settings"].ToString();
    SendMail(settings);
    base.OnNotify( notification, args );
}

Altså at tage fat i min Session igen og så sende en e-mail ud, men min detalje fejlede konsekvent! ARGH! Nå, jeg tjekkede ecom log’en jeg tjekkede ordre loggen og sidst måtte jeg lige lave min egen lille try/catch:

public override void OnNotify( string notification, Dynamicweb.Extensibility.NotificationArgs args )
{
    try
    {
        string settings = HttpContext.Current.Session["settings"].ToString();
        SendMail(settings)
    }
    catch ( Exception ex )
    {
        LogToFile.Log( ex.ToString(), "/eCom/CheckoutHandler/CustomLog", LogToFile.LogType.ManyEntriesPerFile );
    }
    base.OnNotify( notification, args );
}

Løsningen til Cart V2

Og så fandt jeg ud af, at min Session ikke eksisterede! Den var null, ØV, hvordan nu det?

Jo, efter noget grundig eftertænksomhed, fandt jeg frem til, at denne Notification ikke bliver fyret af af min brugers browser!!! Men af et “callback” fra min betalings-gateway i dette tilfælde “Quick Pay”, det fandt jeg ud af, ved at kontrollere REMOTE_ADDR server variablen.

Så prøv at huske følgende:

Hvis du arbejder med Cart V1 i Dynamicweb eCommerce, så har du en Notfication Subscriber på “Dynamicweb.Notifications.eCommerce.Order.Steps.Completed” og denne bliver altså fyret af af din brugers browser.

Hvis du arbejder med Cart V2 i Dynamicweb eCommerce, så har du en Notification Subscriber på “Dynamicweb.Ecom7.Cart.Notifications.CheckoutDoneOrderIsComplete”, og denne bliver altså fyret af af din betalings-gateways server, hvis du altså har online betaling på selvfølgelig.

Jeg håber denne blogpost kan spare dig for lidt grå hår og CPU forbrug i knolden!

, , ,

6 Kommentarer

  • […] This post was mentioned on Twitter by Janus L, Kevin Steffer. Kevin Steffer said: Blog: Ordrer i Dynamicweb eCom gennemføres nu af betalingsgatewayens callback, men det er nyt http://bit.ly/acxi0d […]

  • Har igennem lang tid kæmpet med dilemmaet om, hvornår man skal konvertere en basket til en ordre (i andre systemer). Skal det gøres på callback siden, eller på ordrekvitteringen? Og hvad hvis shoppen skal understøtte f.eks. bankoverførsler? Skal man så til at lave sit eget “callback”?

    Fedt at høre hvordan/hvornår DW gør det.

  • Kevin Steffer siger:

    @Søren, callbacks er i min optik en sikkerhedsforanstaltning ved at brugerens browser kan gå ned mellem at betalingen er registreret hos betalingsudbyderen og så shoppens kvitteringsside, så jeg synes, at med onlinebetaling med kreditkort, hvor det kan styres i checkout-forløbet, så giver det mening at callback’et gennemfører ordren.
    I alle andre tilfælde, om det er pr. efterkrav, eller du vil afvente en bank-afstemning, så er du jo nødt til at at gennemføre ordren, for at kunden får en ordrebekræftelse med info om levering og der samtidigt kan tages forbehold for manglende betaling – hvad har du ellers gjort i dine løsninger?

  • Lars Hejgaard Sørensen siger:

    Hej Kevin,

    Hyggeligt lige at hilse på dig i torsdags:)

    Så vidt jeg husker, er der visse gateways, der understøtter, at du kan sende brugerens aktuelle cookie informationer med, som betalings gatewayen så bruger til at imitere brugerens aktuelle session med, når den foretager kaldet til webserveren for at konfirmere betalingen. Jeg kan ikke huske, om QuickPay understøtter dette, men hvis de gør, kan det muligvis få din kode til at fungere efter hensigten:)

    Mvh.
    Lars

  • Kevin Steffer siger:

    @Lars, ja i lige måde!
    Gud ja, den feature med at gatewayen kan bruge brugerens sessions og cookies i deres callback har jeg vist stødt på før – det må jeg lige se om QuickPay understøtter, tak for dit hint!

  • Lars Hejgaard Sørensen siger:

    Any time. Sig lige til, hvis du bliver klogere på det;-)

    /Lars

Skriv et svar

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>