Сделать переменную постоянной между 2 сессиями - PullRequest
0 голосов
/ 24 сентября 2019

Я надеюсь, что смогу объяснить свою проблему достаточно ясно, не добавляя слишком много деталей.У меня есть веб-сайт, где я пытаюсь сохранить переменную между двумя разными сессиями.Один между пользовательским клиентом и сайтом и один между внешней службой API и сайтом.

Шаг 1: пользовательский клиент отправляет запрос на сервер, используя ajax.На стороне сервера этот запрос обрабатывается, и, если все хорошо, мой сайт отправляет запрос во внешнюю службу API.Эта внешняя служба возвращает true , если все проверено и мой сайт отправляет ответ об успешном выполнении клиентской части пользователя.

Шаг 2: после задержки (до 3 минут) служба внешнего API отправляет новый отдельный запрос POST на пользовательский URL обратного вызова на моем сайте.Теперь внешний сервис - это действующий клиент, а мой сайт - это действующий сервер.В функции, которая захватывает этот обратный вызов, я хочу сохранить опубликованные данные с помощью функции save_data ().

Шаг 3: пользовательский клиент отправляет второй вызов ajax, чтобы проверить, опубликовала ли внешняя служба какие-либо данные.Здесь я хочу использовать ту же функцию save_data () для извлечения данных, сохраненных на шаге 2.

Это то, что у меня есть до сих пор ...

// callback from external service acting as client
function _api_callback() {
  $data = json_decode(file_get_contents("php://input"), $assoc = true);
  save_data('test', serialize($data)); // save data from external service
}

Функция выше захватывает данныеиз внешнего сервиса и сохраняет его с помощью функции save_data().

// ajax call from user client, checking if callback has arrived from external service
function _check_api_callback() {
  $data = save_data('test'); // retrieve data saved during external callback session
  drupal_json_output('data: '.$data);  // debug in console
  drupal_set_message(t("data: ".$data)); // debug info on page reload
}

В указанной выше функции записывается вызов ajax со стороны клиента, а функция save_data () используется для извлечения данных из внешнегоСлужба API, которая была сохранена ранее.

// save data from external service to make it available for user client
function save_data($key, $value = NULL) {
  global $user;
  static $storage;
  if ($value) {
    $storage[$key] = $value;
    $_SESSION['lists'][$key] = $value;
  }
  else if (empty($storage[$key]) && isset($_SESSION['lists'][$key])) {
    $storage[$key] = $_SESSION['lists'][$key];
  }
  return $storage[$key];
}

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

Проблема: вышеописанное не работает, ничего не получено из функции save_data (), так как я могу сделать данные, полученные из внешней службы, доступнымидля второго вызова AJAX в шаге 3 выше?

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

...