Как можно устранить ошибку, возникшую при вводе платежных реквизитов на сайте?

На сайте в профиле пользователя есть форма для добавления кошелька Payeer для будущих выплат. При попытке добавить кошелек возникает ошибка: "Неверно указан кошелек. Будьте внимательны!". <br/> Можете ли вы подсказать, какие изменения нужно внести в код, чтобы исправить данную проблему? <br/> ### Установка кошелька Payeer <br/> if ( $_GET['func'] == 'addpayeer' ) { <br/> <br/> if ( !isset( $_SESSION['iduser'] ) ) exit(); <br/> <br/> if ( $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' ) exit(); <br/> <br/> include_once ROOT_DIR . '/engine/classes/cpayeer.php'; <br/> $accountNumber = $config_site['shetpayeer']; <br/> $payer_user = $config_user['payeer']; <br/> $apiId = $config_site['apiIdpayeer']; <br/> $apiKey = $config_site['maskeypayeer']; <br/> $payeer = new CPayeer($accountNumber, $apiId, $apiKey); <br/> <br/> if($payeer->checkUser(array( 'user' => '' . check_text( $_POST['pursepayeer'] ) . '', ))) { <br/> <br/> if ( strlen(check_text( $_POST['pursepayeer'] )) < 6 OR strlen(check_text( $_POST['pursepayeer'] )) > 15 ) { <br/> echo 'Неверно указан кошелек. Будьте внимательны!'; <br/> exit(); <br/> } else <br/> if ( $config_user['payeer'] != '' ) { <br/> echo 'Вы уже указали кошелек Payeer!'; <br/> exit(); <br/> } else { <br/> $proverka_payeer_add = mysqli_query($db, "SELECT id FROM user WHERE payeer = '" . check_text( $_POST['pursepayeer'] ) . "'" ); <br/> <br/> if ( mysqli_num_rows( $proverka_payeer_add ) > 0 ) { <br/> echo 'В системе уже используется данный кошелек'; <br/> exit(); <br/> } else { <br/> mysqli_query($db, "UPDATE user SET payeer = '" . check_text( $_POST['pursepayeer'] ) . "' WHERE id = '" . $_SESSION['iduser'] . "'" ); <br/> echo 1; <br/> exit(); <br/> } <br/> } <br/> <br/> } else { <br/> ec
  • 14 декабря 2024 г. 19:13
Ответы на вопрос 2
Чтобы устранить ошибку при вводе платежных реквизитов (кошелька Payeer) на вашем сайте, нужно убедиться, что проверка на правильность кошелька выполняется корректно. Ошибка, указанная в коде, связана с проверкой длины и формата введенного кошелька. Давайте рассмотрим шаги, которые можно предпринять для решения этой проблемы:

### 1. Проверка длины кошелька
Согласно вашему коду, длина кошелька должна быть от 6 до 15 символов. Убедитесь, что это соответствует требованиям Payeer. Если в Payeer кошельки имеют другой формат или длину, измените это ограничение.

### 2. Проверка формата кошелька
Кошелек Payeer имеет определенный формат, к которому следует применить регулярное выражение. Например, кошельки Payeer могут выглядеть как "P123456" или "R123456", идущие с префиксом "P" или "R". Есть смысл добавить дополнительную проверку на соответствие формату.

### Пример исправленного кода
Вот пример того, как можно изменить вашу проверку:

```php
if($payeer->checkUser(array( 'user' => '' . check_text( $_POST['pursepayeer'] ) . '', ))) {
    
    $pursepayeer = check_text($_POST['pursepayeer']);
    
    // Проверка длины
    if (strlen($pursepayeer) < 6 || strlen($pursepayeer) > 15) {
        echo 'Неверно указан кошелек. Будьте внимательны!';
        exit();
    }

    // Проверка формата
    if (!preg_match('/^(P|R)\d{6,15}$/', $pursepayeer)) {
        echo 'Неверно указан кошелек. Формат не соответствует.';
        exit();
    }

    if ($config_user['payeer'] != '') {
        echo 'Вы уже указали кошелек Payeer!';
        exit();
    } else {
        $proverka_payeer_add = mysqli_query($db, "SELECT id FROM user WHERE payeer = '" . $pursepayeer . "'" );
        
        if (mysqli_num_rows($proverka_payeer_add) > 0) {
            echo 'В системе уже используется данный кошелек';
            exit();
        } else {
            mysqli_query($db, "UPDATE user SET payeer = '" . $pursepayeer . "' WHERE id = '" . $_SESSION['iduser'] . "'");
            echo 1;
            exit();
        }
    }

} else {
    echo 'Ошибка проверки пользователя.';
    exit();
}
```

### Объяснение изменений:
1. **Проверка формата**: Используем регулярное выражение для проверки, начинается ли кошелек с "P" или "R" и содержит ли только цифры после префикса.
2. **Упрощение кода**: Я ввел переменную `$pursepayeer`, чтобы избежать многократного вызова функции `check_text()` и упростить вероятность ошибок.
3. **Уточненные сообщения об ошибках**: Добавлены более конкретные сообщения, чтобы пользователи могли получить более четкое представление о проблеме.

Проверьте указанные изменения и протестируйте систему, чтобы убедиться, что проблема решена.
У вас вот в этой строчке: 
if ( strlen(check_text( $_POST['pursepayeer'] )) < 6 OR strlen(check_text( $_POST['pursepayeer'] )) > 15 ) {

Стоит ограничение на размер вводимой строки. Она должна быть от 6 до 15 символов.
Возможно вы обращаетесь не к тому ключу.
Попробуйте перед строкой с оповещением, временно добавить вывод этого параметра в консоль, чтобы проверить что в нём приходит:
echo $_POST['pursepayeer'];
Похожие вопросы