今天做支付接口的时候发现怎么都执行不到异步通知notify.php文件中,后来查阅了一些资料发现是网站域名https证书的原因,可能是因为ssl证书是免费的,支付宝方面检查不通过,导致的校验错误。但是网站必须实现强制https。
最后的解决办法。。。
在支付宝的配置文件中使用http://域名/api/notify.php等http开头的路径,然后在商家的“授权回调地址””配置中,也只使用http。
最后在程序中使用301来实现强制https,附上代码:
$PHP_SCHEME = $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
if($the_host=='www.xxx.com'||$the_host=='xxx.com'){
$the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分
if($PHP_SCHEME == 'http://')//如果域名不是带www的网址那么进行下面的301跳转
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header('Location:https://'.$the_host.$the_url);//跳转到带www的网址
}
}