一只独立特行的猪 2019-07-01
最近在调整支付宝支付的功能时发现,不能够正常接收支付宝付款成功之后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题原因竟然是因为我们的回调地址notify_url是https的但并非是权威机构颁发的证书,不被支付宝所信赖,所以并没有发起回调。
确认自己的回调地址notify_url配置无误之后,在开发环境自己用Postman请求自己设置的回调地址,是可以正常进入到Controller的接口层。
遂即便怀疑测试环境服务器负载配置是否正确,通过跟踪nginx的access.log,发现自己模拟发起的请求的都可以进入到服务器中,并正确转发到后面的应用进程中。
那不成是支付宝的沙箱环境挂了,或者支付宝服务器出bug了,理性告诉我应该另有蹊跷,在支付宝的一个页面中有提及这问题。
需确认页面是http还是https,如果是https,那么需要安装ssl证书,证书要求有如下:要求“正规的证书机构签发,不支持自签名”。
然后赶快,按照支付宝,宝爷的要求,去自检了一下自家的证书,下面两个地址可以很方便的检测SSL证书的合法性。
检测地址:
https://www.chinassl.net/sslt...
https://cheapsslsecurity.com/...
把notify_url的通知域名放上去检测,报出No Intermediate/Chain certificate were found.
妈耶,俺们的证书居然不是权威机构颁发的,太可怕了。
未找到相应认证机构所颁发的认证证书链,RapidSSL RSA CA 2018并不是权威机构,所以不被支付宝所信赖,所以就没有向对应的地址notify_url进行接口回调通知。
分析出原因后,立马更换为http的回调地址,便可以正常接收通知了,后面我们换了一个由GoDaddy.com, Inc授权过后的https证书,彻底解决了这个问题。
但是大家都懂,草根站长,又没公司,想找一个安全稳定的支付接口竟然不是易事。在网上也看到不少关于个人收款接口的广告和宣传,以及各种方式。现在总结一下,供大家参考,互相交流。不过目前这种渠道基本行不通了。
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式。System.out.println;//就是orderString 可以直接给客户端请求,无需再做处理。