Экспресс-условная маршрутизация JS — как маршрутизировать несколько платежных шлюзов?

#node.js #reactjs #express #paypal #razorpay

#node.js #reactjs #экспресс #paypal #razorpay

Вопрос:

Всем привет, поэтому я внедряю два платежных шлюзов, то есть Paypal и Razorpay. Хорошо работает только Paypal, и я хочу также включить Razorpay, когда условие выполнено. Но я не уверен, куда поместить код и как классифицировать маршрут по условию. Есть ли какой-либо способ решить эту проблему? Спасибо

Server.js

 app.get('/api/config/paypal',(req,res) => {

     res.send(process.env.PAYPAL_CLIENT_ID)
})

app.get('/api/config/paytm',(req,res) => {

     //What do I put here?
})

  

orderController.js

 const updateOrderToPaid = asyncHandler(async (req,res) => {
    const order = await Order.findById(req.params.id)


    if (order.paymentMethod === 'Paypal') { //Here is the condition
        order.isPaid = true
        order.paidAt = Date.now()
        order.paymentResult = {
            id: req.body.id,
            status: req.body.status,
            update_time: req.body.update_time,
            email_address: req.body.payer.email_address
        }
        const updatedOrder = await order.save()
        res.json(updatedOrder)

    }else if(order.paymentMethod === 'Paytm'){ //Here is the condition
            const options = {
                amount: order.totalPrice,
                currency,
                receipt: Date.now(),
                payment_capture
            }
    
            const razorpay = new Razorpay({
                key_id: 'rzp_test_zsLrxBdRNh3GsJ',
                key_secret: 'qyNk8fVmYi2lqOQC3SR9tjWC'
            })
            const response = await razorpay.orders.create(options)
            order.isPaid = true
            order.paidAt = Date.now()
            order.paymentResult = {
                id: response.id,
                currency: response.currency,
                receipt: response.receipt,
                payment_capture: 1,
                amount:response.amount
            }
            const updatedOrder = await order.save()
            res.json(updatedOrder)
    }else {
        
        res.status(404)
        throw new Error('Order not found')
    }
})

  

orderRoutes.js

 const protect = require('../middleware/auth')
router.route('/:id/pay').put(protect,updateOrderToPaid)
  

Ответ №1:

Почему вы не используете поставщика в качестве параметра в своем маршруте

 app.get('/api/config/:provider',(req,res) => {

    const { provider } = req.params
   
   if(provider === 'paypal'){
    
       // do something related to paypal    

   }

 if(provider === 'Paytm'){
    
      // do something related to Paytm    

 }


})
  

Комментарии:

1. Спасибо за ответ. Да, но я хочу сохранить условия в методе updateOrderToPaid, потому что он передается в файл orderRoutes в одиночку. В server.js Я просто хочу отправить ответ в формате json. Для PayPal это было легко, потому что вам нужно отправить только идентификатор клиента, но здесь, с razorpay, вам нужно отправить весь ответ, и я действительно запутался в трех вышеупомянутых файлах