View Issue Details

IDProjectCategoryView StatusLast Update
0010636Talermerchant backendpublic2025-12-21 20:47
Reportersebasjm Assigned ToChristian Grothoff Resolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicator 
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PriorityhighSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Product Version1.0 
Target Version1.3Fixed in Version1.3 
Summary0010636: refund time = 0 [1d]
Descriptionthen the merchant can't create a refund

$ curl 'http://merchant.taler.test/private/orders/2025.323-0341BBG7WG5DE' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:X8E74RT13K0H438YM19DG4TJX9QWN0SR1C6F440K07EQWQD88CY0' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Origin: http://localhost:8080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:8080/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' \
  --insecure
{
  "wire_reports": [],
  "exchange_code": 0,
  "exchange_http_status": 0,
  "exchange_ec": 0,
  "exchange_hc": 0,
  "deposit_total": "KUDOS:0",
  "contract_terms": {
    "nonce": "0RMMECM7YKWNK5CFCF86GD0MNCV6586T9QZTHTQ9V51CYHK0XG7G",
    "amount": "KUDOS:30",
    "h_wire": "4RF2ZBZGQ3BJ52KFAPHXK7TXYJEE78JAWNEDGF7K9FXTX7NRJNMAZBJKSG0Y830ENSSYMPVEC4547MWKRK3FE8SJ90WQZYXGPHS9GTG",
    "max_fee": "KUDOS:0",
    "summary": "zxc",
    "version": 0,
    "merchant": {
      "name": "qwe",
      "email": "",
      "address": {},
      "jurisdiction": {}
    },
    "order_id": "2025.323-0341BBG7WG5DE",
    "products": [],
    "exchanges": [
      {
        "url": "http://exchange.taler.test/",
        "priority": 1024,
        "master_pub": "QMDG9G3BEJ348BE4TNE82GS8F72R0B4T2P2K5RPTKTX8JJ64NG20",
        "max_contribution": "KUDOS:30"
      }
    ],
    "timestamp": {
      "t_s": 1763583256
    },
    "minimum_age": 0,
    "wire_method": "iban",
    "merchant_pub": "7XWD3Z1CWGE5N8BBJ9846BMNKEDPQAGJ23QRSK61GGN3CMJHE42G",
    "pay_deadline": {
      "t_s": 1763590456
    },
    "refund_deadline": {
      "t_s": 0
    },
    "merchant_base_url": "http://merchant.taler.test/",
    "wire_transfer_deadline": {
      "t_s": 1763763256
    }
  },
  "order_status": "paid",
  "last_payment": {
    "t_s": 1763583261
  },
  "refunded": false,
  "wired": false,
  "refund_pending": false,
  "refund_amount": "KUDOS:0",
  "wire_details": [],
  "refund_details": [],
  "order_status_url": "http://merchant.taler.test/orders/2025.323-0341BBG7WG5DE?token=5N8HXJFJQ87NF8NXG1S1C3YXQ8"
}

Steps To Reproducecreate a template, use the template to create the order and pay the order.

i also adding the instance settings below

curl 'http://merchant.taler.test/private/templates' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:X8E74RT13K0H438YM19DG4TJX9QWN0SR1C6F440K07EQWQD88CY0' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:8080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:8080/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' \
  --data-raw '{"template_id":"test","template_description":"test","template_contract":{"minimum_age":0,"pay_duration":{"d_us":7200000000},"currency":"KUDOS"},"editable_defaults":{"amount":"KUDOS:0","summary":""}}' \
  --insecure




curl 'http://merchant.taler.test/templates/test' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:8080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:8080/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' \
  --data-raw '{"amount":"KUDOS:6","summary":"refund time"}' \
  --insecure

$ curl 'http://merchant.taler.test/private/orders/2025.323-03R0XAMFF03XA' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:X8E74RT13K0H438YM19DG4TJX9QWN0SR1C6F440K07EQWQD88CY0' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Origin: http://localhost:8080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:8080/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' \
  --insecure
{
  "taler_pay_uri": "taler+http://pay/merchant.taler.test:80/2025.323-03R0XAMFF03XA/?c=M71DSHXBVNMA1N5VQZ6Z530HWC",
  "order_status_url": "http://merchant.taler.test/orders/2025.323-03R0XAMFF03XA?token=M71DSHXBVNMA1N5VQZ6Z530HWC",
  "order_status": "unpaid",
  "total_amount": "KUDOS:6",
  "summary": "refund time",
  "creation_time": {
    "t_s": 1763583638
  }
}





