支付宝异步通知无效

今天做支付接口的时候发现怎么都执行不到异步通知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的网址
	}
}

 

支付宝异步通知接口是用来接收支付宝服务器发送的交易状态信息的。下面是一个简单的示例代码: ```php <?php // 配置信息 $alipay_config = array( 'partner' => '208800XXXXXXXXXX', // 合作身份者id,以2088开头的16位数字。 'key' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // 安全检验码,以数字和字母组成的32位字符。 'sign_type' => 'MD5', // 签名方式,目前支持RSA和MD5两种方式。 'input_charset' => 'utf-8', // 字符编码格式,目前支持GBK或UTF-8。 'cacert' => getcwd() . '\\cacert.pem', // CA证书路径地址,用于curlssl校验。 'transport' => 'http', // 访问模式,本例采用默认的curl实现。 ); // 异步通知参数 $notify_data = $_POST['notify_data']; // 创建支付宝通知对象 require_once('alipay_notify.class.php'); $alipayNotify = new AlipayNotify($alipay_config); // 验证签名 $verify_result = $alipayNotify->verifyNotify(); if ($verify_result) { // 验证成功 // 获取交易状态 $trade_status = $_POST['trade_status']; if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') { // 处理交易成功逻辑 } else { // 处理交易失败逻辑 } echo 'success'; // 返回success告诉支付宝服务器已成功接收通知 } else { // 验证失败 echo 'fail'; // 返回fail告诉支付宝服务器接收通知失败 } ``` 在上面的代码,我们使用了支付宝提供的 `alipay_notify.class.php` 类来验证签名和处理交易状态。如果验证成功,我们就可以根据交易状态进行相应的业务逻辑处理,并返回 `success` 通知支付宝服务器已成功接收通知。如果验证失败,则返回 `fail` 告诉支付宝服务器接收通知失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值