提供的id在nodejs中不存在razorpay

zul*_*ain 11 payment payment-gateway node.js razorpay

我正在使用后端 nodejs 在我的 React.js 应用程序中实现 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();
    }
Run Code Online (Sandbox Code Playgroud)

后端.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;
Run Code Online (Sandbox Code Playgroud)

它显示了我的错误

"statusCode":400,"error":{"code":"BAD_REQUEST_ERROR","description":"提供的id不存在"

但是如果相同的代码如果使用测试密钥进行处理,它会成功完成,但它不能与实时 api 一起使用。
在这里,我将一个额外的参数传递给我们需要的后端,但如果删除该参数,那么它也不起作用。
当我们向后端发送请求时,它正在生成 id 并发送到后端,但它仍然显示提供的 id 不存在

Sai*_*i N 26

如果您使用的是测试模式,那么只需从 json 对象中删除order_id参数。

  • @PranKumarSarkar 删除 order_id 会起作用。但这不是正确的方法。您必须从 Razorpay 获取测试订单 ID。删除订单 ID 就像一个让它发挥作用的技巧,但这不是正确的方法。稍后您会遇到问题。 (2认同)

小智 6

一周前我也遇到了这个错误。当我们将测试密钥更改为生产密钥以进行最终付款时,就会出现此错误。

所以我遇到了这个问题提供的id不存在,因为前端和后端(node.js端)的Razorpay Keys不匹配。

因此,请确保您在后端和前端具有相同的客户端密钥和生产环境机密。

如果仍然没有解决,请在评论中告诉我。