6月17日:
前段时间,因为服务器安全问题,我关闭了所有的UDP端口(从所有IP到所有IP的所有UDP通信),结果发现支付宝接口不能正常工作了,用写文本函数测试,发现服务器是能收到支付宝的异步通知的,就是校验通不过,难道支付宝接口需要用到UDP端口吗?没有道理啊,支付宝通过TCP 80端口或TCP 443端口和网站交互的啊,百度,没有发现任何有价值的资料;
【来源:原创成品php mysql毕业设计、课程设计、作业下载网 http://www.9laile.com 原创文章 转载请注明出去】
6月18日:
联系到了支付宝技术,支付宝技术说,只要开放TCP 80 或 443端口就没问题,这样的答复等于没答复,因为我的80端口一直开的,之前一直都很正常,我只是关掉了UDP端口而已。
继续研究,不停的搜索资料,终于发现了一个有价值的信息,DNS服务是需要用到UDP协议。偶,蚂蚁噶得, 原来问题出在这里。
我们打开支付宝接口的lib/alipay_core.function.php文件,这里有一个getHttpResponse函数,这个函数中,支付宝接口要通过fsockopen连接到支付宝网关https://mapi.alipay.com/gateway.do?service=notify_verify 来完成异步通知的校验,连接用的是域名,所以连接前必须要查询DNS服务器,那么就要用UDP协议连接到DNS服务器的53端口,而我禁用了所有UDP通信,所有无法解析支付宝域名,那么就无法通过校验了。简单说,支付宝服务器能通过80端口找我网站,但是我网站无法解析支付宝的域名所以无法完成校验。
于是乎,修改ip安全策略,在禁用所有UDP通信之前,加上从本机到任意主机的UDP53端口(注意选择镜像),并设置为许可,问题解决。
【来源:原创成品php mysql毕业设计、课程设计、作业下载网 http://www.9laile.com 原创文章 转载请注明出去】