服务器防火墙、回调地址、ip白名单都经过反复检测,没有问题!远程用专门的postman工具测试,回调接收文件,也是立即就收到json信息。
专门将下单提交的回调地址修改为一个新文件测试,结果就只能下单时接收到一次通知!
用来测试接收回调通知的php文件为rec.php,版本8.3代码如下:
其中header行注释不注释,甚至加上header('HTTP/1.1 400 Bad Request');
return json_encode(['code' => 'FAIL' , 'message' => '失败']);这两句,都只能收到一次通知!
<?php
//header('Content-type:text/html; Charset=utf-8');
ini_set('date.timezone','Asia/Shanghai');
$body = file_get_contents('php://input');
file_put_contents("d:\\prginfo\\recv.txt", PHP_EOL."日期是:".date("Y-m-d H:i:s").PHP_EOL.$body.PHP_EOL, FILE_APPEND | LOCK_EX);
?>
大概率还是你应答的有问题,我测试是可以接收到多次回调的
$value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } // 将请求头信息转换为字符串以便记录 $headersString = ""; foreach ($headers as $key => $value) { $headersString .= "$key: $value\n"; } // 获取微信支付通知的 body 内容 $input = file_get_contents('php://input'); // 将请求头和 body 数据记录到日志文件中 file_put_contents($logFile, date("Y-m-d H:i:s") . " 接收到微信支付通知:\n请求头:\n" . $headersString . "\n请求体:\n" . $input . "\n", FILE_APPEND); // 解析 JSON 数据 $data = json_decode($input, true); // 设置 HTTP 响应状态码为 500 http_response_code(500); // 设置响应头的 Content-Type 并指定 UTF-8 编码 header('Content-Type: application/json; charset=utf-8'); // 响应微信支付平台 $response = [ 'code' => 'FAIL', 'message' => '失败', ]; echo json_encode($response, JSON_UNESCAPED_UNICODE); ?>
//重试间隔遵循 •15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h• 的阶梯策略,总持续24小时4分钟
// 获取微信支付通知的 body 内容
$input = file_get_contents('php://input');
// 将请求头和 body 数据记录到日志文件中
file_put_contents("d:\\prginfo\\rec.txt", date("Y-m-d H:i:s") . " 接收到微信支付通知:\n请求头:\n" . $headersString . "\n请求体:\n" . $input . "\n", FILE_APPEND);
// 解析 JSON 数据
$data = json_decode($input, true);
// 设置 HTTP 响应状态码为 500
http_response_code(500);
// 设置响应头的 Content-Type 并指定 UTF-8 编码
header('Content-Type: application/json; charset=utf-8');
// 响应微信支付平台
$response = [
'code' => 'FAIL',
'message' => '失败',
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
谢谢大佬回复!我马上试一下!