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
相关产品推荐
相关产品推荐

