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

Laravel集成PhonePe支付网关报错:Undefined property: stdClass::$data 求助

PhonePe支付网关Laravel集成错误:Undefined property: stdClass::$data 解决方案及最佳包推荐

错误原因分析

这个错误说明你解析API响应时,$rData对象中不存在data属性。通常是因为请求失败,PhonePe返回了错误响应(比如签名无效、参数错误),而非预期的成功响应结构。

分步解决方案

1. 先调试原始响应内容

在尝试访问$rData->data之前,先打印原始API响应,确认返回的内容:

$response = Curl::to($url)
    ->withHeader('Content-Type:application/json')
    ->withHeader('X-VERIFY:'.$finalXHeader)
    ->withData(json_encode(['request' => $encode]))
    ->post();

// 先打印原始响应,查看是否为错误信息
dd($response);

$rData = json_decode($response);

这样你能直接看到PhonePe返回的错误详情(比如签名错误、参数缺失等)。

2. 修正代码中的明显问题

你的代码里存在重复的请求逻辑(两个完整的data数组和请求块),这是无效的,先删除重复部分,保留一套完整的请求代码。

3. 验证核心参数与签名正确性

  • SaltKey一致性:确保你使用的saltKey和PhonePe沙箱/生产后台提供的完全一致(你的代码中两个SaltKey长度不同,大概率是输入错误)。
  • 签名生成逻辑:确认签名字符串拼接正确,格式为base64编码的请求体 + "/pg/v1/pay" + saltKey,你的代码逻辑是对的,但要保证拼接时没有多余空格。
  • 请求参数合法性:检查merchantUserId、mobileNumber等参数是否符合沙箱要求,金额(amount)单位是最小货币单位(比如1卢比对应100,沙箱中用1测试是允许的)。

4. 添加安全的错误处理逻辑

在访问嵌套属性前,先判断响应是否成功,避免直接访问不存在的属性:

$rData = json_decode($response);

// 先检查响应是否有效且成功
if (isset($rData->success) && $rData->success) {
    // 注意API返回的是小写url,统一使用小写
    return redirect()->to($rData->data->instrumentResponse->redirectInfo->url);
} else {
    // 打印错误信息用于调试
    dd('请求失败:', $rData->code ?? '未知错误', $rData->message ?? '无错误信息');
}

推荐的Laravel PhonePe集成包

1. laravel-phonepe

社区维护的Laravel专用包,封装了支付创建、交易验证、回调处理等核心功能,无需手动处理签名和响应解析,只需配置.env参数即可快速集成。

2. PhonePe官方PHP SDK

PhonePe提供的官方SDK,完全遵循最新API规范,兼容性和稳定性有保障,适合需要深度定制集成的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:34:56