платежный шлюз с использованием socket.io и nodejs

0

Я разрабатываю платежный шлюз (с 2-мя факторами авторизации, 2FA) с узлом/экспресс для серверной стороны и угловой js для клиентской стороны.

Связь с клиентом → сервер может выполняться через запрос POST но я хочу, чтобы связь с сервером → клиент socket.io через socket.io.

Теперь для нового пользователя, который инициирует платеж, запрос POST будет отправлен с клиента на сервер, данные будут обработаны и ответ будет отправлен обратно. По очень определенной причине ответ не может быть отправлен как часть res в полученном POST запросе.

app.post('/receive', function(req,res){
   data = req.body
   res.send('success')
   // do something with the data
   // Details regarding 2FA will be sent later via socket.io
}

После некоторой обработки данные будут отправлены клиенту в отношении 2-х факторов авторизации.

io.on('2fa', {name:name, oneTimePassword:qwerty //and additional details})

Я могу прослушивать канал 2fa с клиентской стороны, но каждое сообщение, выпущенное на этом, будет отправлено всем клиентам. Мне нужен способ отправить сообщение только конкретным клиентам, которые инициируют этот конкретный процесс оплаты.

Каждая транзакция будет зашифрована с помощью ECDH. Для транзакции будет доступен UUID, инициирующий клиент, а также номер заказа, для которого выполняется платеж.

Оцените любые рекомендации для вышесказанного.

Теги:
websocket
socket.io

1 ответ

1

В номерах Socket.io есть номера. Если вы хотите, скажем, только покупатель и продавец услышать об итогах аутентификации, поместите их в комнату и выпустите свои сообщения в саму комнату. Клиентская сторона не изменится. Вы просто socket.emit от клиента к серверу, и сервер будет помещать клиента в комнату со всеми другими соответствующими сторонами, и вся последующая связь будет выходить только в комнату вместо канала 2fa.

Это из многопользовательской игры html5, которую я разработал, когда клиент присоединяется к игровой комнате, это то, что происходит на стороне сервера:

socket.on('joingame', function(data){
  if(livingplayers[data.room] && livingplayers[data.room][data.id]){
    socket.emit('joinfail', 'That name is taken');
  } else {
    socket.join(data.room);
    socket.emit('joingame', data);
  }
});

Итак, как вы можете видеть здесь, я присоединяюсь к клиенту в игре, и я ответил на тот же канал, и я сообщил клиенту, что он успешно присоединился к игре, и на стороне сервера я положил клиента в комнату, в которую он присоединился. Любые последующие внутриигровые действия будут транслироваться только в комнату, к которой только что присоединился клиент.

  • 0
    Благодарю. Проверим это на выходных и расскажем, как все пройдет. Просто дополнительный вопрос, знаете ли вы что-нибудь об session management в сочетании с использованием socket.io ?
  • 0
    Я не знаю, но было бы очень разочарованно, если бы никто не мог использовать Express (который вы уже используете в своем приложении) для управления сессиями и socket.io для управления вещами в реальном времени совместно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню