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

Razorpay支付网关报Invalid amount错误,PHP技术栈下求解决方案

问题根因

你遇到的错误核心是Razorpay支付网关接收的金额不符合要求,结合你提供的代码,具体有3个直接诱因:

  1. 购物车页面的「立即下单」按钮是通过<a>标签跳转,没有将购物车总金额、用户填写的账单信息提交到payscript.php,导致$_POST['cartContent']为空,计算出的派萨金额为0,远低于最低100派萨的要求
  2. 购物车页面存在表单嵌套问题,外层的contactform表单内部嵌套了needs-validation表单,HTML规范不允许表单嵌套,会导致表单提交逻辑失效
  3. payscript.php没有对接收的金额做合法性校验,空值、非数字值都会导致金额计算错误

修复方案

1. 修改购物车页面代码

  • 删除嵌套的<form class = "needs-validation" novalidate>标签(保留内部的输入框结构)
  • 在总金额span同级添加隐藏域,用于提交总金额
  • 将「立即下单」按钮的<a>标签移除,改为普通submit按钮
  • 购物车JS计算总金额时,同时给隐藏域赋值

修改后核心代码片段:

<!-- 外层表单保留,action改为payscript.php -->
<form name="contactform" method="post" action="payscript.php">    
<div class="modal-body">
<div class="container">
  <div class="row">
    <div class="col-md-6 order-md-4 mb-6">
      <table id="cartents" class="show-cart table"></table>
      <div>Total price: <span class="total-cart" id="cartContent"></span></div>
      <!-- 新增隐藏域存储总金额 -->
      <input type="hidden" name="cartContent" id="cartContentInput">
<br>
    <div class="modal-footer">
     <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      <!-- 去掉a标签,改为submit按钮 -->
      <button type="submit" class="btn btn-primary">Order now</button>
    </div>
</div>
<div class="col-md-6 order-md-1">
  <h4 class="mb-3">Billing address</h4>
  <!-- 删掉原来这里的form标签,保留下面的输入框 -->
    
     <div class="mb-3">
      <label for="fullname">Full name</label>
      <div class="input-group">
        <!-- 所有输入框加上name属性,name值和id保持一致即可 -->
        <input type="text" class="form-control" id="name" name="name" placeholder="Enter your full name" required>
        <div class="invalid-feedback" style="width: 100%;">
          Your full name is required.
        </div>
      </div>
    </div>
    <!-- 剩余的手机号、邮箱、地址输入框按上述规则补充name属性即可 -->

注意:你的购物车JS逻辑中,给#cartContent赋值总金额时,同步给#cartContentInput也赋值相同的数值

2. 修改payscript.php代码

  • 新增金额合法性校验,确保转换后的派萨金额为整数且不低于100
  • 用户预填信息改为从POST参数获取,增加XSS转义
  • 新增参数存在性校验,避免直接访问该页面时报错

修改后完整代码:

<?php
$apiKey = ""; // 填写你自己的Razorpay API Key
// 校验参数是否正常提交
if (!isset($_POST['cartContent'], $_POST['name'], $_POST['phonenumber'], $_POST['email'], $_POST['address'])) {
    die('非法访问,请从购物车页面提交订单');
}
// 金额处理
$totalRupee = (float)$_POST['cartContent'];
$amountInPaise = (int)round($totalRupee * 100);
// 校验最低金额
if ($amountInPaise < 100) {
    die('订单最低金额为₹1,请添加商品后再下单');
}
// XSS转义用户信息
$name = htmlspecialchars($_POST['name']);
$phone = htmlspecialchars($_POST['phonenumber']);
$email = htmlspecialchars($_POST['email']);
$address = htmlspecialchars($_POST['address']);
?>
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<form action="" method="POST">
<script
    src="https://checkout.razorpay.com/v1/checkout.js"
    data-key="<?php echo $apiKey; ?>"
    data-amount="<?php echo $amountInPaise; ?>"
    data-currency="INR"
    data-id="<?php echo 'OID'.rand(10,100).'END';?>"
    data-buttontext="Pay with Razorpay"
    data-name="Atharv Organics"
    data-description="my website name"
    data-image="logo.png"
    data-prefill.name="<?php echo $name; ?>"
    data-prefill.email="<?php echo $email; ?>"
    data-prefill.contact="<?php echo $phone; ?>"
    data-prefill.address="<?php echo $address; ?>"
    data-theme.color="#F37254"
></script>
<input type="hidden" custom="Hidden Element" name="hidden">
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:39:03