最近在调整支付宝支付的功能时发现,不可以正常接收支付宝付款成功以后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题缘由居然是由于咱们的回调地址notify_url是https的但并不是是权威机构颁发的证书,不被支付宝所信赖,因此并无发起回调。php
确认本身的回调地址notify_url配置无误以后,在开发环境本身用Postman请求本身设置的回调地址,是能够正常进入到Controller的接口层。html
遂即使怀疑测试环境服务器负载配置是否正确,经过跟踪nginx的access.log,发现本身模拟发起的请求的均可以进入到服务器中,并正确转发到后面的应用进程中。nginx
那不成是支付宝的沙箱环境挂了,或者支付宝服务器出bug了,理性告诉我应该另有蹊跷,在支付宝的一个页面中有说起这问题。api
需确认页面是http仍是https,若是是https,那么须要安装ssl证书,证书要求有以下:要求“正规的证书机构签发,不支持自签名”。服务器
而后赶快,按照支付宝,宝爷的要求,去自检了一下自家的证书,下面两个地址能够很方便的检测SSL证书的合法性。测试
检测地址:url
www.chinassl.net/ssltools/ss….net
cheapsslsecurity.com/ssltools/ss…3d
把notify_url的通知域名放上去检测,报出No Intermediate/Chain certificate were found. 妈耶,俺们的证书竟然不是权威机构颁发的,太可怕了。cdn
未找到相应认证机构所颁发的认证证书链,RapidSSL RSA CA 2018并非权威机构,因此不被支付宝所信赖,因此就没有向对应的地址notify_url进行接口回调通知。
分析出缘由后,立马更换为http的回调地址,即可以正常接收通知了,后面咱们换了一个由GoDaddy.com, Inc受权事后的https证书,完全解决了这个问题。