Генерируйте пользователя в определенный 1 раз код купона

  • У вас уже есть выпадающий список.
  • Когда вы выбираете одно из имен файлов из выпадающего списка, вы хотите открыть файл как новую вкладку браузера.
  • Я понял ваш вопрос, как указано выше. Как насчет этого примера сценария? Процесс этого примера сценария выглядит следующим образом.

    1. Выберите имя файла в раскрывающемся списке.
    2. Когда имя файла существует, откройте диалоговое окно для запуска Javascript, и выбранный файл откроется на новой вкладке браузера.
    3. Когда открывается новая вкладка, фокус перемещается на новую вкладку.
    4. После того, как была открыта новая вкладка, диалоговое окно Spreadsheet закрывается.

    Пример сценария:

    При использовании этого примера сценария выполните следующую последовательность действий.

    1. Скопируйте и вставьте следующий пример сценария в связанный скрипт таблицы, в которой есть раскрывающийся список.
    2. Этот скрипт использует событие OnEdit. Поэтому, пожалуйста, установите триггер OnEdit на openFile().
    3. Пожалуйста, измените Sheet1 из var sheet = "Sheet1". В этом примере предполагается, что раскрывающийся список помещен в «Лист1».
    4. Пожалуйста, измените A1 из var range = "A1". В этом примере предполагается, что раскрывающийся список помещается в ячейку «A1».

    Сценарий:

    function openFile(e) {
      var sheet = "Sheet1"; // Please set the sheet with the dropdown list.
      var range = "A1"; // Please set the range of dropdown list.
      if (e.source.getSheetName() == sheet && e.range.getA1Notation() == range) {
        var file = DriveApp.getFilesByName(e.value);
        if (file.hasNext()) {
          var f = file.next();
          var url = f.getUrl();
          var script = "";
          var html = HtmlService.createHtmlOutput(script);
          SpreadsheetApp.getUi().showModalDialog(html, 'Open ' + f.getName());
        }
      }
    }
    

    Примечание:

    • После установки выше, когда вы выбираете одно из имен файлов в раскрывающемся списке, файл открывается как новая вкладка.
    • Этот скрипт - простой пример. Поэтому, пожалуйста, измените его для вашей ситуации.
    • В этом примере сценария, когда есть несколько файлов с одинаковым именем файла, открывается первый найденный файл. Если вы хотите изменить его, пожалуйста, измените скрипт для вашей ситуации.

    Ссылки:

    Редактировать:

    Причиной проблемы является function onEdit(e) {openFile()}. e из onEdit(e) не дано в openFile(). При этом возникает такая ошибка. Поэтому, пожалуйста, установите триггер OnEdit для функции openFile(). Поэтому, пожалуйста, сделайте следующее.

    1. Удалить функцию onEdit().
    2. Установите openFile() как триггер OnEdit.
      • При этом, когда вы выбираете имя файла в раскрывающемся списке, openFile() автоматически запускается установленным триггером. В это время дается объект события.

    Как установить триггер OnEdit:

    1. Откройте редактор скриптов.
    2. Редактировать -> Триггеры текущего проекта.
    3. Нажмите «Добавить триггер».
    4. Установите «openFile» для «Выберите, какую функцию запускать».
    5. Установите «Из электронной таблицы» для «Выберите источник события».
    6. Установите «При редактировании» для «Выберите тип события».
7
задан 17 of 26 20 April 2009 в 18:18
поделиться

7 ответов

Генерируйте пару "открытый/закрытый ключ" для подписания. Снабдите цифровой подписью комбинацию идентификатора пользователя и значения купона с помощью закрытого ключа. Опубликуйте значение купона + подпись как код купона, закодированный, например, с помощью букв и чисел. Клиентское приложение проверило бы код путем воссоздания комбинации данных, которые были первоначально подписаны (например, предварительно ожидайте идентификатор пользователя к значению купона), и затем проверка цифровой подписи.

7
ответ дан 6 December 2019 в 10:04
поделиться

Походит на случай для асимметричного шифрования. Вы могли выделить открытый ключ всем, таким образом предоставив им информацию для проверки купона, но способность создать cupon будет лежать на владельце закрытого ключа (= Вы).

Я создал бы класс купона, который сериализирует к xml, и затем зашифруйте строку xml. Проверка должна была бы дешифровать строку и видеть, является ли это допустимый xml (я рекомендую не десериализовать объект, не проверяя это прежде).

5
ответ дан 6 December 2019 в 10:04
поделиться

Я использовал бы клиентский код и дату истечения срока купона. Что касается проверки, Вы могли просто сохранить допустимые купоны в своей базе данных и проверить от этого. Вы могли просканировать таблицу купона один раз в день для чистки истекших кодов.

2
ответ дан 6 December 2019 в 10:04
поделиться

Насколько умный Ваши продавцы (или женщины)? Вы могли просто базироваться 64, кодируют значение?

Проверьте здесь на то, как к base64 закодируйте и декодируйте:

http://arcanecode.wordpress.com/2007/03/21/encoding-strings-to-base64-in-c/

Кроме этого я зашифровал бы значение с ключом, известным Вами и клиентским приложением.

2
ответ дан 6 December 2019 в 10:04
поделиться

Это должно только подвести итог ответов до сих пор. Существует два основных отличных способа генерировать такие коды купона:

  1. Централизованное решение: информация о каждом купоне хранится в Вашей базе данных. Код купона может затем быть случайным образом сгенерирован и короткий - это - просто ссылка на запись в Вашей базе данных, которая содержит всю необходимую информацию, такую как значение купона, идентификатор клиента, идентификатор представителя. Проверка такого кода требует онлайн-доступа к Вашим серверам.

  2. Децентрализованное решение: купон является автономной информацией, которая может быть проверена в режиме офлайн, не получая доступ ни к одному из Ваших серверов. В результате код купона должен содержать некоторых (или даже все) информации. Самый безопасный путь состоит в том, чтобы использовать криптографию с асимметричными шифрами или Код аутентификации сообщений так, чтобы никто кроме держателя закрытого ключа можно было генерировать купоны.

1
ответ дан 6 December 2019 в 10:04
поделиться

Я предполагаю от способа, которым Вы формулировали вопрос, Вы не хотите хранить коды в базе данных (если бы Вы сделали, то Вы могли бы просто проверить каждый код против базы данных),

Так, что Вы могли сделать, сопровождают всю уместную информацию, что находится в купоне, затем хешируйте его вместе с секретной солью для предотвращения вмешательства.

Таким образом предположите желание купона для пользователя 23 стоимостью в 200$ Вы могли бы создать строку как "23_200" и вычислить хеш MD5 с секретной солью "BillTheLizard" для получения 2671519131e974ee6fc746151e98f4a8, таким образом полный код, который Вы даете клиенту, 200_23_2671519131e974ee6fc746151e98f4a8

Теперь при получении кода Вы разбиваете его и проверяете что md5 ("200_23" +secret) = 2671519131e974ee6fc746151e98f4a8 для проверки значения

Править: Если бы 32 символьных хеша являются слишком длинными, Вы могли бы всегда усекать их, например, срубание их к 8 символам все еще дало бы Вам 4294967296 различных значений хэш-функции.

1
ответ дан 6 December 2019 в 10:04
поделиться

Стив Гибсон говорит об одноразовых паролях на своем веб-сайте, но нет никаких причин, по которым вы не могли использовать его для создания одноразовых кодов купонов: http://grc.com/ ppp

1
ответ дан 6 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: