Simplepay IPN fogadása ASP.NET MVC
2019-03-19T19:16:03+01:00
2019-04-16T14:01:51+02:00
2022-08-11T11:50:31+02:00
tippElek
Sziasztok,

Szeretném a SimplePay-t integrálni egy ASP.NET-es MVC5-ben elkészített webshophoz. Sajnos kicsit elakadtam a megvalósításban.

A kártyaellenőrzés tesztelése sikeresen megtörténik, azonban az IPN fogadás sehogy sem akar sikeres lenni.

A válasz mindig "NOT200" és a HTTP válaszkód pedig 503. Aki csinált már ASP.NET-ben IPN fogadást el tudná magyarázni, hogy kellene pontosan vagy tudna egy példakódot küldeni?
Mutasd a teljes hozzászólást!

  • Szia!

    Nekem is pont ez a problémám. (Elég kezdő vagyok a témában.)
    Én is ASP.NET MVC-vel próbálkozom megcsinálni.

    1.
    Én saját gépen (nem a szerveremen) tesztelném a Simple-t és a kérés küldésnél ilyen IP címet adok meg Backref, meg Timeout url-nek: http://localhost:12345/valami/masvalami ahol "masvalami" a metódus neve. Ezek működnek, megkapom.
    Az IPN url-t a Simple oldalán kell beírni. Na, de mit?

    2. 
    Hogyan kellene visszaküldeni az IPN metódusból ezt: "2016040813427|8a23a1f99f95eaafddf4d35a9671ef3b" ?

    Ha közben megtaláltad a megoldást, nagyon megköszönném, ha megírnád.
    Mutasd a teljes hozzászólást!
  • Több napon is próbáltad már? Mert lehet, hogy csak egy átmeneti hiba.
    Mutasd a teljes hozzászólást!
  • Még egy dolog: PHP példakód van az oldalukon.

    Azért azt meg lehet érteni és át tudod ültetni C#-ra.

    Működő teszt rendszer 15 perc alatt

    A fejlesztés alatt nagyban megkönnyíti a hibakeresést, ha változtatás nélküli SDK-t saját, különálló teszt rendszerként használja. Ebben az esetben, ha a beépített kódjában problémába ütközik, akkor azonnal össze tudja hasonlítani és ellenőrizni tudja, hogy az adott funkció hogyan működik.

    (Fejlesztési dokumentáció)

    Szóval én beizzítanám ezt és utána akár egy Fiddler-rel lehet ellenőrizni, hogy minek kéne történnie.
    Mutasd a teljes hozzászólást!
  • Kösz a tippeket.

    Igen, több napon át próbáltam.
    -----
    Most kezdtem el nézegetni a php-t, de az nem segít. Az IPN url-t ugyebár nem látom benne. A visszaküldésre már van ötletem, csak nem tudom kipróbálni, amíg meg nem hívódik a metódusom.
    Mutasd a teljes hozzászólást!
  • Az IPN url-t ugyebár nem látom benne.

    Beleolvastam a doksiba és bár még csak az elején járok, ilyeneket látok benne:

    Az Instant Payment Notification (IPN) a fizetési tranzakció vége. Ezen a ponton tájékoztatja a SimplePay rendszere a kereskedő webáruházát a tranzakció sikerességéről. Az IPN egy háttér processz a SimplePay és a kereskedő között. Az IPN-t POST metódussal a kereskedő által megadott URL-re küldi ki a SimplePay rendszere. Az IPN üzenet csak a sikeres és teljesíthető tranzakcióról van kiküldve.

    Az IPN URL beállítását a kereskedői vezérlőpanelen (SimplePay - Login) lehet elvégezni. Az adatokat a „Technikai adatok” menüpont alatt lehet beállítani.

    Tehát neked kell biztosítani egy végpontot, ahol fogadni kell a SimplePay POST request-ét.

    Mi történik? Nem kapod meg?
    Mutasd a teljes hozzászólást!
  • Az előzőt a te figyelmedbe is ajánlom.

    Hogy kapsz 503-as hibát, ha a végpontodat a SimplePay hívja?
    Mutasd a teljes hozzászólást!
  • Sziasztok,

    Sikerült megoldanom már korábban.

    Localhost-on nem fogsz tudni IPN hívást fogadni, azt kénytelen vagy a szerveren vagy a tárhelyen tesztelni.

    Azért kaptam 503-as hibát, mert nem jól írtam meg az ActionResult-ot ami fogadja a hívást. A jó megoldás a következő:

    public ActionResult IPN() { string result = ""; try { result = IPNResult(Request); //az IPNResult metódus dolgozza fel a hívást, ebben van az ellenőrzés hogy helyes-e a hash amit küldött a SimplePay } catch (Exception ex) { result = ex.Message; } return Content(result); }
    A Request-ben pedig a következőképpen tudod elérni a vizsgálni kívánt paramétert: Request["ORDERSTATUS"]-> ez például a rendelés státusza.

    Azért raktam try catch-be az IPN hívást, mert így ha hibára fut a rendszer akkor azt a SimplePay admin felületén tudom ellenőrizni.
    Mutasd a teljes hozzászólást!
  • Szia!

    Köszönöm a kódot.
    Igen, attól féltem, hogy tényleg csak a szerveren "élesben" lehet az IPN-t fogadni és így is lett.

    Ugye, a Content megy vissza a Simplepay-nek?
    Ha nem nagy kérés, el tudnád küldeni a Content kódját (alaszloa@gmail.com)?
    Mert a visszajelzés a Simple-nek még érdekes nálam.

    És mi van, ha a Simple-nek küldött visszaigazolás mellet még a felhasználónak is akarnék valamit kiírni?
    Én ezzel próbálkozom:
       HttpClient client = new HttpClient()
       HttpResponseMessage response = await client.PostAsync(Url, cont)
       stb.

    Mert így elküldöm a Simple-nek, majd jöhet a return View() a felhasználónak.
    Csak még nem teszteltem, ugyebár.

    Köszönöm.
    Mutasd a teljes hozzászólást!
  • Szerintem te nem erted az IPN lenyeget. Ebbol a user semmit se lat, ez egy server-server kommunikacio. Neked az IPN altal kell a sajat adatbazisodban frissitened mondjuk egy megrendeles statuszat es ez alapjan esetleg emailt kuldeni a usernek, elinditani a megrendeles kiszallitasat stb.
    Mutasd a teljes hozzászólást!
  • De, értem.
    Csak az a helyzet, hogy a Backref még nem 100%-os siker. Ha nincs utána IPN, akkor bukta.
    Ha Backref-nél kiírom, hogy SIKERES, akkor az nem igaz, ott még várni kell az IPN-re. Illetve a Backref-nél a fizetés sikeres, de még ellenőrzik a csalást, és utána küldik az IPN-t.
    Ezért gondoltam, hogy az IPN után még kiírom, hogy tényleg sikeres és a megrendelés mentve van.
    Biztos van valami nyomós okuk arra, hogy nem a fizetés bonyolítása előtt ellenőrzik a csalást, hanem utána.
    Mutasd a teljes hozzászólást!
  • Most bizonyitottad be, hogy nem erted :D

    Igy nez ki a folyamat:

    - user megnyitja a bongeszoben a webshopot
    - user megnyitja a bongeszoben a fizetesi oldalt
    - user fizet a bongeszoben
    // Eddig a pontig szinkron a folyamat, ezutan pedig ket kulon szalon futnak a dolgok:
    1. a bongeszoben visszairanyitjak a usert a backref url-re
    2. a simple rendszere meghivja az altalad megadott IPN urlt

    Az 1. eset nem minden esetben tortenik meg, mert a user bezarhatja a bongeszot meg a redirect elott. A 2. eset pedig minden esetben meg fog tortenni, meg akkor is, ha a user kitepi a konnektorbol a kabelt, de nem feltetlen fog azonnal megtortenni.

    A lenyeg, hogy az IPN url-t a simple szervere fogja meghivni es nem a user a bongeszoben, tehat te egy szerver alkalmazasnak akarsz visszaadni egy szep viewt? Minek? Nem Icuka fogja nezegetni :)
    Mutasd a teljes hozzászólást!
  • Még kiegészíteném ezekkel, mert elég kritikusnak tűnnek:

    Nagyon fontos tudni, hogy a háttérben az IPN üzenet akár ugyanabban az időben (vagy akár korábban) is megérkezhet, mint ahogy a vásárló a böngészőben visszaérkezik a BackRef oldalra.

    FONTOS: A tranzakciót minden esetben az IPN alapján teljesítse.

    Ez egyben azt is jelenti, hogy ha az Ön rendszerében különálló státuszok tartoznak ezekhez az eseményekhez, akkor az IPN minden esetben legyen magasabb rendű, mint a BackRef, azaz a BackRef státusza soha ne írja felül az IPN státuszát.

    Célszerű lenne alaposan végigolvasni a fejlesztői dokumentációt!
    Mutasd a teljes hozzászólást!
  • Én is pont most írok egy simplepay integrációt (PHP-Symfony). A backref - el semmi mást nem kell csinálni csak tájékoztatni a usert.

    Az IPN az ami valós visszajelzés, ahogy a többiek is írták.

    Van egy ilyen is a doksiban:

    Ezen a ponton a bankkártyás tranzakció már átment a banki kártyaellenőrzésen, illetve a csalásszűrésen. Nagyon fontos, hogy IPN kizárólag csak a sikeres fizetésről van kiküldve. Ha az authorizáció sikertelen volt, akkor már a BackRef-re sikertelen fizetésként érkezett vissza és ott lezáródott a tranzakció.
    Ha sikeres volt a kártya authorizáció, de utána a csalásszűrésen akad meg, akkor a SimplePay ügyfélszolgálata veszi fel a kapcsolatot a kereskedővel és a tranzakció nincs tovább engedve (és nincs IPN üzenet kiküldve) addig, amíg nem tisztázódik az esetleges visszaélés gyanúja.
    Mutasd a teljes hozzászólást!
  • OK. Az IPN-ben csak tárolni kell a megrendelést és visszaküldeni, amit kell.
    Köszönöm a hozzászólásokat és a segítséget mindenkinek.
    Mutasd a teljes hozzászólást!
abcd