View Issue Details

IDProjectCategoryView StatusLast Update
0010775Talermerchant backoffice SPApublic2026-02-01 17:57
Reportersebasjm Assigned Tosebasjm  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status assignedResolutionopen 
Target Version1.5 
Summary0010775: wire transfer not shown and no information given by the backend
DescriptionOn my local setup I created an order, made the payment and after the wire deadline nothing happen.

No incoming, no information found if there was a problem on the backend or exchange. It seems that there was no problem since the wire transfer is now in the incoming list.

Seeing this as a merchant it's very annoying that i don't have information:

1) that i should have a wire transfer incoming or being prepared to be sent (i would like to know which exchange owes me what?)
2) the wire transfer should have been reported by the exchange but it didn't (the exchange that should have already inform an incoming wire transfer didn't )

Otherwise it feels like the money is in a limbo.
Also no error or warning logs
Tagsux

Relationships

related to 0010710 resolvedChristian Grothoff incoming wire transfer not shown 

Activities

sebasjm

2025-12-15 17:30

developer   ~0026991

just to be clear, this is not the same as 0010710

in 0010710 I thought that "incoming" meant "after wallet payment" but it was clarified that it was "after wire deadline"

in this case I knew that the incoming will not be shown before the deadline, but not shown and no error.

sebasjm

2025-12-15 17:42

developer   ~0026992

I didn't have a way to check if there was a problems in the merchant or in the exchange, who to blame. I expected more information from the backend to know for example 1) the backend contacted the exchange and the exchange as lazy 2) the backend didn't contact the exchange and didn't know

sebasjm

2025-12-15 20:11

developer   ~0026996

I just happen to see this again and I took times.

The refund deadline was at 1765824820
The backend didn't know when asking at 1765824911
Then reported that the wire transfer was indeed on time 1765824645

IMO these times can be higher if there are issues between exchange and merchant channel. Merchant should inform when was the last time it asked the exchange and what was the last response. And be able to trigger the request to the exchange to know what is the latest status of the wire transfer.

$ curl 'http://merchant.taler.test/instances/ee/private/orders/2025.349-03T730V8Z6W42'
{
  "deposit_total": "KUDOS:0",
  "contract_terms": {
... "order_id": "2025.349-03T730V8Z6W42",
    "exchanges": [
      {
        "url": "http://exchange.taler.test/",
        "priority": 1024,
        "master_pub": "XKP6K4W4KFQYWR1ZHGAXJWW1TA3KNTA37M12GKM56VM74DMQB440",
        "max_contribution": "KUDOS:1"
      }
    ],
    "timestamp": {
      "t_s": 1765824640
    },
... "pay_deadline": {
      "t_s": 1765824700
    },
    "refund_deadline": {
      "t_s": 1765824760
    },
    "wire_transfer_deadline": {
      "t_s": 1765824820
    }
  },
  "last_payment": {
    "t_s": 1765824645
  },
... "order_status_url": "http://merchant.taler.test/instances/ee/orders/2025.349-03T730V8Z6W42?token=ZNGP49ADK4SS6K6V496778MQAW"
}

$ date +%s
1765824911

$ curl 'http://merchant.taler.test/instances/ee/private/orders/2025.349-03T730V8Z6W42'
{
  "deposit_total": "KUDOS:1.11",
  "contract_terms": {
    "order_id": "2025.349-03T730V8Z6W42",
    "exchanges": [
      {
        "url": "http://exchange.taler.test/",
        "priority": 1024,
        "master_pub": "XKP6K4W4KFQYWR1ZHGAXJWW1TA3KNTA37M12GKM56VM74DMQB440",
        "max_contribution": "KUDOS:1"
      }
    ],
    "timestamp": {
      "t_s": 1765824640
    },
    "pay_deadline": {
      "t_s": 1765824700
    },
    "refund_deadline": {
      "t_s": 1765824760
    },
    "merchant_base_url": "http://merchant.taler.test/instances/ee/",
    "wire_transfer_deadline": {
      "t_s": 1765824820
    }
  },
  "order_status": "paid",
  "last_payment": {
    "t_s": 1765824645
  },
  "wire_details": [
    {
      "wtid": "91JY4KCWF26ZHF7142ZKNM0RGSR2S79MBQYHPK1P5VZS74Q83P50",
      "exchange_url": "http://exchange.taler.test/",
      "amount": "KUDOS:1.1",
      "execution_time": {
        "t_s": 1765824645
      },
      "confirmed": false
    }
  ],
  "order_status_url": "http://merchant.taler.test/instances/ee/orders/2025.349-03T730V8Z6W42?token=ZNGP49ADK4SS6K6V496778MQAW"
}

