我在我的React.js应用程序中使用后端nodejs实现razorpay支付网关。
这里frontend.jsx
razorpayHandler = () =>{
const payment_amount = this.props.TotalPrice;
const backend_url = 'https://25234399bb.ngrok.io';
const self = this;
const options = {
key: config.RAZOR_PAY_KEY,
amount: payment_amount * 100,
name: 'StanPlus',
description: 'pay your ambulance fare',
handler(response) {
const paymentId = response.razorpay_payment_id;
const url = backend_url+'/razorpay/'+paymentId+'/'+payment_amount+'/'+self.id;
console.log(paymentId)
// Using my server endpoints to capture the payment
fetch(url, {
method: 'get',
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
}
})
.then(resp => resp.json())
.then(function (data) {
console.log(data)
})
.catch(function (error) {
console.log('Request failed', error);
});
},
theme: {
color: '#40A9FF',
},
};
const rzp1 = new window.Razorpay(options);
rzp1.open();
}
字符串
backend.js(nodejs)
var express = require('express');
var router = express.Router();
var config = require('../config');
const Razorpay = require('razorpay');
const instance = new Razorpay({
key_id: config.razorpay_live_key,
key_secret: config.razorpay_live_secret,
});
router.get('/:payment_id/:amount/:BID',function(req,res,next){
const {payment_id } = req.params;
const {BID} = req.params;
const amount = Number(req.params.amount*100);
instance.payments.capture(payment_id, amount).then((data) => {
data.Bid = BID;
res.json(data);
}).catch((error) => {
res.json(error);
});
})
module.exports = router;
型
显示错误
“statusCode”:400,“error”:{“code”:“BAD_REQUEST_ERROR”,“description”:“提供的id不存在”
但如果相同的代码,如果做进程使用测试键它得到成功完成,但它不与活API工作。
这里我传递了一个额外的参数到后端,这是我们需要的,但如果删除该参数,那么它也不工作。但与参数,它与测试API。
当我们向后端发送请求时,它正在生成ID并发送到后端,但仍然显示提供的ID不存在。
9条答案
按热度按时间8mmmxcuj1#
如果你使用的是测试模式,那么只需要从json对象中删除order_id参数。
ercv8c1e2#
我也面临这个错误一个星期前。这个错误到达时,我们改变了测试密钥的生产密钥的最后付款工作。
所以我遇到了这个问题提供的id不存在,因为前端和后端(node.js端)的Razorpay键不匹配。
因此,请确保您在后端和前端都拥有相同的客户端密钥和生产环境的秘密。
如果问题还没有解决,请在评论中告诉我。
x8goxv8g3#
1.对于测试,从选项json数据中删除OrderId。
1.对于Live模式,从用户控件传递自动生成的Orderid。
rkttyhzu4#
删除
order_id
不是好的做法,我们应该遵循文档。要在React
中获取order_id
,您必须首先在后端创建订单,例如(node.js
)。按照以下步骤从Razorpay
中获取order_id
。第一步
字符串
这将启动新的
Razorpay
对象。第二步
型
这将为您创建一个订单,然后您可以访问
order_id
。您可以登录MyOrder以查看更多可用属性,或者仅登录console.log(MyOrder.id)
以获取order_id
,最后您必须传递您的order_id
(在您的情况下,您必须在options
中传递order_id
)。**注意:**您可以这样访问订单id
MyOrder.id
有关更多信息,请查看官方doc。
您可以找到**
Razorpay SDKs
**用于各种平台hereubbxdtey5#
如果您使用的是支付,则从选项JSON值中删除order_id。
字符串
zqry0prt6#
当您传递一个不正确的order_id来触发支付模式时,就会发生这个错误。基本上是一个不属于您的razorpay帐户的order_id,或者是一个无效的order_id。
示例:如果您使用一组凭据生成了order_id,然后使用另一组凭据,则可能会发生此问题。
des4xlb07#
我在集成Razorpay进行订阅支付时也遇到了同样的问题。最初,我在选项参数中传递了
order_id
,这产生了错误-字符串
因此,将order_id替换为
subscription_id
。现在工作!
j7dteeu88#
检查
rp_type
,订阅通过options["subscription_id"]
,订单通过options["order_id"]
ilmyapht9#
我得到了这个错误的一个非常好的解决方案。有一个不匹配的
key
和key_id
我解决了我的错误,在前端的选项对象中用key
替换key_id
。