View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0011866 | Taler | merchant backend | public | 2026-10-14 12:33 | 2026-10-14 16:33 |
| Reporter | vecirex | Assigned To | vecirex | ||
| Priority | urgent | Severity | major | Reproducibility | have not tried |
| Status | assigned | Resolution | open | ||
| Summary | 0011866: test/reproduce: merchant /pay HTTP 500 (ec=2008) when contract embeds invalid merchant URL | ||||
| Description | Wallet /pay can return HTTP 500 (ec=2008) when the contract embeds an invalid merchant URL. Two cases on two different instances; both occurred on the same day (2026-10-09): 1) Bare merchant.website (no scheme). Instance-side fix already in production since 2026-10-07 (bare host rewritten to https://...). Despite that fix, /pay still failed on 2026-10-09: unpaid contracts created before 2026-10-07 still embed the bare host and are not rewritten. New orders after the fix are expected to work. 2) Invalid merchant_base_url (observed: '@'). Same 500/ec=2008; no production fix yet. | ||||
| Tags | mytops, quality, srv-betel | ||||
|
|
Case 1: bare merchant.website still in unpaid contract after instance fix Goal: show /pay HTTP 500 (ec=2008) when an unpaid contract still embeds a bare merchant.website, even after the instance row was rewritten to http(s). Steps (on betel/stage): 1) Create a throwaway instance with bare website (no scheme), e.g., www.repro-bare.example.ch. 2) Create an unpaid order on that instance (real amount, not CHF:0). 3) Run the maintenance script with --dry-run (default). Confirm it reports the bare host as wrong / needing rewrite. 4) Apply the fix (same script without dry-run). Confirm instance website is now http(s)://... 5) Attempt payment on the unpaid order from step 2. Before the fix: /pay fails HTTP 500 ec=2008 (contract still bare). After the fix: same unpaid order still fails the same way; a new order created after the fix should pay successfully. Prod signal 2026-10-09: instance fixed since 2026-10-07; one unpaid pre-fix order still bare; /pay still 500/ec=2008. cf. 0011848, #11849. |
|
|
Case 1 repro on betel/stage (instance repro-bare-oct14f, serial 424). Sequence: Pay1 (bare website) -> SQL fix to http:// -> Pay2 without restart -> httpd restart -> Pay3. - Pay1 2026.287-KEE9XYTX83328: website=www.repro-bare.example.ch (bare); /pay HTTP 500 ec=2008; MainPID 279233 - SQL: SET website='http://www.repro-bare.example.ch' (no restart) - Pay2 2026.287-P5D0APPFZCGJP: contract still bare; still HTTP 500 ec=2008; MainPID unchanged - restart taler-merchant-httpd: MainPID 279233 -> 280754 (15:40:24 CEST) - Pay3 2026.287-YBVC24A0J79YA: website=http://www.repro-bare.example.ch; /pay HTTP 200; order_status=paid Bare merchant.website yields /pay 500/2008. DB fix alone is not enough until httpd restart clears cached instance config. |
|
|
On prod/lifeline (not stage/betel): MainPID was stale (1224 since 2026-10-01). Restart refreshed it: 1224 -> 551495 (2026-10-14 15:07:01 CEST). CHF:0 on affected customer after restart: /pay HTTP 200; order paid. |
|
|
Case 2 product fix: 0011873 (new, unassigned). Test stays here. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-10-14 12:33 | vecirex | New Issue | |
| 2026-10-14 12:33 | vecirex | Status | new => assigned |
| 2026-10-14 12:33 | vecirex | Assigned To | => vecirex |
| 2026-10-14 12:33 | vecirex | Tag Attached: mytops | |
| 2026-10-14 12:33 | vecirex | Tag Attached: quality | |
| 2026-10-14 12:33 | vecirex | Priority | normal => urgent |
| 2026-10-14 12:39 | vecirex | Tag Attached: srv-betel | |
| 2026-10-14 12:52 | vecirex | Note Added: 0030100 | |
| 2026-10-14 16:11 | vecirex | Note Added: 0030104 | |
| 2026-10-14 16:17 | vecirex | Note Added: 0030105 | |
| 2026-10-14 16:33 | vecirex | Note Added: 0030106 |