diff options
-rw-r--r-- | src/website/README | 24 | ||||
-rw-r--r-- | src/website/cert.php | 29 | ||||
-rw-r--r-- | src/website/checkout.php | 194 | ||||
-rw-r--r-- | src/website/index.html | 38 | ||||
-rw-r--r-- | src/website/pay.php | 47 |
5 files changed, 332 insertions, 0 deletions
diff --git a/src/website/README b/src/website/README new file mode 100644 index 00000000..b36911ad --- /dev/null +++ b/src/website/README @@ -0,0 +1,24 @@ +This directory contains the files needed to implment a simple/debug merchant website. + +Only tested on nginx. To run the website, it suffices to have all the files in the same +directory, to have PHP enabled, and to set the following two redirections: + +1. your_site/certal/ => your_site/cert.php +2. your_site/payler/ => your_site/pay.php + +File |What implements +-------------------------------- +o index.html | The "negotiation" view, that is the form + that allows the user to choose the product to buy. + +o checkout.php | The "payment selection" that is the form + that allows the user to choose the payment method he wishes to use. + It also implements the request of certificate and its showing as a + popup window (by JavaScript in it). For debugging purposes, it has a + certificate hardcoded in it. + +o cert.php | Replies with a JSON certificate that is held in a 'session' variable. + +o pay.php | Actual receiving of money, plus it gives back a "fullfillment" page + that informs the user of his well ended deal. + diff --git a/src/website/cert.php b/src/website/cert.php new file mode 100644 index 00000000..b0ab445a --- /dev/null +++ b/src/website/cert.php @@ -0,0 +1,29 @@ +<?php + +/* + + This file is part of TALER + Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/> + +*/ + +// recover the session + session_start(); + if(!isset($_SESSION['contract'])){ + http_response_code(404); + echo "Sorry page.."; + } + else echo $_SESSION['contract']; + +?> diff --git a/src/website/checkout.php b/src/website/checkout.php new file mode 100644 index 00000000..916858a5 --- /dev/null +++ b/src/website/checkout.php @@ -0,0 +1,194 @@ +<html> +<head> +<title>Choose payment method</title> +</head> +<body> + +<!-- + + This file is part of TALER + Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/> + +--> + +<!-- This page has to: + + 1. make known to the customer this transaction ID + + 2. Generate the relevant certificate + + 3. (JavaScript) implement the Pay button implementing only + the Taler payment + + 4. (JavaScript) request the certificate associated with this + ID, through "GET /certal/" + + + --> + +<?php + + // ID generation + $transId = rand(1, 15); + + // embedding trans ID in a hidden input HTML tag + //echo "<input type=\"hidden\" id=\"taler-trans-id\" value=\"$transId\" />"; + + // JSON certificate generation matching the product being sold + $item = $_POST['group0']; + + $toJSON = array('vendor' => "$item provider", 'item' => $item, 'price'=> rand(5, 66) . ' €', 'payUrl' => "http://" . $_SERVER['SERVER_NAME'] . "/payler/"); + + + // save certificate (retrievable through file naming convention) to the disk + // file_put_contents(getcwd() . "/cert." . $transId, json_encode($toJSON)); + + // time-expirable (15') tracking cookie definition + // setcookie("talkie", $transId, time()+ 15*60); + + // create session + + session_start(); + $_SESSION['contract'] = json_encode($toJSON); + + + + +?> + +<form name="tform" action="" method="POST"> +<div id="opt-form" align="left"><br> +<input type="radio" name="group1" value="Lisa">Lisa<br> +<input type="radio" name="group1" value="You Card" checked>You Card<br> +<input type="radio" name="group1" value="Card Me">Card Me<br> +<input id="t-button-id" type="radio" name="group1" value="Taler" disabled="true">Taler<br> +<input type="button" onclick="pay(this.form)" value="Ok"> +</div> +</form> + +<script type="text/javascript"> + + + function pay(form){ + + for(var cnt=0; cnt < form.group1.length; cnt++){ + + var choice = form.group1[cnt]; + + if(choice.checked){ + + if(choice.value == "Taler"){ + + var cert = new XMLHttpRequest(); + + /* request certificate */ + cert.open("GET", "certal/", true); + + cert.onload = function (e) { + + if (cert.readyState == 4) { + + if (cert.status == 200){ + + /* display certificate (i.e. it sends the JSON string + to the (XUL) extension) */ + sendContract(cert.responseText); + + } + + + + else alert("Certificate ready state: " + cert.readyState + ", cert status: " + cert.status); + + } + }; + + cert.onerror = function (e){ + console.error(cert.statusText); + }; + + cert.send(null); + + } + + else alert(choice.value + ": NOT available "); + + } + } + + + }; + + + + + /* the following event gets fired whenever a customer has a taler + wallet installed in his browser. In that case, the webmaster can decide + whether or not displaying Taler as a payment option */ + + function hasWallet(aEvent){ + + var eve = new Event('taler-currency'); + document.body.dispatchEvent(eve); + + /* old way of generating events ; left here in case of portability issues*/ + + /*var tevent = document.createEvent("Events"); + tevent.initEvent("taler-currency", true, false); + document.body.dispatchEvent(tevent);*/ + + + /* embedding Taler's availability information inside the form containing + items to be paid */ + var tbutton = document.getElementById("t-button-id"); + tbutton.removeAttribute("disabled"); + }; + + + + function sendContract(jsonContract){ + + var cevent = new CustomEvent('taler-contract', { 'detail' : jsonContract }); + document.body.dispatchEvent(cevent); + + + + /* old way of generating events ; left here in case of portability issues*/ + + /*var cevent = document.createEvent("Events"); + cevent.initEvent("taler-contract", true, false); + document.body.dispatchEvent(cevent);*/ + + + + }; + + function closeEnd(aEvent){ + + var eve = new Event("taler-unload"); + document.body.dispatchEvent(eve); + + }; + + document.body.addEventListener("taler-wallet", hasWallet, false); + document.body.addEventListener("taler-shutdown", closeEnd, false); + + +</script> + + + +</body> + +</html> diff --git a/src/website/index.html b/src/website/index.html new file mode 100644 index 00000000..b5aace31 --- /dev/null +++ b/src/website/index.html @@ -0,0 +1,38 @@ +<html> +<head> +<title>Merchant</title> +</head> +<body> + +<!-- + + This file is part of TALER + Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/> + +--> + +<form name="tform" action="checkout.php" method="POST"> +<div id="opt-form" align="left"><br> +<input type="radio" name="group0" value="Milk"> Milk<br> +<input type="radio" name="group0" value="Butter" checked="true"> Butter<br> +<input type="radio" name="group0" value="Cheese"> Cheese<br> +<input type="submit" name="keyName" value="Checkout"> +</div> +</form> + +<!--button onclick='sendContract();'>buy</a--> + +</body> + +</html> diff --git a/src/website/pay.php b/src/website/pay.php new file mode 100644 index 00000000..7232c2d5 --- /dev/null +++ b/src/website/pay.php @@ -0,0 +1,47 @@ +<html> +<head> +<title>Fullfillment page</title> +</head> +<body> + + +<?php + +/* + + This file is part of TALER + Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors) + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/> + +*/ + + + /* +// recover the session + session_start(); + if(!isset($_SESSION['contract'])){ +// http_response_code(404); + echo "Sorry.."; + } + else echo "Paid"; + + session_destroy(); + + +*/ +?> + +Payment successful, thanks! + +</body> +</html> |