Я пытаюсь программно повторно отправить пропуск участнику после повторной выдачи пропуска билета из функции PHP.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Я пытаюсь программно повторно отправить пропуск участнику после повторной выдачи пропуска билета из функции PHP.

Сообщение Anonymous »

Меня попросили повысить вероятность мошенничества с билетами со стороны людей, покупающих билеты, с помощью Event Tickets Plus (плагин WordPress Calendar Events). Когда кто-то покупает, скажем, 2 пропуска на мероприятие, ему выдаются два пропуска в формате PDF, отправленные по электронной почте двум участникам, которых они добавили на мероприятие... Затем покупатель может обновить информацию об участниках, например. Имя и адрес электронной почты владельца билета.
Обеспокоение заключалось в том, что
  • новый участник может не быть клиентом woocommerce/ Пользователь WP и
  • что мешает покупателю «перепродавать» поддельные пропуска, постоянно обновляя информацию о двух своих посетителях билетов, каждому из которых отправляется билет в формате PDF, и когда они добираются до мероприятия, первый, кто зарегистрируется, пройдет, НО остальные не смогут быть отсканированы с помощью сканера QR-кода и кода безопасности, прикрепленного к билету...
Хорошо, поэтому я решил использовать CSS, чтобы скрыть встроенную информацию об обновлении участника в плагине, а затем с помощью ACF создал форму, содержащую 3 поля

[*] Текущий идентификатор заявки
[*]новое поле Ticket_holder (имя)
[*]новое поле Ticket_email_to (адрес электронной почты)

Форма запускает перехватчик Transfer_ticket при обновлении, который запускает следующую функцию (извините за плохой код, но она работает)

Код: Выделить всё

    add_action('acf/save_post', 'transfer_ticket');

function transfer_ticket( $post_id ) {

global $wpdb;
global $post;
global $user;

$pid = intval($_GET["tid"]);
$ticket_holder = get_post_meta($post_id, 'ticket_holder',true);
$ticket_email_to = get_post_meta($post_id, 'ticket_email_to',true);
$_unique_id = get_post_meta($post_id, '_unique_id',true);

$_tribe_wooticket_event = get_post_meta($post_id, '_tribe_wooticket_event',true);
$_tribe_wooticket_order = get_post_meta($post_id, '_tribe_wooticket_order',true);
$_tribe_wooticket_product = get_post_meta($post_id, '_tribe_wooticket_product',true);

$lastDelimiterPos = strrpos($_unique_id, '-');
$lastpart = substr($_unique_id, $lastDelimiterPos + 1);

//update_post_meta($post_id, '_tribe_tickets_full_name', $ticket_holder);
//update_post_meta($post_id, '_tribe_tickets_email', $ticket_email_to);

// First, make sure the email address is set
if ( isset( $ticket_email_to ) && ! empty( $ticket_email_to ) ) {

// Next, sanitize the data
$email_addr = trim( strip_tags( stripslashes( $ticket_email_to ) ) );
$exists = email_exists($email_addr);

if ( !$exists) {

$xname = trim($ticket_holder);
$last_name = (strpos($xname, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '$1', $xname);
$first_name = trim( preg_replace('#'.preg_quote($last_name,'#').'#', '', $xname ) );
$args = array('first_name' => $first_name, 'last_name' => $last_name);

$newid ='';
$length = 6 ;
$batch = array_merge( range( '0', '9' ), range( 'A', 'Z' ) );

shuffle( $batch );
$id = '';
$keys = array_rand( $batch, $length );

foreach ( $keys as $index ) {

$newid .= $batch[ $index ];

}

$n_unique_id = str_replace($lastpart,$newid , $_unique_id);
update_post_meta($post_id, 'last_name', $last_name); // for testing
update_post_meta($post_id, 'first_name', $first_name); // for testing
update_post_meta($post_id, 'newid', $newid); // for testing
update_post_meta($post_id, 'lastpart', $n_unique_id); // for testing

$username = sanitize_title( $ticket_holder );
$user_login = wp_slash( $username );
$user_email = wp_slash( $email_addr );
$user_pass  = wp_generate_password( 6, false );;
$userdata = compact( 'user_login', 'user_email', 'user_pass' );

// Create the new user
$new_user_id = wp_create_user( $user_login, $user_pass, $user_email );

// Get current user object
$user = get_user_by( 'id', $new_user_id );

// Remove role
$user->remove_role( 'subscriber' );

// Add role
$user->add_role( 'customer' );

wp_update_user( array( 'ID' =>  $user->ID, 'display_name' => sanitize_text_field($xname) ) );
update_user_meta($user->ID, 'first_name', $first_name);
update_user_meta($user->ID, 'last_name', $last_name);

$nsecurity_code = substr( md5( wp_rand() . '_' . $user->ID ), 0, 10 );

update_post_meta($post_id, '_tribe_wooticket_security_code', $nsecurity_code);
update_post_meta($post_id, '_unique_id', $n_unique_id);
update_post_meta($post_id, '_tribe_tickets_email', $user_email);
update_post_meta($post_id, '_tribe_tickets_full_name', $xname);
update_post_meta($post_id, '_tribe_tickets_attendee_user_id', $new_user_id);
echo "alert('Ticket has been transferred !!!');";

} else {
//echo ' User exists';
}

header("Location: https://somewebsite.com/my-dashboard/bookings/");
die();
}

}
По сути, и я это проверил, происходит следующее.

[*]Он создает нового пользователя WP с ролью клиента ' Клиент», если адрес электронной почты пользователя не существует в WP.
[*]Он обновляет метаданные существующего билета, добавляя адрес электронной почты и имена новых пользователей, а билет _tribe_tickets_attendee_user_id — нового пользователя WP.
[*]Он воссоздает код безопасности билета (используемый в QR)
[*]Он воссоздает _unique_id билета, который необходим для успешной регистрации

Теперь новый пользователь может войти в систему, просмотреть свой билет и добавить его в свой кошелек Google или iPhone или загрузить свой билет в формате PDF. Я проверил мобильное приложение и новые выданные чеки билетов со 100% точностью с помощью QR-сканера.
ТЕПЕРЬ ПРОБЛЕМА РЕШАЕТСЯ
Я пытаюсь заставить приведенную выше функцию каким-то образом подключиться к плагину The Events Calendar Ticket, чтобы автоматически отправлять новому пользователю его билет в формате PDF !!! И я не могу этого понять. У меня есть идентификатор заявки, идентификатор события, идентификатор пользователя и данные, но как мне повторно отправить заявку?
Есть ли возможность позвонить?
Я просмотрел код плагина и обнаружил, что единственное, что очень похоже на хук или функцию, которую я могу вызвать, находится в wp-content/plugins/event-tickets-plus/src/Tickets_Plus/Commerce/Attendee_Registration/Hooks. php
строки 171–182
`

Код: Выделить всё

public function update_attendee_meta_my_tickets_page( $attendee_id, $data_to_save, $data, $order_id, $ticket_id, $post_id, $provider ) {
$args = [
'fields' => $data,
];

$ticket = tribe( Commerce\Ticket::class )->get_ticket( $ticket_id );

// Always inject IAC after Fields.
$args = $this->container->make( Attendee::class )->inject_individual_collection_args( $args, $ticket );

$attendee = tec_tc_attendees()->by( 'id', $attendee_id )->set_args( $args )->save();
}`
Кто-нибудь может помочь мне найти способ повторно отправить билет в формате PDF?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -issuing-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»