taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

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:
Mcore/merchant/post-orders-ORDER_ID-pay.rst | 22++++++++++++----------
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[]; }