> For the complete documentation index, see [llms.txt](https://docs.merchant.alb.ua/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.merchant.alb.ua/platizhni-vidzheti-dlya-cms/whmcs/validaciya-customerdata.md).

# Валідація customerData

### Загальний опис логіки валідації <a href="#zagalnii-opis-logiki-validaciyi" id="zagalnii-opis-logiki-validaciyi"></a>

Масив `customerData` формується під час натискання кнопки «Оплатити» (коли передається POST-параметр `alliancepay_action = create_order`). Дані клієнта витягуються з глобального масиву параметрів шлюзу WHMCS `$params['clientdetails']`.

Потім сформований масив передається до DTO об'єкта SDK: `OrderRequestDTO::fromArray($orderData)`.

> **⚠️ Особливість для розробників (Валідація в SDK):** Оскільки очищення та перевірка правил валідації (`max_len`, `pattern`, `stop_words`) відбуваються всередині зовнішнього PHP SDK, цей шлюз WHMCS передає дані «як є» (as-is), попередньо трансформувавши лише телефон та код країни. Якщо SDK DTO викидає виняток (Exception) через невалідні дані, WHMCS перехоплює його, логує помилку через `logModuleCall` і виводить загальне повідомлення для користувача.

| **Назва поля**              | **Тип даних**    | **Обов'язкове** | **Звідки береться в WHMCS ($params\['clientdetails'])**                                  | **Особливості та трансформації даних перед передачею в SDK**                                                                                                                                                                                                                                                                     |
| --------------------------- | ---------------- | --------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **senderCustomerId**        | `string`         | **Так**         | `(string)$params['clientdetails']['userid']`                                             | Примусово приводиться до типу `string`. У WHMCS користувач завжди авторизований для оплати інвойсу.                                                                                                                                                                                                                              |
| **senderFirstName**         | `string`         | Ні              | `$params['clientdetails']['firstname']`                                                  | Передається напряму. SDK валідує за стандартним regex та на стоп-слова.                                                                                                                                                                                                                                                          |
| **senderLastName**          | `string`         | Ні              | `$params['clientdetails']['lastname']`                                                   | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderEmail**             | `string`         | Ні              | `$params['clientdetails']['email']`                                                      | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderCountry**           | `string`         | Ні              | `$params['clientdetails']['countrycode']`                                                | <p><strong>Трансформація через бібліотеку</strong> <code>League\ISO3166</code><strong>:</strong></p><p> </p><p>Двозначний код країни (наприклад, <code>UA</code>) конвертується у числовий код ISO (наприклад, <code>804</code>) через <code>$leagueIso3166->alpha2()</code>. Якщо код відсутній, поле не додається в масив.</p> |
| **senderRegion**            | `string`         | Ні              | `$params['clientdetails']['state']`                                                      | Передається напряму (назва штату/області текстовим рядком).                                                                                                                                                                                                                                                                      |
| **senderCity**              | `string`         | Ні              | `$params['clientdetails']['city']`                                                       | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderStreet**            | `string`         | Ні              | `$params['clientdetails']['address1']`                                                   | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderAdditionalAddress** | `string`         | Ні              | `$params['clientdetails']['address2']`                                                   | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderZipCode**           | `string`         | Ні              | `$params['clientdetails']['postcode']`                                                   | Передається напряму.                                                                                                                                                                                                                                                                                                             |
| **senderPhone**             | `numeric_string` | Ні              | <p>Конкатенація полів:</p><p> </p><p><code>phonecc</code> + <code>phonenumber</code></p> | **Логіка формування:** Код країни телефона (`phonecc`) та сам номер (`phonenumber`) зливаються в один рядок без розділювачів. Далі SDK валідує строку як `numeric_string`.                                                                                                                                                       |
