commit 8b3997a26458da1deaf26759f81836f7bbedb05f
parent f8cdd80a42209f37b031530148cec9f50629754a
Author: Florian Dold <dold@taler.net>
Date: Tue, 1 Sep 2026 15:33:33 +0200
merchant protocol: suspend payments after legal refusal
Issue: https://bugs.taler.net/n/11416
Diffstat:
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/core/merchant/post-orders-ORDER_ID-pay.rst b/core/merchant/post-orders-ORDER_ID-pay.rst
@@ -138,11 +138,13 @@
The exchange has rejected the deposit by the merchant
for legal reasons. This is **not** exactly a client
failure (and possibly nobody's fault except for the
- regulator). In any case, the wallet should refresh
- the deposited coins of the affected exchange and
- may try to pay with coins from another exchange if
- possible (it has such coins and the merchant accepts
- coins from another exchange).
+ regulator). The wallet should suspend the payment and
+ retain the selected coins and their deposit permissions.
+ Once the merchant has resolved the issue, the user may
+ resume the payment, which retries the same payment with
+ the same coins, or abort it using the normal payment
+ recovery procedure. The wallet must not refresh or
+ reselect coins solely because of this response.
The body is a `PaymentDeniedLegallyResponse` with
details about the failure.
Since protocol **v17**.
@@ -431,14 +433,14 @@
interface PaymentDeniedLegallyResponse {
// Numeric `error code <error-codes>` unique to the condition.
- // Error code, must be
- // TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LEGALLY_REFUSED.
+ // Error code, must be either
+ // TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LEGALLY_REFUSED
+ // or TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_TRANSACTION_LIMIT_VIOLATION.
code: Integer;
// Base URL of the exchanges that denied the payment.
- // The wallet should refresh the coins from these
- // exchanges, but may try to pay with coins from
- // other exchanges.
+ // This is diagnostic information for the wallet and user.
+ // It does not instruct the wallet to refresh or reselect coins.
exchange_base_urls: WebURL[];
}