Функция Drupal 7 db_insert () вызывает внутреннюю ошибку сервера (500) - PullRequest
0 голосов
/ 25 сентября 2019

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

Это функция:

// callback from external service acting as client
function _api_callback() {
  global $user;
  $data = json_decode(file_get_contents("php://input"), $assoc = true);
  $date = $date['year'] . '-' . $date['month'] . '-' . $date['day'];
  $timestamp = strtotime($date);
  db_insert('postback')
  ->fields(array(
    'user_id' => $user->uid,
    'data' => $data,
    'created_date' => $timestamp,
  ))
  ->execute(); // save data from external service
}

В журнале доступа сайта я вижу, что мой сайт отвечает кодом 500 при поступлении внешнего обратного вызова.

Однако, если я закомментирую все в этой функции, внешний обратный вызов получит код ответа 200.

Таким образом, при получении этого обратного вызова происходит что-то не так.Трудно отлаживать, так как обратный вызов из внешней службы API запускает совершенно новый сеанс.

Пользовательская таблица "postback" была успешно создана в файле .install моего пользовательского модуля, и я зарегистрировался в phpMyAdminчто таблица присутствует и хорошо.Это функция schema() в файле .install:

function module_payments_schema() {
  $schema['postback'] = array(
    'description' => 'Data saved from API postback URL.',
    'fields' => array(
      'id' => array(
        'description' => 'Auto incremental id.',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE),
      'user_id' => array(
        'description' => 'User id for the order.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => FALSE),
      'order_id' => array(
        'description' => 'Current order number.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0),
      'data' => array(
          'description' => 'Postback data from external API.',
          'type' => 'varchar',
          'length' => 1020,
          'not null' => TRUE,
          'default' => ''),
      'created_date' => array(
          'description' => 'Created date and time (yyyy-mm-dd H:i:s).',
          'type' => 'varchar',
          'mysql_type' => 'DATETIME',
          'not null' => TRUE,
        ),
      ),
      'primary key' => array('id'),
    );

    return $schema;
  }

Кто-нибудь, кто может понять, в чем дело?

1 Ответ

0 голосов
/ 25 сентября 2019

Оказывается, мне нужно было отформатировать значение даты следующим образом ...

date('Y-m-d H:i:s');

... для работы с типом mysql DATETIME.

Итак, рабочая функциятеперь выглядит так:

function _api_callback() {
  global $user;
  $data = json_decode(file_get_contents("php://input"), $assoc = true);
  db_insert('postback')
  ->fields(array(
    'user_id' => $user->uid,
    'data' => $data,
    'created_date' => date('Y-m-d H:i:s');
  ))
  ->execute(); // save data from external service
}
...