$ curl 'http://merchant.taler.test/private' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:X8E74RT13K0H438YM19DG4TJX9QWN0SR1C6F440K07EQWQD88CY0' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Origin: http://localhost:8080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:8080/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' \
  --insecure
{
  "accounts": [
    {
      "payto_uri": "payto://iban/DE36351981029457144251?receiver-name=Baggy%20Search",
      "h_wire": "4RF2ZBZGQ3BJ52KFAPHXK7TXYJEE78JAWNEDGF7K9FXTX7NRJNMAZBJKSG0Y830ENSSYMPVEC4547MWKRK3FE8SJ90WQZYXGPHS9GTG",
      "salt": "MFAP6P19ETQR5MGFJ9V65ANAV4",
      "active": true
    },
    {
      "payto_uri": "payto://iban/DE1231231231?receiver-name=qwe",
      "h_wire": "XR73ZVY0AJFH4C5JJHS9PM5HE0KDNA6MSSQ3NFEYM6DJQ3GD4S5BYTSVBRMY3CC9G5GA4SG1Q743S7710ETGAVHVJ07NEW3RCS7C8R0",
      "salt": "5HYE8R25SSZFNPYNS4XKHWBM9C",
      "active": false
    }
  ],
  "name": "qwe",
  "email": "",
  "email_validated": false,
  "phone_validated": false,
  "merchant_pub": "7XWD3Z1CWGE5N8BBJ9846BMNKEDPQAGJ23QRSK61GGN3CMJHE42G",
  "address": {},
  "jurisdiction": {},
  "use_stefan": true,
  "default_wire_transfer_delay": {
    "d_us": 172800000000
  },
  "default_pay_delay": {
    "d_us": 7200000000
  },
  "default_refund_delay": {
    "d_us": 1296000000000
  },
  "default_wire_transfer_rounding_interval": "NONE",
  "auth": {
    "method": "token"
  }
}
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Activities

Christian Grothoff

2025-11-20 21:41

manager   ~0026563

Eh, I'm confused. If you say refunds are only possible until 1.1.1970, why do you expect refunds to work in 2025? That's absolutely expected, refunds are ONLY possible until the refund deadline, so if you set it to 0, you disable refunds. This seems totally expected.

sebasjm

2025-11-21 16:06

developer   ~0026572

this happens using templates. The spa never sends the refund time so it comes from the backend, it should use the default from refund_delay from the instance settings. That's why i also added that information in "steps to reproduce"

Issue History

Date ModifiedUsernameFieldChange
2025-11-19 20:25sebasjmNew Issue
2025-11-19 20:25sebasjmStatusnew => assigned
2025-11-19 20:25sebasjmAssigned To => Christian Grothoff
2025-11-20 21:41Christian GrothoffNote Added: 0026563
2025-11-20 21:41Christian GrothoffAssigned ToChristian Grothoff => sebasjm
2025-11-20 21:41Christian GrothoffStatusassigned => feedback
2025-11-21 16:06sebasjmNote Added: 0026572
2025-11-21 16:06sebasjmAssigned Tosebasjm => Christian Grothoff
2025-11-21 16:06sebasjmStatusfeedback => implementing
2025-11-28 21:16Christian GrothoffTarget Version => 1.4
2025-11-28 21:16Christian GrothoffSummaryrefund time = 0 => refund time = 0 [1d]
2025-11-28 21:18Christian GrothoffStatusimplementing => assigned
2025-12-04 21:34Christian GrothoffPrioritynormal => high
2025-12-05 10:28Christian GrothoffStatusassigned => informing
2025-12-05 10:28Christian GrothoffResolutionopen => fixed
2025-12-05 10:28Christian GrothoffFixed in Version => 1.3
2025-12-05 10:28Christian GrothoffProduct Version => 1.0
2025-12-05 10:28Christian GrothoffTarget Version1.4 => 1.3
2025-12-21 20:47Christian GrothoffStatusinforming => closed