2 files changed, 41 insertions, 0 deletions
diff --git a/example-essay-store.rst b/example-essay-store.rst
new file mode 100644
@@ -0,0 +1,40 @@
+Example: Essay Store
+The main page of the essay store shows links to essays of the form `/essay?name=:essayname`.
+The `/essay` URL takes the following query parameters:
+ * `name`: mandatory, name of the essay
+ * `tid`: optional, transaction ID generated by the merchant for the
+ contract that was used to purchase an instance of the article
+These are the steps for showing `/essay`. Note that checks for wallet presence are omitted,
+it the wallet is not present in steps 2 and 3, the user agent should be redirected
+to a mock credit card payment page.
+1. The server checks the status of the the essay with the name `name` in the server-side
+ session state
+ * If the essay is marked as payed for the client, display the essay.
+ * Otherwise proceed with step 2
+2. The server checks if the `tid` parameter is present
+ * If `tid` is present, restore the contract to pay for the essay and
+ emit the `taler-execute-contract` DOM event in the user agent.
+ * Otherwise proceed with step 3
+3. The server generates a new contract and emits the `taler-confirm-contract` DOM event in the user agent,
+ with the essay name as repurchase correlation identifier and `/essay?name=:name?tid=:tid` as fulfillment url.
+In step 2, the `taler-execute-contract` event has the following parameters:
+* `H_contract`: hash of the contract that was restored
+* `payment_url`: The internal URL `/pay?H_contract=...` of the essay store, will set the server-side session state
+ for the article associated with the contract hash on successful coin deposit
+* `offer_url`: Link to a teaser page (`/teaser?name=...`), which also contains a link to the article
+ page, without the `tid` parameter.
@@ -50,6 +50,7 @@ the material covered in the *Operator Handbook*.