收藏
回答

微信支付回调通知没有应答,为啥也只通知一次?

服务器防火墙、回调地址、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);
?>


最后一次编辑于  03-14
回答关注问题邀请回答
收藏

2 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    03-15

    大概率还是你应答的有问题,我测试是可以接收到多次回调的

     $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);
    ?>
    
    
    

    03-15
    有用 1
    回复 1
    • 凯哥(悠悠万世,吃饭为大)
      凯哥(悠悠万世,吃饭为大)
      03-15
      成功了,确实是回复问题!非常感谢!
      03-15
      回复
  • 凯哥(悠悠万世,吃饭为大)
    凯哥(悠悠万世,吃饭为大)
    03-15

    谢谢大佬回复!我马上试一下!

    03-15
    有用
    回复
登录 后发表内容