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

集成PhonePe API遇callbackurl接收异常:POST报404、GET返回null

PhonePe API回调接收异常:POST 404/GET返回null问题排查

问题现象

  • 独立webhook服务可正常接收PhonePe的POST回调
  • 自有网站中使用POST方式接收回调时返回404错误
  • 改用GET方式接收时,接口可访问但返回null值

核心原因分析与解决办法

1. 路由与URL匹配问题(POST 404主因)

404错误本质是请求路径未匹配到对应Action,需做以下检查:

  • 给samplepayment Action添加明确路由特性:[Route("samplepayment")],确保PhonePe配置的回调URL(如https://yourdomain.com/samplepayment)与路由完全匹配
  • 核对PhonePe后台配置的回调URL:必须包含完整域名、路径,若网站使用非标准端口需一并带上,且HTTP/HTTPS协议要与网站一致(网站用HTTPS则回调URL必须是HTTPS)

2. CSRF防护拦截请求

自有网站默认开启的CSRF验证会拦截无令牌的第三方POST请求,需给Action添加排除规则:

[HttpPost]
[AllowAnonymous]
[IgnoreAntiforgeryToken] // 跳过CSRF验证
[Route("samplepayment")]
public ActionResult samplepayment()
{
    // 原有逻辑
}

3. GET方式不可用的原因

PhonePe回调仅支持POST请求,改用GET时,PhonePe不会在URL参数中传递JSON数据,导致代码中读取的请求体为空,反序列化后自然返回null,请勿使用GET方式接收回调。

4. 代码优化建议

  • 替换过时的Request.InputStream为Request.Body,适配ASP.NET新版本:
    using (var reader = new StreamReader(Request.Body))
    {
        jsonBody = reader.ReadToEnd();
    }
    
  • 添加日志记录,排查请求是否到达接口、请求体是否完整:
    // 记录请求时间与请求体到日志文件
    var logPath = Server.MapPath("~/App_Data/phonepe_callback.log");
    System.IO.File.AppendAllText(logPath, $"[{DateTime.Now}] Request Received:\n{jsonBody}\n\n");
    
  • 后续必须实现VerifyXVerifyHeader的真实验证逻辑,使用商户密钥生成签名与X-VERIFY头对比,避免伪造请求。

调整后的完整示例代码

[HttpPost]
[AllowAnonymous]
[IgnoreAntiforgeryToken]
[Route("samplepayment")]
public ActionResult samplepayment()
{
    var xVerifyHeader = Request.Headers["X-VERIFY"];
    if (xVerifyHeader == null || !VerifyXVerifyHeader(xVerifyHeader))
    {
        return Content("Invalid Verification");
    }

    string jsonBody;
    using (var reader = new StreamReader(Request.Body))
    {
        jsonBody = reader.ReadToEnd();
    }

    if (string.IsNullOrEmpty(jsonBody))
    {
        return Content("Empty Request Body");
    }

    dynamic jsonObject = JsonConvert.DeserializeObject(jsonBody);

    var merchantId = jsonObject["merchantId"];
    var merchantTransactionId = jsonObject["merchantTransactionId"];
    var amount = jsonObject["amount"];
    var status = jsonObject["status"];

    // 此处添加业务处理逻辑,如保存交易记录到数据库

    return Content("Callback Successful");
}

private bool VerifyXVerifyHeader(string xVerifyHeader)
{
    // TODO: 使用PhonePe提供的商户密钥,按照官方文档生成签名并与xVerifyHeader对比
    return true;
}

回调重定向后的页面截图

回调重定向页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:22:45