Автор оригинала: DhananjayKumar.
В этом посте мы будем охватывать интеграцию Razorpay Paymentway Gateway с Express (Server-Side) и Action (Client-Side). Во-первых, понять Поток оплаты согласно их документию.
Шаг 1: Создайте заказ: Гость Выберите тариф на веб-сайт недвижимости на основе доступности. Наше приложение React отправляет запрос на Express API для создания заказа. Экспресс в свою очередь вызовите RazorPay для создания заказа и Razorpay_Order_ID в серверах Razorpay и возвращаются в экспресс, а затем пересылают в клиентское приложение.
Шаг 2: Соберите детали оплаты: При успешном создании заказа, форма оплаты присутствует для гостя. Гость выбирает соответствующий способ оплаты, заполнить дериторию и завершает платеж. Этот запрос напрямую отправляется в Razorpay Server с деталями, полученными из гостя вместе с Razorpay_Order_ID, полученный на шаге 1.
Шаг 3: Аутентификация и авторизация платежа: Детали оплаты, собранные от клиента, отправляются в ваш банк. Внутренне Razorpay отправляет запрос аутентификации в банк клиента. После соответствующей аутентификации Razorpay уполномочен вычесть сумму с банковского счета клиента. После того, как уполномочена сумма транзакции сохраняется с RazorPay и немедленно урегулирована на ваш счет. RazorPay возвращает Payment_id, который мы можем, наконец, сохраняться вместе с деталями бронирования.
Шаг 4: Захват платежей: После того, как оплата уполномочена банком клиента, вы должны проверить, вычтена ли уполномоченная сумма счета от клиента, такая же, как сумма, введенная заказчиком в форме оформления заказа. Уполномоченная сумма будет урегулирована на ваш счет только после этого шага проверки.
Примечание: Любая авторизация, сопровождаемый захватом в течение 5 дней, автоматически считается пустотой, а возмещение. Если мы хотим пропустить шаг 4, и у нас есть возможность автоматического захвата. Это позволяет платежам быть захваченным автоматически до окончания периода авторизации.
Давайте проверим код.
Экспресс (серверный) код:
Сначала установите узел Razorpay Node для Express App.
npm install razorpay
Далее, в контроллере добавьте ниже 2 конечных точек –
var Razorpay = require('razorpay'); router.post('/sites/:siteAddress/createBookingOrder', async (req,res,next)=> { let instance = new Razorpay({ key_id: hotel.key_id, key_secret: hotel.key_secret }); let orderDate = { "amount": req.body.bookingAmount * 100, "currency": "INR", "receipt": "receipt", "payment_capture": 1 }; instance.orders.create(orderDate, function(err, order) { res.status(200).send(order); }); }); router.post('/sites/:siteAddress/confirmBooking', async (req,res,next)=> { var newEvent = new Event.model({ name : req.body.name, checkinDate : req.body.checkinDate, checkoutDate : req.body.checkoutDate, guest : req.body.guest, payments : [], hotel_id : req.body.hotel_id }); let payment = { amount : req.body.bookingAmount, order_id : req.body.order_id, payment_id : req.body.payment_id }; newEvent.payments = [...newEvent.payments, payment]; await newEvent.save().catch(err => {throw err}); res.status(200).send(newEvent); });
Важный момент, чтобы отметить здесь – «Payment_Capture»: 1 в создании заказа. Это позволяет пропустить шаг 4, а платеж автоматически захвачен.
Реакция (клиент-сторона) код:
Включите тег скрипта для загрузки файла razorpay checkout.js в index.html.
Hotel Front Desk
Далее в компонент бронирования добавить ниже метод –
handleBooking() { CreateBookingOrder({ "bookingAmount" : this.state.bookingAmount, "hotel_id" : this.state.site._id, "siteAddress" : this.state.site.siteAddress }) .then(res => { this.handleBookingCheckout(res); }) .catch(err => { // Handle error. }); }
Выше вы можете увидеть на статусе успеха, мы называем DiskbookingCheckout со службой ответа, который включает в себя order_id.
handleBookingCheckout = (res) => { var options = { "key_id": this.state.site.key_id, "amount": res.amount, "currency": "INR", "name": this.state.site.name, "description": "Booking Request amount for "+this.state.site.name, "image": "https://example.com/your_logo", "order_id": res.id, "handler": this.handleBookingPaymentResponse, "prefill": { "name": this.state.guest.name, "email": this.state.guest.email, "contact": this.state.guest.phone, }, "notes": { "address": "note value" }, "theme": { "color": "#FFFF00" } }; let rzp = new window.Razorpay(options); rzp.open(); }
Приведенный выше код представляет собой платежное всплывающее окно, где гость заполняет детали и нажмите Pay. Еще раз вы можете увидеть, как мы позволим мы позвонить, чтобы мы позволим, чтобы мы позволим, чтобы мы позвонить, чтобы мы позвонить в RankbookingPayment Response на обработку Razorpay Sucess или отзыв с ошибками –
handleBookingPaymentResponse = (res) => { this.setState({ loading: true }); let selectedTariff = this.state.selectedTariff; let bookingData = { "name": "Booking", "checkinDate": this.state.checkin + "T12:00:00", "checkoutDate": this.state.checkout + "T12:00:00", "bookingAmount" : this.state.bookingAmount, "order_id" : res.razorpay_order_id, "payment_id" : res.razorpay_payment_id, "guest" : this.state.guest, "hotel_id" : this.state.site._id, "siteAddress" : this.state.site.siteAddress }; ConfirmBooking(bookingData) .then(res => { // Handle successful booking. }) .catch(err => { // Handle booking failure. }); }