1.
Мне нужно записать в базу данные id, ware->id, ware->title, income если найдено соответствие по email адресу.
- добавьте в таблицу dle_users колонки под эти данные (с префиксом, чтобы отличать их от остальных колонок, например paym_id, paym_ware_id, paym_title, paym_income) или создайте новую таблицу payment_info с такими же колонками плюс user_id как foreign key на id из таблицы dle_users.
2.
На сайте может быть зарегистрировано несколько тысяч пользователей.
- несколько тысяч - это сколько?) До 10 тысяч? До 100 тысяч? Это имеет значение, это влияет на решения, принимаемые в п.1. Для большой таблицы с активными данными и частой записью лучше не делать alter table.
3.
Обращаться к Json хочу как можно чаще по cron
- наименьшая единица времени в кроне - 1 минута. Насколько часто Вам нужно? Иногда раз в полчаса вполне достаточно - не будет лишней нагрузки, но тут вопрос к бизнес требованиям - на что влияет актуальность этих данных.
4. По какому критерию Вы инициируете запрос к стороннему сервису? Как я вижу, что вы дергаете данные по одному платежу/пользователю, неизвестно, как сторонний сервис отреагирует на много запросов за один раз.
Скрипты по крону не имеют ограничения по времени исполнения, но могут зафейлится по потреблению ресурсов или по стабильности ответов от стороннего сервиса. В целом идея такая:
1. Дергаете стороннее апи, получаете json ответ. По какому критерию не делать лишние запросы - я не понимаю из Вашего задания, но предположительно по paym_id, которые еще не обработаны.
2. Парсите ответ через json_decode в массив.
3. Находим в массиве имейл, проверяем есть ли в dle_users. Если есть - добавляем paym_id, paym_ware_id, paym_title, paym_income в базу.