(Fixed) App Store Connect Subscription Status URL Not Working/Never CalledRated (5.0 of 5.0) by 1 reviewers.
I've been helping my husband track down an issue where he wasn't getting any subscription status notifications from Apple for his app. We reviewed the SSL certificate requirements, could navigate to the url in a browser, and could curl the url from our Macs. But beyond our own testing, there were zero traces of anyone trying to load the url.
After a back and forth with Apple developer support and having to submit a bug report, we finally discovered the problem. While setting up the SSL certificate for his site, we forgot to concatenate the domain crt file with the intermediary certificate authority (CA) file before uploading to our server. (Yikes! Looks like we should have read my instructions about installing an SSL certificate!)
The big gotcha here was that on our Macs, all of the curling and browsing to our subscription status url always worked ok and never showed us the issue.
So, how can you test if this issue is what is preventing your App Store Connect subscription status URL from working? Two options:
If you have access to a linux box (not a Mac), do a
curl -vto your url.
Use this SSL checker tool to test your SSL certificate, which is what we did.
If you see a problem with your intermediate CA being missing, likely you need to take a look at the files provided from your SSL certificate provider and concatenate the intermediate CA file in with your domain.crt file and upload your certificate files to your server again. This is step 5 in my walk through for uploading SSL certificates to Google App Engine
After correcting the certificate files and waiting a few (maybe up to 20) minutes, test your domain with the SSL checker tool or curl again. After we corrected this problem, subscription status notifications started arriving. Yay!
Note: If you're just getting your first subscription status url pings from the sandbox now, it's probably a good time to remind you that the body of the POST request is one big JSON payload, not as variables url encoded. Aka, you want
file_get_contents("php://input") in php, or
self.request.body in python webapp2, etc.