You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Webhook processing errors are acknowledged with [accepted], leaving the payment PENDING with no recovery #153
processNotification returns [accepted] to Adyen in every case, including when the notification could not be processed (unknown merchant reference, invalid HMAC, missing tenant config, database error). Adyen treats an [accepted] webhook as delivered and does not resend it. The plugin's getPaymentInfo reads only the plugin's own table and does not query Adyen, so the Janitor cannot recover the final status either. The plugin row and the Kill Bill payment stay PENDING until fixed manually.
Create a payment through the plugin and leave it PENDING (e.g. a checkout session).
Make the webhook fail during processing. Any one of:
post an AUTHORISATION webhook whose merchantReference is not a Kill Bill transaction id
post it with an invalid HMAC signature
post it for a tenant whose Adyen config has no HMAC key
Check the HTTP response body, the plugin row (adyen_responses), and the Kill Bill payment after the Janitor has run.
Expected
Expected
When processing fails, the response tells Adyen the notification was not processed, so Adyen retries it.
After a webhook that failed to process, a retry can still bring the transaction to its final status, instead of it staying PENDING indefinitely.
Actual
The response is [accepted] in all cases. The error is only logged.
Adyen does not retry.
adyen_responses and the Kill Bill payment stay PENDING. The Janitor runs getPaymentInfo, which returns the same PENDING row, so the status never changes.
For comparison, the Stripe plugin doesn't rely on webhooks: its getPaymentInfo fetches the latest status from Stripe for PENDING transactions, so the Janitor resolves them.
Activity