$ date +%s
1765824919

Christian Grothoff

2025-12-15 20:37

manager   ~0026999

""
The refund deadline was at 1765824820
The backend didn't know when asking at 1765824911
Then reported that the wire transfer was indeed on time 1765824645
""
Makes no sense, since your last time is *before* your first timestamp. Anyway, there is some inherent lag, as when we ask the exchange the second the transfer is due, the exchange most likely has simply not gotten around to it. So we do an exponential back-off and retry. But this is *per order* (not per wire transfer, we don't know the wire transfer yet!). So at best we could return with the order when we last checked the wire transfer status (and when we'll check next).

sebasjm

2025-12-16 14:02

developer   ~0027012

> Makes no sense, since your last time is *before* your first timestamp

Exactly my point. Everything worked perfectly but it looks like it didn't. This is a sign that more information is required on the SPA and in consequence more information should be recorded/provided by the backend.

The information of the last check will help, definitely.
I would say that also the response of the exchange will help, like we do with the KYC info.

Christian Grothoff

2026-01-31 22:16

manager   ~0027517

Well, the SPA does have (and is currently not using):

  "wire_details": [
    {
      "wtid": "91JY4KCWF26ZHF7142ZKNM0RGSR2S79MBQYHPK1P5VZS74Q83P50",
      "exchange_url": "http://exchange.taler.test/",
      "amount": "KUDOS:1.1",
      "execution_time": {
        "t_s": 1765824645
      },
      "confirmed": false
    }]

I suggest we do two things: (1) expand the "wire_details" with one more field, namely the "expected_transfer_serial_id" for the "offset" of the /private/incoming endpoint. Then, we can make the "wired" state (once wired) be a *deep link* directly into the "Wire transfers" list for this specific offset. Basically, clicking on "wired" (in the Timeline) would take you to the very wire transfer where this specific order was settled.
If it was settled multiple times (because it was paid via multiple exchanges!), there should be *multiple* dates and so the "Timeline" would simply contain a list of "wired" entries with links to the different wire transfers responsible for the settlement. The "confirmed" bit could be used to toggle the text "wired" between "incoming" and "confirmed" (or if people strongly prefer: "wired" could stay instead of "incoming", I mostly think it should match the terminology used under "Wire transfers").

So with this small change, one could easily find all wire transfers that settle this order. Oh, and if the wire deadline is *past* and we do NOT yet have an "incoming" wire transfer ID, then we should show something like "overdue" with the wire deadline to indicate that something is indeed wrong.

Christian Grothoff

2026-01-31 22:22

manager   ~0027518

Spec updated in: 3c4c2ceb..039d38a2

Christian Grothoff

2026-01-31 23:13

manager   ~0027519

Merchant also updated => SPA changes are left.

vecirex

2026-02-01 11:17

manager   ~0027523

@stefan: Didn't you observe something similar for talersticker in TEST/CHF prod? If yes, that's directly related and we need a test case.

sebasjm

2026-02-01 14:08

developer   ~0027529

if I understood correctly the tree states are

wired-pending:
  * The wire transfer has been notified by the payment service provider.

wired-confirmed:
  * This wire transfer has been notified manually or by the banking system

wired-overdue:
  * The wire transfer should have been made but no notification has arrived, contact the payment service provider.

Check if the text is good, I'm going to add that as tool-tips

sebasjm

2026-02-01 14:24

developer   ~0027530

