aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <marcello.stanisci@inria.fr>2015-05-26 17:56:54 +0200
committerMarcello Stanisci <marcello.stanisci@inria.fr>2015-05-26 17:56:54 +0200
commitcfb8b5fc8000a58abfe16879cf3332d2d0aca8b7 (patch)
tree39b82e24db5c68ec4c3dcd28276460fb1e0ae563
parent8bd435d7ee73bd9cfc3265e161d5e847aac1f5ee (diff)
downloadmerchant-cfb8b5fc8000a58abfe16879cf3332d2d0aca8b7.tar.gz
merchant-cfb8b5fc8000a58abfe16879cf3332d2d0aca8b7.tar.bz2
merchant-cfb8b5fc8000a58abfe16879cf3332d2d0aca8b7.zip
minimal merchant website added
-rw-r--r--src/website/README24
-rw-r--r--src/website/cert.php29
-rw-r--r--src/website/checkout.php194
-rw-r--r--src/website/index.html38
-rw-r--r--src/website/pay.php47
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>