前情
最近在調整支付寶支付的功能時發現,不能夠正常接收支付寶付款成功之後的回撥通知了,從程式碼到配置最後到伺服器配置都排查了一遍,最終發現問題原因竟然是因為我們的回撥地址notify_url是https的但並非是權威機構頒發的證照,不被支付寶所信賴,所以並沒有發起回撥。
問題追蹤
確認自己的回撥地址notify_url配置無誤之後,在開發環境自己用Postman請求自己設定的回撥地址,是可以正常進入到Controller的介面層。
遂即便懷疑測試環境伺服器負載配置是否正確,通過跟蹤nginx的access.log,發現自己模擬發起的請求的都可以進入到伺服器中,並正確轉發到後面的應用程式中。
那不成是支付寶的沙箱環境掛了,或者支付寶伺服器出bug了,理性告訴我應該另有蹊蹺,在支付寶的一個頁面中有提及這問題。
需確認頁面是http還是https,如果是https,那麼需要安裝ssl證照,證照要求有如下:要求“正規的證照機構簽發,不支援自簽名”。
然後趕快,按照支付寶,寶爺的要求,去自檢了一下自家的證照,下面兩個地址可以很方便的檢測SSL證照的合法性。
檢測地址:
cheapsslsecurity.com/ssltools/ss…
把notify_url的通知域名放上去檢測,報出No Intermediate/Chain certificate were found. 媽耶,俺們的證照居然不是權威機構頒發的,太可怕了。
未找到相應認證機構所頒發的認證證照鏈,RapidSSL RSA CA 2018並不是權威機構,所以不被支付寶所信賴,所以就沒有向對應的地址notify_url進行介面回撥通知。
分析出原因後,立馬更換為http的回撥地址,便可以正常接收通知了,後面我們換了一個由GoDaddy.com, Inc授權過後的https證照,徹底解決了這個問題。