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

Flask应用中获取有效Razorpay Order_id及解决无效问题

解决Flask中Razorpay支付提示“order_id无效”的问题

你的代码里存在几个关键错误,导致前端无法获取Razorpay生成的有效Order ID,从而触发“order_id无效”的提示。以下是具体修正方案:

修正后端代码(App.py)

原代码错误地将order_id赋值为原始请求数据,还存在拼写错误,同时全局变量的使用会引发多请求冲突。修正后的代码如下:

from flask import Flask, render_template
import razorpay
import time

app = Flask(__name__)

@app.route('/')
def index():
    # 初始化Razorpay客户端
    client = razorpay.Client(auth=("rzp_test_4TiW07UGuka131", "ds8fWK8gBhIYphLU0bwBCdau"))
    # 构建订单数据:amount为最小货币单位(100 = 1卢比),收据号用时间戳保证唯一
    order_data = { 
        "amount": 100, 
        "currency": "INR", 
        "receipt": f"receipt_{int(time.time())}"
    }
    # 调用Razorpay接口创建订单,获取返回的完整订单对象
    razorpay_order = client.order.create(data=order_data)
    # 从返回结果中提取有效order_id
    order_id = razorpay_order['id']
    # 将order_id传递给前端模板
    return render_template("index.html", order_id=order_id)

确认前端代码(index.html)

确保模板变量{{order_id}}正确绑定到Razorpay配置中,无需修改现有结构,只需确认变量名一致:

<script>
var options = {
    "key": "##############", 
    "amount": "100", 
    "currency": "INR",
    "name": "Galaxy Point",
    "description": "Kharghar navi mumbai",
    "image": "https://example.com/your_logo",
    "order_id": "{{order_id}}", <!-- 这里会渲染后端传递的有效Order ID -->
    "callback_url": "http://127.0.0.1:5000/payment",
    "theme": {
        "color": "#3799cc"
    }
};
var rzp1 = new Razorpay(options);
document.getElementById('rzp-button1').onclick = function(e){
    rzp1.open();
    e.preventDefault();
}
</script>

关键注意事项

  • 订单唯一性:用时间戳或随机字符串生成receipt值,避免重复订单被Razorpay拒绝
  • 金额单位:Razorpay要求金额以最小货币单位传入(如印度卢比的派萨,100派萨=1卢比)
  • 禁用全局变量:不要用global存储订单信息,多用户同时请求时会覆盖数据,建议用会话或数据库临时保存订单详情
  • 回调验证:在/payment回调接口中,务必验证Razorpay返回的订单状态、金额与本地订单一致,防止恶意篡改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:40