QuickBooks webhooks works locally with ngrok but not working on production

Viewed 797

I've gone through all the troubleshooting steps they provide here. My endpoint is accessible, SSL passes the tests. Webhooks work when I'm testing on my local environment using ngrok but it does not work on staging and production servers hosted on AWS and managed on Laravel Forge. The webhooks post request simply does not hit the server.

I contacted the QuickBooks support about this several times. Their response is, they get a timeout - StatusCode 41 when they post the notification to my endpoint. And they say that the network is restricting traffic in some way. Also contacted forge support and they said they won't help with application-related issues.

I tried disabling the firewall with UFW, reviewed all the logs but I don't see any way how the server is restricting the traffic. I retried several times changing the webhooks URL on sandbox and no luck.

Any help would be greatly appreciated.,

edit: SSL is valid, csrf is turned off, url is publicly accessible, a curl request from another server goes through fine, nothing in logs.

RESOLVED Edit

Webhooks started working again on their own after a recent update they did on the Webhooks functionality. While I'm glad it's working finally, I don't appreciate all the time I wasted debugging this.

1 Answers

Just my two cents. There are steps to troubleshoot as follows.

  1. Check your QuickBooks webhook that is behind a login firewall?
  2. Check your endpoint by POSTMAN to get a more detailed report.
  3. Check your endpoint SSL certificate is not a self-signed certificate so make sure the endpoint URL begins with HTTPS. You can check it with https://www.sslshopper.com/ssl-checker.html
  4. Check your webhook entity and action has required permission to post. So deselect and select the entity again and resave.
  5. Make sure your verifier token is correct
  6. If you are using Cloudflare WAF check logs or check firewall.
  7. Open a ticket in QuickBooks so that your production implementation is correct.
Related