Как получить отправляемые данные cheсkout?

Главные вкладки

Аватар пользователя develmax develmax 8 сентября 2020 в 22:32

Необходимо получить данные после оформления заказа и отправить в телеграм.
Через обычные формы схема работает через hook fоrm_alter + вызов самой функции где я получаю данные ($data = $form_state->getValues();) и пакую их, как мне нужно.
Вроде нужен этот hook: "hook_commerce_checkout_pane_info()", но это не точно..
Кто знает, как это работает в commerce, может кто сталкивался?

Комментарии

Аватар пользователя OldWarrior OldWarrior 8 сентября 2020 в 22:55

develmax wrote:... Через обычные формы схема работает через hook fоrm_alter + вызов самой функции где я получаю данные ($data = $form_state->getValues();) и пакую их, как мне нужно...

Ну также и делайте с чекаут-формами.
Можно на альтере формы просто указать дополнительную кастомную сабмит-функцию.

Альтернатива: расширить класс формы дочерним классом с одним кастомным методом сабмита. Соответственно, первым вызовом <?php parent::submitForm$form $form_state ?>, потом всё, что вам нужно.

Аватар пользователя voviko voviko 8 сентября 2020 в 22:59
<?php
function sendMessage($chatID$messaggio$token) {
    
//  echo "sending message to " . $chatID . "\n";

    

$url "https://api.telegram.org/bot" $token "/sendMessage?chat_id=" $chatID;
    
$url $url "&text=" urlencode($messaggio);
    
$ch curl_init();
    
$optArray = array(
        
CURLOPT_URL => $url,
        
CURLOPT_RETURNTRANSFER => true
    
);
    
curl_setopt_array($ch$optArray);
    
$result curl_exec($ch);
    
curl_close($ch);
    return 
$result;
}

//Отправляем, например в альтере, можно намудрить и более правильно, но мне хватает
    //Уведомление в телеграм
    
$token "7777777:АААААААААААААААААААААААААААААА";
    
sendMessage(XXXXX"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"$token);
?>

Тут главное отписаться боту и узать $chatID

Аватар пользователя develmax develmax 8 сентября 2020 в 23:13

Дело в том, что по какой-то причине альтер не хочет работать на chekout.
Сам код под телеграм готов и успешно отправляется с обычной формы.

<?php/**
 * Implements hook_form_alter().
 *
 * @param $form
 * @param FormStateInterface $form_state
 * @param $form_id
 */
function telegram_notice_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'webform_submission_booking_node_11_add_form'
  ){
    $form['actions']['submit']['#submit'][] = '_telegram_notice_form_submit';
    }
}

/**
* @param $form
* @param FormStateInterface $form_state
*
*/
function _telegram_notice_form_submit(&$form, FormStateInterface $form_state){
  # Telegram data
  $telegram_token   = 'bot7777777:AAGwBj12FwhshhohBzin_dpkxFZAc6QrdYSdg';
  $telegram_id_chat = '-77777777';

  $data = $form_state->getValues();

  if(!empty($telegram_token) && !empty($telegram_id_chat)) {
      # Form data
      $data_result = [
      'title' => '<b>Заявки</b>',
      'name'  => '<b>Имя: </b> ' .$data['name'],
      'phone' => '<b>Телефон: </b> ' .$data['phone'],
      'email' => '<b>Email:</b> ' .$data['email']
    ];

    # Send message | "%0A" 
    $message = implode($data_result, '%0A');
    $send_message = fopen("https://api.telegram.org/{$telegram_token}/sendMessage?chat_id={$telegram_id_chat}&parse_mode=html&text={$message}", "r");
  }
}
?>

Аватар пользователя OldWarrior OldWarrior 9 сентября 2020 в 6:11

develmax wrote:... Дело в том, что по какой-то причине альтер не хочет работать на chekout...

Нет таких причин.
hook_form_alter должен работать для форм чекаута
Проверяйте, что у вас не так.

Аватар пользователя vlucas vlucas 9 сентября 2020 в 9:59

Зачем вы вообще что-то альтерите? Есть же события перед и после сохранения заказа. Используйте их