Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

payment via mobile app #17

Closed
18 tasks done
mgmax opened this issue Jun 20, 2015 · 26 comments
Closed
18 tasks done

payment via mobile app #17

mgmax opened this issue Jun 20, 2015 · 26 comments
Milestone

Comments

@mgmax
Copy link
Member

mgmax commented Jun 20, 2015

  • dummy code for workflow
  • HTTP JSON connection: polling and fetching cart
  • make configurable, document all settings: enable, server, app-url, etc.
  • document interface to server
  • test it
  • improve exception handling:
    • server down
    • Wenn App Server nicht erreichbar, kommt keine Fehlermeldung .
      • Und beim Abbrechen hängt sich die GUI auf.
    • exit cart importing on error TODO
  • sanity checks
    • filter invalid answers TODO
    • filter broken JSONs
      • don't add products with negative prices -> WONTFIX, user could do this anyway
    • don't import non existing products
  • app-server: add API key as "password protection"
  • app-server: forbid updating already used cart ids
  • app-server: self-signed SSL for HTTPS #54 app-server: use https
@mgmax mgmax self-assigned this Jun 25, 2015
mgmax added a commit that referenced this issue Jun 27, 2015
@mgmax mgmax removed their assignment Jun 27, 2015
@mgmax
Copy link
Member Author

mgmax commented Jun 27, 2015

Prinzipiell geht es jetzt, aber man sollte es noch ausführlich testen, insb. die oben beschriebenen doofen Fälle. Ohne echtes Gerät geht das Testen aber nicht gescheit, weil man da nicht den QRCode einlesen kann.

@sedrubal
Copy link
Member

wow das geht echt gut :D

@sedrubal
Copy link
Member

allerdings verwirrt der 2. QR Code und das Verhalten der App ist nicht schön, wenn man aus Versehen den unteren einscannt... Vllt. erst einblenden, wenn man nen Button drückt?

@sedrubal
Copy link
Member

Wenn die Kasse aufgrund eines Fehlers abstürtzt, bekommt das die App nicht mit. Vielleicht will man auf Kurz oder Lang einen "background Worker" einbauen, der als eigenständiger Prozess kritische Tasks ordentlich verarbeitet und nicht so leicht abstürtzt, wie der Rest. Der könnte dann z.B. dem Server den Absturz melden und in der App kommt eine Erinnerung, dass man den Fehler melden will...

@mgmax
Copy link
Member Author

mgmax commented Jun 27, 2015 via email

@mgmax
Copy link
Member Author

mgmax commented Jun 28, 2015

@sedrubal der QR Dialog ist jetzt etwas schöner. Den Rest überlasse ich dir als Qt-Lernaufgabe :)

@sedrubal
Copy link
Member

👍

@sedrubal
Copy link
Member

sedrubal commented Jul 2, 2015

App Bezahlung scheint jetzt gar nicht mehr zu gehen? Die Kasse pollt die ganze Zeit, aber bekommt keinen Warenkorb vom Server. gibt's da eig. nen Timeout, dass nicht unendlich pollt?

@nightvisi0n
Copy link
Member

@sedrubal Funktioniert bei mir auch seit vorgestern nicht mehr.

@mgmax
Copy link
Member Author

mgmax commented Jul 5, 2015

mit einer alten Version der App ca vom 27.6. (als debug build, fest auf code 1234 gestellt) geht es bei mir weiterhin. Liegt also wohl nicht an unserem Code.

@mgmax
Copy link
Member Author

mgmax commented Jul 5, 2015

@jneureuther @sedrubal könnt ihr mal die App gegen die "Referenzimplementierung" für das Kassenterminal-API testen?
http://ec2-52-28-16-59.eu-central-1.compute.amazonaws.com/checkoutDummy/

@nightvisi0n
Copy link
Member

@mgmax habe gerade die aktuelle Developmentversion[1] der App gegen die "Referenzimplementierung" getestet, funktioniert nicht.

[1] FAU-Inf2/fablab-android@dfe9ce1

@mgmax
Copy link
Member Author

mgmax commented Jul 6, 2015

Ich hab letztens eine Fehlerbehandlung für nicht existierende Produkte ergänzt. Beim Testen sollten jetzt eigentlich (TM) keine Abstürze mehr auftreten, außer es wurde irgendwo was aus Versehen nicht abgefangen.

@sedrubal
Copy link
Member

  • Eine falsche app URL, von der Error 404 zurück kommt wird nicht als falsche URL erkannt.

@sedrubal
Copy link
Member

  • Wenn App Server nicht erreichbar, kommt keine Fehlermeldung
    • Und beim Abbrechen hängt sich die GUI auf.

@sedrubal: Anmerkung Patrick: Kannst du bitte Schritte zum Nachvollziehen aufzeigen? Ich konnte diesen Fehler heute nicht reproduzieren.

@patkan: Schritte zum Aufhängen:

  • Suche IP/URL, die es nicht gibt; gerade funktionierte 123.234.165.142
  • In config eintragen
  • Import starten und abbrechen

