merchant-frontend-examples

ZZZ: Inactive/Deprecated
Log | Files | Refs

commit 7830e8bab3954e3aac8195854224d972a9b38f9e
parent 3c196d954431c4287852dac18443e2c552137e4a
Author: Marcello Stanisci <marcello.stanisci@inria.fr>
Date:   Mon, 27 Mar 2017 22:28:11 +0200

python example shows order id on fulfillment page

Diffstat:
Mpython/example/example.py | 19+++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/python/example/example.py b/python/example/example.py @@ -7,6 +7,7 @@ import os import logging import json from random import randint +from datetime import datetime app = flask.Flask(__name__) @@ -16,7 +17,7 @@ logger = logging.getLogger(__name__) CURRENCY = "PUDOS" BACKEND_URL = "http://backend.test.taler.net/" -def make_url(page, query_params=dict()): +def make_url(page, *query_params): """ Return a URL to a page in the current Flask application with the given query parameters (sequence of key/value pairs). @@ -48,9 +49,9 @@ def donate(): def generate_proposal(): DONATION = amount.string_to_amount("0.1:%s" % CURRENCY) MAX_FEE = amount.string_to_amount("0.05:%s" % CURRENCY) - ORDER_ID = str(randint(0, 999999)) + ORDER_ID = "tutorial-%X-%s" % (randint(0, 0xFFFFFFFF), datetime.today().strftime("%H_%M_%S")) order = dict( - order_id = ORDER_ID, + order_id=ORDER_ID, nonce=flask.request.args.get("nonce"), amount=DONATION, max_fee=MAX_FEE, @@ -62,7 +63,7 @@ def generate_proposal(): price=DONATION, ), ], - fulfillment_url=make_url("/fulfillment", query_params=dict(order_id=ORDER_ID)), + fulfillment_url=make_url("/fulfillment", ("order_id", ORDER_ID)), pay_url=make_url("/pay"), merchant=dict( instance="tutorial", @@ -79,7 +80,6 @@ def generate_proposal(): logger.error("failed to POST to '%s'", url) return r.text, r.status_code proposal_resp = r.json() - flask.session["order_id"] = ORDER_ID return flask.jsonify(**proposal_resp) @@ -87,7 +87,7 @@ def generate_proposal(): def fulfillment(): paid = flask.session.get("paid", False) if paid: - return "Thank you!" + return "Thank you! Your order id is: <b>%s</b>." % flask.session["order_id"] response = flask.Response(status=402) response.headers["X-Taler-Contract-Url"] = make_url("/generate-contract") @@ -103,14 +103,13 @@ def pay(): if deposit_permission is None: e = flask.jsonify(error="no json in body") return e, 400 - if (flask.session["order_id"] != deposit_permission["order_id"]): - e = flask.jsonify(error="Attempting to pay a product different \ - from the ordered one (%s != %s)" % (flask.session["order_id"], deposit_permission["order_id"])) - return e, 406 + r = requests.post(urljoin(BACKEND_URL, 'pay'), json=deposit_permission) if 200 != r.status_code: return r.text, r.status_code + proposal_data = r.json()["proposal_data"] flask.session["paid"] = True + flask.session["order_id"] = proposal_data["order_id"] return flask.Response(status=200)