how do i find that there are still wire overdue? should the SPA calculate the absent ?

Stefan

2026-02-01 16:27

developer   ~0027532

My suggestions:
wired-pending:
This wire transfer has been reported as pending by the payment service provider.

wired-confirmed:
This wire transfer was confirmed manually by the recipient or by the banking system.

wired-overdue:
This wire transfer should have been made, but no notification has been received. Please contact the payment service provider.

Christian Grothoff

2026-02-01 17:57

manager   ~0027533

Well, not sure about **3** states. First, we have just "paid" before wire deadline. So here we'd show when the contract was paid, possibly partial refunds, and the *anticipated* time of the wire, namely the "wire transfer deadline" as per contract. So that's like a 0th state, "awaiting settlement" + DATE. Then, once that date has been reached, we kind of go into "wire overdue", which should more or less instantly convert to "wire-pending". Now, we could also go into "wire-pending" *before* the wire deadline if the exchange wires the funds early due to aggregation with another order. So transitions are both awaiting->pending->confirmed and awaiting->overdue->pending->confirmed. The pending->confirmed happens when the user manually confirms the wire transfer happened in the wire transfer list. The link to the wire transfer list exists both in pending and confirmed states.

As for the hints:
awaiting-settlement:
The settlement deadline configured for this order is still in the future.

wired-pending:
The payment service provider initiated the wire transfer to settle the obligation. It may take some time to arrive in your bank account. If you did not setup access to your bank account for the merchant backend, you need to <a>manually confirm</a> receiving the money.
-- link to the transaction list with the "confirm" button.

wired-confirmed:
The payment was settled by the payment service provider and the money is now in your bank account.

wired-overdue:
This wire transfer should have been made, but no settlement details are available. Please check that your merchant backend and especially the taler-merchant-depositcheck, taler-merchant-reconciliation and taler-merchant-kyccheck services are operating correctly before contacting the payment service provider.

ALTERNATIVE, if KYC obligations are pending:

This wire transfer should have been made, but no settlement details are available. This is likely because you did not yet satisfy some <a>legitimization requirements</a>. Please address those before contacting the payment service provider.

-- with link to KYC status page with pending request

Issue History

Date Modified Username Field Change
2025-12-15 00:40 sebasjm New Issue
2025-12-15 17:28 sebasjm Relationship added related to 0010710
2025-12-15 17:30 sebasjm Note Added: 0026991
2025-12-15 17:42 sebasjm Note Added: 0026992
2025-12-15 20:11 sebasjm Note Added: 0026996
2025-12-15 20:37 Christian Grothoff Note Added: 0026999
2025-12-15 20:37 Christian Grothoff Status new => acknowledged
2025-12-15 20:37 Christian Grothoff Target Version => post-1.0
2025-12-15 20:37 Christian Grothoff Tag Attached: ux
2025-12-16 14:02 sebasjm Note Added: 0027012
2026-01-26 07:43 Christian Grothoff Assigned To => Christian Grothoff
2026-01-26 07:43 Christian Grothoff Status acknowledged => assigned
2026-01-26 07:43 Christian Grothoff Status assigned => confirmed
2026-01-28 15:09 Christian Grothoff Status confirmed => assigned
2026-01-28 15:10 Christian Grothoff Target Version post-1.0 => 1.5
2026-01-31 22:16 Christian Grothoff Note Added: 0027517
2026-01-31 22:22 Christian Grothoff Note Added: 0027518
2026-01-31 23:13 Christian Grothoff Note Added: 0027519
2026-01-31 23:13 Christian Grothoff Assigned To Christian Grothoff => sebasjm
2026-01-31 23:13 Christian Grothoff Category merchant backend => merchant backoffice SPA
2026-02-01 11:17 vecirex Note Added: 0027523
2026-02-01 14:08 sebasjm Note Added: 0027529
2026-02-01 14:24 sebasjm Note Added: 0027530
2026-02-01 16:27 Stefan Note Added: 0027532
2026-02-01 17:57 Christian Grothoff Note Added: 0027533