【问题标题】:Express JS conditional routing -How to route Multiple payment gateways?Express JS 条件路由 - 如何路由多个支付网关?
【发布时间】:2021-02-24 16:41:21
【问题描述】:

大家好,我正在实施两个支付网关,即 Paypal 和 Razorpay。单独使用 Paypal 效果很好,我想在满足条件时也包括 Razorpay。但我不确定将代码放在哪里以及如何按条件对路线进行分类。有没有办法解决这个问题?谢谢

服务器.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)

【问题讨论】:

    标签: node.js reactjs express paypal razorpay


    【解决方案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    
    
     }
    
    
    })
    

    【讨论】:

    • 感谢您的回复。是的,但我想保留 updateOrderToPaid 方法中的条件,因为它是单独传递到 orderRoutes 文件中的。在 server.js 中,我只想发送 json 响应。贝宝很容易,因为您只需要发送客户 ID,但在这里使用 razorpay 您需要发送整个响应,我真的对上述三个文件感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多