Fehlermeldung erscheint mittlerweile im stdout, aber nicht in der GUI

(Punkte zum Abhaken hab ich oben eingetragen)

@sedrubal sedrubal assigned gr7ffo and unassigned gr7ffo Jul 13, 2015
@gr7ffo gr7ffo assigned gr7ffo and unassigned gr7ffo Jul 13, 2015
patkan added a commit that referenced this issue Jul 14, 2015
 * recognize HTTP errors and return False in MobileAppCartModel.load()
 * ADD debug messages to JSONDecodeError and RequestError
 * relevant to #17
@patkan
Copy link
Member

patkan commented Jul 14, 2015

Wie will man unterscheiden zwischen zB Server kaputt und Server wartet noch?

@sedrubal
Copy link
Member

Im Idealfall schon, aber dann müsste ein funktionierender Server irgendwas zurückgeben...

patkan added a commit that referenced this issue Jul 14, 2015
 * recognize HTTP errors and return False in MobileAppCartModel.load()
 * ADD debug messages to JSONDecodeError and RequestError
 * improve comment on function
 * relevant to #17
@mgmax
Copy link
Member Author

mgmax commented Jul 15, 2015

@sedrubal kann ich nur bedingt nachvollziehen. Wenn ich http://4.5.6.7/ als URL einstelle, braucht die HTTP-Anfrage immer 10s bis zum Timeout und währenddessen blockiert die GUI. Mit 10s Verzögerung reagiert sie aber auf Eingaben. Ich weiß nicht ob man bei cart_model.load() einen kleineren Timeout einbauen will, aber eigentlich ist das auch egal.

patkan added a commit that referenced this issue Jul 15, 2015
 * recognize HTTP errors and return False in MobileAppCartModel.load()
 * ADD debug messages to JSONDecodeError and RequestError
 * improve comment on function
 * relevant to #17
@mgmax
Copy link
Member Author

mgmax commented Jul 15, 2015

@patkan habe noch die Exception-Info in die Meldung dazu gepackt und es nach development gepusht

@patkan
Copy link
Member

patkan commented Jul 15, 2015

👍

@sedrubal
Copy link
Member

@mgmax in den 10 Sekunden sollte die GUI nicht blockieren... Ich sag nur MVVM ;) Aber ich denke, das sind jetzt mehr Schmerzen, als dass es was bringt...

@sedrubal
Copy link
Member

Negative Stückzahlen lassen das Terminal sterben.

Test-JSON:

{"cartCode":"2638286801899210886","items":[{"id":44,"productId":"9011","amount":-5.0}],"status":"PENDING","pushId":"000","sentToServer":1437080976055}

@sedrubal
Copy link
Member

Dazu kommt:

  • Alle Antworten (http Status Code 200 aber sonst kein sinnvoller Inhalt) führen nicht dazu, dass der Vorgang abgebrochen wird
  • Erweiterung zu Kommentar von gerade: JSONs, die nicht valide sind, bringen das Terminal zum Absturz

ist oben in der Liste ergänzt...

(Testen kann man sowas gut, wenn man als AppServer http://0.0.0.0:8000 in die config einträgt und dann irgendwo mit python -m SimpleHTTPServer einen Webserver startet. Anhand der stdout-Ausgaben kann man in dem Ordner, wo der Server läuft, die Datei reinlegen, wonach das Terminal gerade sucht)

sedrubal pushed a commit that referenced this issue Jul 17, 2015
@sedrubal
Copy link
Member

Zum Testen kann - wie gesagt - SimpleHTTPServer verwendet werden. Dazu hab ich noch dieses Skript gebaut, mit dem man schnell und einfach ein JSON mit passender cart_id / cartCode bauen kann: ./makeCart.py <id>

#!/usr/bin/env python

import json
from sys import argv
import time

id = int(argv[1])

data = {}
data["cartCode"] = id
data["items"] = []

product = {}
product["id"] = 44
product["productId"] = "9011"
product["amount"] = "5.0"

data["items"].append(product)
data["status"] = "PENDING"
data["pushId"] = "000"
data["sendToServer"] = int(time.time())

f = open(str(id), "w")
f.write(json.dumps(data))
f.close()

@patkan
Copy link
Member

patkan commented Sep 5, 2015

Für "Wenn App Server nicht erreichbar, kommt keine Fehlermeldung . " könnte man noch die Anzahl der Fehlversuche zählen und nach n abbrechen. Oder wontfix, Meinungen?

patkan added a commit that referenced this issue Sep 5, 2015
 * raise Exception when no API-key is specified in config
   * relevant to #63
 * raise Exception when num_retries times the HTTP-requests fail
   * relevant to #17
 * catch the new Exceptions in GUI and inform the user (and abort cart import)
@patkan
Copy link
Member

patkan commented Sep 5, 2015

@mgmax, @sedrubal, @jneureuther Ich würde sagen wir sind fertig :-)
Schaut mal bitte drüber. Falls alles passt, können wir das Feature schon jetzt anschalten

@patkan patkan closed this as completed Sep 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants