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

PHP Postback回传验证失败求助:MD5哈希校验始终返回500错误

问题分析与解决方案

你遇到的500返回问题,核心是参数获取错误+校验逻辑完全不符合官方规则导致的,咱们一步步来修正:

1. 先修正参数获取的两处错误

你的$_GET取值存在大小写/参数名不匹配的问题,PHP的$_GET是严格区分大小写且对应URL参数名的:

  • 请求URL里的校验哈希参数是hash,但你用了$_GET['secure_hash'],这会直接拿到空值;
  • URL里的offer参数是offer_id,但你写的是$_GET['offer_ID'],这里会获取不到正确的offer ID值。

修正后的参数获取代码:

$status = $_GET['status'];
$trans_id = $_GET['trans_id'];
$user_id = $_GET['user_id'];
$amount_local = $_GET['amount_local'];
$amount_usd = $_GET['amount_usd'];
$offer_id = $_GET['offer_id']; // 修正大小写匹配问题
$hash = $_GET['hash']; // 修正参数名匹配问题
$ip_click = $_GET['ip_click'];

2. 完全重构校验逻辑(核心错误点)

官方文档明确说明:请求里的hash参数,是对方用md5({trans_id}-yourappsecurehash)生成的校验值,你的校验逻辑完全搞反了方向,还错误拼接了一堆无关参数。

正确的校验逻辑应该是:

  1. 用请求中的trans_id,加上你的私有密钥,按照trans_id-你的密钥的格式拼接字符串;
  2. 对这个拼接字符串生成MD5哈希;
  3. 将生成的哈希和请求里的hash参数对比,一致则请求合法。

修正后的校验代码:

$app_secure_hash = "xxxxxxxxxxx"; // 替换成你控制台的私有密钥
// 按照官方规则生成校验哈希
$generated_verify_hash = md5($trans_id . '-' . $app_secure_hash);
// 用严格比较判断哈希是否匹配
if ($generated_verify_hash !== $hash) {
    echo "500"; // 校验失败
} else {
    echo "200"; // 校验成功
}

额外优化建议

  • 为了避免参数缺失导致的报错,可以给参数加上默认值,比如用PHP7+的空合并运算符:$trans_id = $_GET['trans_id'] ?? '';
  • 始终用严格比较符!==/===,避免自动类型转换带来的意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:37:43