Stripe支付集成时json_decode无法获取前端POST的amount参数问题
问题根因与修复方案
你遇到的报错核心是PHP端JSON解析后的数据类型和访问方式不匹配,可按以下步骤修复:
1. 修复后端JSON访问语法
你调用json_decode($json_str, false)时第二个参数为false,解析结果是stdClass对象而非数组,用数组语法$json_obj['amount']访问会直接抛出错误,两种修改方案二选一即可:
- 方案1:保持解析结果为对象,修改amount取值方式
// 原来的写法 'amount' => $json_obj['amount'], // 替换为对象访问符 'amount' => $json_obj->amount,
- 方案2:修改json_decode参数,将结果转为关联数组
// 原来的写法 $json_obj = json_decode($json_str, false); // 第二个参数改为true $json_obj = json_decode($json_str, true);
2. 安全优化建议
不建议直接从前端传递金额参数,很容易被恶意用户篡改请求体支付低于预期的金额,建议后端根据商品ID查询定价后计算金额,避免资损。
3. 排查辅助手段
如果修改后仍报错,可以在后端先输出解析后的JSON内容验证参数是否正常传递:
// 解析后临时输出验证 var_dump($json_obj); exit;
内容的提问来源于stack exchange,提问作者dwinnbrown
相关产品推荐
相关产品推荐

