12

我正在使用后端 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();
    }

后端.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 不存在

4

7 回答 7

33

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

于 2020-03-24T02:29:35.723 回答
8

一周前我也遇到了这个错误。当我们将测试密钥更改为生产密钥以使最终付款正常工作时,此错误出现了。

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

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

如果仍未解决,请在评论中告诉我。

于 2019-07-09T15:05:46.743 回答
2
  1. 对于测试从您的选项 json 数据中删除 OrderId。
  2. 对于 Live 模式,从用户 Control 传递自动生成的 Orderid。
于 2020-07-09T11:46:24.483 回答
1

删除order_id不是好的做法,我们应该遵循文档。要进入order_idReact您必须首先在后端创建订单,例如(node.js)。按照这个步骤order_idRazorpay.

步骤1

var instance = new Razorpay({  key_id: 'YOUR_KEY_ID',  key_secret: 'YOUR_KEY_SECRET'})

这将启动新Razorpay对象。

第2步

MyOrder = instance.orders.create({amount, currency, receipt, notes})

这将为您创建一个订单,并且您可以访问order_id 控制台以获取更多选项,最后您必须传递您的 order_id 在您必须传递 order_id 的情况下options

注意: 您可以像这样访问订单ID MyOrder.id

有关更多信息,请查看官方文档。https://razorpay.com/docs/payment-gateway/server-integration/nodejs/

你可以Razorpay SDKs在这里找到各种平台https://razorpay.com/integrations/

于 2021-06-01T15:42:01.227 回答
0

在为订阅付款集成 Razorpay 时,我也遇到了同样的问题最初,我传入order_id了选项参数,这产生了错误 -

{
  "code": "BAD_REQUEST_ERROR",
  "description": "The id provided does not exist",
  "source": "business",
  "step": "payment_initiation",
  "reason": "input_validation_failed",
  "metadata": {}
}

因此将 order_id 替换为subscription_id.
现在工作!

于 2021-11-02T23:19:15.707 回答
0

如果您用于付款,请从选项 JSON 值中删除 order_id。

 var options = {
        "key": "xxxxxxxxxxxxxxx", // Enter the Key ID generated from the Dashboard
        "amount": "50000", // Amount is in currency subunits. Default currency is INR. Hence, 50000 refers to 50000 paise
        "currency": "INR",
        "name": "Acme Corp",
        "description": "Test Transaction",
        "image": "https://example.com/your_logo",
        // "order_id": "order_9A33XWu170gUtm", //This is a sample Order ID. Pass the `id` obtained in the response of Step 1
        "handler": function (response){
            alert(response.razorpay_payment_id);
            alert(response.razorpay_order_id);
            alert(response.razorpay_signature)
        },
        "prefill": {
            "name": "Gaurav Kumar",
            "email": "gaurav.kumar@example.com",
            "contact": "9999999999"
        },
        "notes": {
            "address": "Razorpay Corporate Office"
        },
        "theme": {
            "color": "#3399cc"
        }
    };
于 2021-06-22T10:05:33.003 回答
0

当您传递不正确的 order_id 以触发付款模式时,会发生此错误。基本上是一个不属于您的 razorpay 帐户的 order_id,或者一个无效的。

示例:如果您使用一组凭据生成 order_id,然后使用另一组凭据,则可能会发生此问题。

于 2021-09-25T17:51:18.070 回答