You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

银行支付回调URL无响应及HTTP 500错误排查求助

排查与解决回调页面500错误及无输出问题

咱们一步步来定位问题,首先你的callback.php出现500错误和无输出,核心原因大概率是PHP代码的语法或逻辑错误,先从最明显的问题入手:

1. 修复回调代码的数组/对象访问错误

你在回调代码里用了json_decode(file_get_contents('php://input'), true),第二个参数true会让json_decode返回关联数组,而不是PHP对象。但你后面却用了对象的访问方式$obj->{'partnerTxnUid'},这会直接触发致命错误,导致服务器返回500。

修改后的回调代码(添加错误调试和正确的数组访问):

<?php
// 开启错误显示,方便调试(上线后可以关闭)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 获取原始POST数据
$rawInput = file_get_contents('php://input');

// 解码JSON数据为关联数组
$obj = json_decode($rawInput, true); 

// 检查JSON解码是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    print "JSON解码错误: " . json_last_error_msg();
    exit;
}

// 用数组方式访问字段,同时判断字段是否存在避免报错
if (isset($obj['partnerTxnUid'])) {
    print "partnerTxnUid: " . $obj['partnerTxnUid'] . "<br>";
}
if (isset($obj['partnerId'])) {
    print "partnerId: " . $obj['partnerId'];
}
?>

2. 处理直接访问(GET请求)的情况

当你用Chrome直接访问callback.php时,是发送GET请求,php://input没有任何数据,json_decode会返回null,之前的代码直接访问null->xxx就会报错。上面的修改已经添加了JSON解码检查,即使是GET请求,也会输出“JSON解码错误”而不是直接500。

3. 优化你的POST测试代码

手动拼接JSON字符串容易出现语法错误,建议用json_encode生成POST数据,同时添加CURL错误检查:

<?php 
session_start(); 
$accesstoken = $_SESSION['accesstoken'] ; 
$mtime = date("Y-m-d H:i:s"); 
$certFile = "/etc/apache2/ssl/theamui/amui_com.crt"; 
$keyFile = "/etc/apache2/ssl/theamui/amui.com.key"; 

// 用数组定义POST数据,再转成JSON
$postData = [
    "partnerTxnUid" => "RGH0 $mtime",
    "partnerId" => "CRP0000364",
    "partnerSecret" => "76W46SLUu0TStR2QFlm3wl4AyWVNajkU3aHNpRcfwZ27JyfDiz6I6TWstVNVqWuE",
    "requestDt" => "2021-12-28T20:12:28+07:00",
    "merchantId" => "KB000000518469",
    "qrType" => "3",
    "txnAmount" => 100.50,
    "txnCurrencyCode" => "THB",
    "reference1" => "INV001",
    "reference2" => "ref2",
    "reference3" => "ref3",
    "reference4" => "ref4",
    "metadata" => "ถุงผ้า 80.50,ดินสอ 20.00"
];

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSLCERT, $certFile); 
curl_setopt($ch, CURLOPT_SSLKEY, $keyFile); 
curl_setopt($ch, CURLOPT_URL, 'https://theamui.com/payb/callback.php'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); 

$headers = array(); 
$headers[] = "Content-Type: application/json"; 
$headers[] = "Authorization: Bearer $accesstoken"; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$response = curl_exec($ch); 

// 添加CURL错误检查
if (curl_errno($ch)) {
    echo 'CURL错误: ' . curl_error($ch);
}

curl_close($ch); 
print $response; 

$qrcodeinfo=json_decode($response)->{'qrCode'}; 
$_SESSION['qrcodeinfo'] = $qrcodeinfo; 
?>

4. 查看服务器错误日志

如果修改后还是有问题,直接查看Apache的错误日志(通常路径是/var/log/apache2/error.log),里面会记录详细的错误信息,比如哪一行代码出错、错误类型是什么,这是排查500错误最有效的方法。

按照上面的步骤修改后,应该就能解决500错误并看到回调页面的输出了。

内容的提问来源于stack exchange,提问作者Teera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:49:32