Skip to content

Webhook processing errors are acknowledged with [accepted], leaving the payment PENDING with no recovery #153

Open

Description

@KBbitsP

Description

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.

Environment

Steps to reproduce

  1. Create a payment through the plugin and leave it PENDING (e.g. a checkout session).
  2. 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
  3. 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.

Evidence

  • Every path returns [accepted]; exceptions are caught and logged only: AdyenPaymentPluginApi.java#L614-L617
  • Invalid HMAC is logged and still acknowledged: #L612
  • Unknown merchantReference returns a null record, which throws at #L564-L569 and is caught as above.
  • getPaymentInfo reads only the plugin table, never Adyen: #L93-L105

Notes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions