This commit is contained in:
parent
5d3a3adb86
commit
1a38cfe5d7
7 changed files with 169 additions and 17 deletions
|
|
@ -365,6 +365,11 @@ export struct OrderCryptoPay {
|
|||
std::string amount; // decimal EURC amount ("570.43") — equals the
|
||||
// euro total; EURC is euro-denominated at par
|
||||
std::int64_t minutesLeft = 0; // until the window closes; <= 0 = closed
|
||||
// The transfer is visible on the network but not yet in a finalized
|
||||
// block. Display-only: the buyer whose wallet said "success" needs to
|
||||
// hear "we see it, it is finalizing" or their next step is a support
|
||||
// email — the first live payment proved exactly this.
|
||||
bool seen = false;
|
||||
struct Chain {
|
||||
std::string name; // "base"
|
||||
std::string contract; // token contract, shown so the buyer can verify
|
||||
|
|
|
|||
|
|
@ -1438,20 +1438,36 @@ export RenderedPage RenderOrderStatus(const OrderView& o, std::string_view indic
|
|||
// The window line tells the truth for both signs of minutesLeft. A
|
||||
// closed window does NOT mean sent money is gone — the address stays
|
||||
// ours — so the copy says where it went instead of leaving a buyer
|
||||
// staring at money that "vanished".
|
||||
// staring at money that "vanished". The open branch also owns the
|
||||
// expectation the first live payment proved buyers need: a wallet
|
||||
// says "success" within seconds, this shop only believes finalized
|
||||
// blocks, and a buyer left to discover that ~15-minute gap alone
|
||||
// discovers the support address instead.
|
||||
const SafeHtml windowLine = pay.minutesLeft > 0
|
||||
? Format(
|
||||
R"(<p class="order__note">This address is reserved for this order )"
|
||||
R"(for about {} more {}. This page checks automatically and )"
|
||||
R"(confirms once the full amount has arrived.</p>)",
|
||||
R"(confirms once the full amount has arrived and the network has )"
|
||||
R"(finalized it: your wallet will report success well before then, )"
|
||||
R"(and confirmation here typically follows in 10 to 25 minutes.</p>)",
|
||||
Num(pay.minutesLeft >= 120 ? pay.minutesLeft / 60 : pay.minutesLeft),
|
||||
pay.minutesLeft >= 120 ? Raw("hours") : Raw("minutes"))
|
||||
: Raw(R"(<p class="order__note">The payment window for this order has )"
|
||||
R"(closed and the order will lapse. If you already sent EURC it )"
|
||||
R"(is not lost it arrived at the address above; contact )"
|
||||
R"(is not lost: it arrived at the address above; contact )"
|
||||
R"(<a href="mailto:info@catcrafts.net">info@catcrafts.net</a> )"
|
||||
R"(and it will be settled by hand.</p>)");
|
||||
|
||||
// The in-flight acknowledgement: the rail has SEEN the full amount on
|
||||
// the network, finality is the only thing missing. Rendered first,
|
||||
// because a buyer who just paid scans for exactly this sentence.
|
||||
const SafeHtml seenLine = pay.seen && pay.minutesLeft > 0
|
||||
? Raw(R"(<p class="order__note"><strong>Your payment is on its way.</strong> )"
|
||||
R"(It is visible on the network and is being finalized: this )"
|
||||
R"(usually takes 10 to 25 minutes, and this page will confirm )"
|
||||
R"(it automatically.</p>)")
|
||||
: SafeHtml{};
|
||||
|
||||
SafeHtml indicativeLine = indicative.empty() ? SafeHtml{} : Format(
|
||||
R"(<p class="order__indicative">{}, indicative only. The charge is )"
|
||||
R"(the euro amount above.</p>)",
|
||||
|
|
@ -1460,19 +1476,21 @@ export RenderedPage RenderOrderStatus(const OrderView& o, std::string_view indic
|
|||
payBlock = Format(
|
||||
R"(<section class="section">)"
|
||||
R"(<h2 class="section__title">Pay with EURC</h2>)"
|
||||
R"(<p>Send <strong>{} EURC</strong> to this address one )"
|
||||
R"({})"
|
||||
R"(<p>Send <strong>{} EURC</strong> to this address. One )"
|
||||
R"(network, one payment:</p>)"
|
||||
R"(<p><code class="order__address">{}</code></p>)"
|
||||
R"(<ul class="order__chains">{}</ul>)"
|
||||
R"({})"
|
||||
R"(<p class="order__note">EURC is pegged to the euro, so the amount )"
|
||||
R"(is exactly the euro total no exchange rate. Send EURC only, )"
|
||||
R"(is exactly the euro total, no exchange rate. Send EURC only, )"
|
||||
R"(and only on a network listed above. If your exchange deducts a )"
|
||||
R"(withdrawal fee, send the missing rest to the same address; the )"
|
||||
R"(order confirms once the full amount sits on one network. Your )"
|
||||
R"(order reference is <strong>{}</strong>.</p>)"
|
||||
R"({})"
|
||||
R"(</section>)",
|
||||
seenLine,
|
||||
Escape(pay.amount),
|
||||
Escape(pay.address),
|
||||
Join(items),
|
||||
|
|
|
|||
Loading…
Reference in a new issue