Определить, сканируется ли QR-код WeChat

Я пытаюсь создать приложение, которое отображает QR-код WeChat, и он будет сканироваться мобильным приложением WeChat для проведения платежа. Конечно, аутентификация, безопасность и проверки реализованы в приложении, поэтому не все могут выполнять сканирование. Но я действительно хочу добиться того, чтобы после сканирования QR-кода вкладка с QR-кодом автоматически закрывалась или, по крайней мере, запускала что-то в javascript. Является ли это возможным?

Обратите внимание:

QR-код — это визуализированное изображение, полученное из возврата API.


person Dean Christian Armada    schedule 08.05.2017    source источник
comment
Какое приложение вы создаете? Это приложение React Native или вы используете WeChat JSSDK? Собственный HTML5 не поддерживает сканирование QR.   -  person shaochuancs    schedule 09.05.2017
comment
На самом деле это приложение для платежей. В основном, я хочу запустить что-то в javascript, если сканируется QR-код на странице. Изображение QR-кода получено из API, и все, что мне нужно, это отобразить его с помощью тега img.. Поэтому, когда код будет отсканирован, я сделаю перенаправление. Это возможно?   -  person Dean Christian Armada    schedule 09.05.2017
comment
Как вы сканируете изображение QR в HTML/JavaScript? Он основан на JS-SDK WeChat? Как вы упомянули JavaScript, я думаю, это не родное приложение для iOS/Android.   -  person shaochuancs    schedule 09.05.2017
comment
@shaochuancs, QR-код — это изображение, возвращенное из API и только что отрендеренное с помощью тега img.   -  person Dean Christian Armada    schedule 09.05.2017
comment
Я понятия не имею о платежах WeChat или о чем-то подобном, но единственный способ обнаружить это — если какой-то API каким-то образом дает вам знать, что какое-то действие было предпринято путем сканирования кода. То есть вы показываете код, приложение сканирует код, приложение выполняет вызов API на основе кода, API связывается с вашим сервером, ваш сервер отправляет событие в браузер, браузер отклоняет код.   -  person deceze♦    schedule 09.05.2017
comment
@deceze, вы говорите о событиях в реальном времени, подключенных через веб-сокеты, верно?   -  person Dean Christian Armada    schedule 09.05.2017
comment
Это не единственная возможность, но наиболее вероятный кандидат, да.   -  person deceze♦    schedule 09.05.2017
comment
Да, я понимаю, что изображение QR-кода возвращается из API. Но сканируете ли вы его в своем приложении? Или сканирование завершено WeChat, и вам просто нужно знать, когда кто-то сканирует его?   -  person shaochuancs    schedule 09.05.2017
comment
@deceze Не могли бы вы указать другие возможности? Потому что этот метод - мое последнее средство. Как сервер может отправить событие в браузер, кроме веб-сокета?   -  person Dean Christian Armada    schedule 09.05.2017
comment
События на стороне сервера, повторный опрос AJAX, длительный опрос…   -  person deceze♦    schedule 09.05.2017
comment
@shaochuancs, он будет просканирован определенным пользователем с помощью Scan QR Code в приложении WeChat, и браузер / внешний интерфейс должен знать, что он был просканирован, и как только он станет известен, я вызову код Javascript.   -  person Dean Christian Armada    schedule 09.05.2017
comment
@deceze, я тоже так думал .. SetTimeout для связи с сервером   -  person Dean Christian Armada    schedule 09.05.2017
comment
Теперь я понимаю ваш вопрос. Это работа по интеграции с платежными средствами WeChat. Я думаю, что будет лучше, если будет предоставлена ​​ссылка на документ этого API.   -  person shaochuancs    schedule 09.05.2017
comment
Обычно сторонний платежный API предлагает метод обратного вызова, так что когда платеж будет выполнен, ваш код будет вызван.   -  person shaochuancs    schedule 09.05.2017
comment
@shaochuancs, на самом деле это включает обратный вызов, но он будет просто запрошен на стороне сервера, а не во внешнем интерфейсе, и я стараюсь не использовать для этого веб-сокеты.   -  person Dean Christian Armada    schedule 09.05.2017
comment
Да, обратный вызов будет вызван на стороне вашего сервера, затем вы можете использовать различные технологии push, упомянутые @deceze, чтобы уведомить браузер о сообщении. Таким образом, логика такова: сгенерируйте QR-код и зарегистрируйте обратный вызов —> пользователь сканирует QR —> вызов обратного вызова —> отправка сообщения в браузер.   -  person shaochuancs    schedule 09.05.2017
comment
@shaochuancs, push-сообщение отличается от веб-сокетов в реальном времени, верно? Раньше не использовали push-сообщения   -  person Dean Christian Armada    schedule 09.05.2017
comment
push-сообщение — это просто общие слова, в вашем случае поможет все, что будет обновлять информацию в браузере без взаимодействия с пользователем. Он включает в себя веб-сокет, повторный запрос ajax в setInterval, длинный опрос и т. д.   -  person shaochuancs    schedule 09.05.2017
comment
@shaochuancs, хорошо, спасибо!   -  person Dean Christian Armada    schedule 09.05.2017


Ответы (1)


Это классическая проблема в интеграции 3-го платежа. Я предполагаю, что в вашем кейс.

Логика такова:

  1. Вызовите API, чтобы начать заказ и получить Изображение QR-кода. Обратите внимание, что в API вы можете зарегистрировать callback URL (notify_url), которые принадлежат вашему серверу.
  2. Пользователь сканирует изображение QR-кода для оплаты.
  3. Сервер WeChat получает операцию сканирования, пытается выполнить оплату и вызывает ваш notify_url.
  4. На ваш сервер поступает информация об успешном/неудачном платеже, и эта информация отправляется клиенту.
  5. Клиент получает информацию об успешном/неудачном платеже и выполняет работу пользовательского интерфейса.

Существует несколько способов передачи информации с сервера на клиент:

  • Веб-сокет
  • Сервер отправил событие
  • комета
  • Повторный запрос ajax с использованием setInterval
person shaochuancs    schedule 09.05.2017
comment
Большое спасибо за попытку ответить и поделиться знаниями! - person Dean Christian Armada; 09.05.2017