merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit d972af515950c2df6b677f631db674757d74684a
parent 5104ecf39a713f318862135628e70a5fb63fecae
Author: Florian Dold <florian@dold.me>
Date:   Mon, 17 May 2021 12:47:57 +0200

JS: make sure we retry only once per failed attempt

Diffstat:
Mcontrib/offer_refund.en.must | 11+++++++++--
Mcontrib/offer_tip.en.must | 11+++++++++--
Mcontrib/request_payment.en.must | 19+++++++++++++------
3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/contrib/offer_refund.en.must b/contrib/offer_refund.en.must @@ -93,6 +93,13 @@ body { checkUrl.searchParams.set("await_refund_obtained", "yes"); let delayMs = 500; function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } let req = new XMLHttpRequest(); req.onreadystatechange = function () { if (req.readyState === XMLHttpRequest.DONE) { @@ -106,11 +113,11 @@ body { console.error("could not parse response:", e); } } - setTimeout(check, delayMs); + setTimeout(retryOnce, delayMs); } }; req.onerror = function () { - setTimeout(check, delayMs); + setTimeout(retryOnce, delayMs); } req.open("GET", checkUrl.href); req.send(); diff --git a/contrib/offer_tip.en.must b/contrib/offer_tip.en.must @@ -92,17 +92,24 @@ body { let checkUrl = "{{& tip_status_url }}"; let delayMs = 500; function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } let req = new XMLHttpRequest(); req.onreadystatechange = function () { if (req.readyState === XMLHttpRequest.DONE) { if (req.status === 410) { window.location.reload(true); } - setTimeout(check, delayMs); + setTimeout(retryOnce, delayMs); } }; req.onerror = function () { - setTimeout(check, delayMs); + setTimeout(retryOnce, delayMs); } req.open("GET", checkUrl); req.send(); diff --git a/contrib/request_payment.en.must b/contrib/request_payment.en.must @@ -89,10 +89,17 @@ body { <body> <script> - let delayMs = 60000; + let longpollDelayMs = 60000; let checkUrl = new URL("{{& order_status_url }}"); - checkUrl.searchParams.set("timeout_ms", delayMs.toString()); + checkUrl.searchParams.set("timeout_ms", longpollDelayMs.toString()); function check() { + let retried = false; + function retryOnce() { + if (!retried) { + retried = true; + check(); + } + } let req = new XMLHttpRequest(); req.onreadystatechange = function () { if (req.readyState === XMLHttpRequest.DONE) { @@ -123,20 +130,20 @@ body { console.error("could not parse response:", e); } } - setTimeout(check, delayMs); + setTimeout(retryOnce, 500); } }; req.onerror = function () { - setTimeout(check, 5); + setTimeout(retryOnce, 500); } req.ontimeout = function () { - setTimeout(check, 5); + setTimeout(retryOnce, 500); } req.timeout = delayMs; req.open("GET", checkUrl.href); req.send(); } - setTimeout(check, 5); + setTimeout(check, 500); </script> <section id="main" class="content">