как проверить, действительна ли кредитная карта для PayPal

Я должен взять данные кредитной карты пользователя для оплаты через PayPal. В первый раз, когда пользователь вводит данные карты, оплата производится через PayPal Pro. Если карта недействительна, оплата не производится. Оплата будет произведена только при действующей карте.

В первый раз, когда пользователь вводит данные действительной карты, и платеж выполняется, если такой пользователь изменяет данные кредитной карты в это время, мне нужно еще раз проверить, действительна ли карта для PayPal или нет.

Так есть ли какие-нибудь API, которые проверяют только данные кредитной карты и не обрабатывают платежи?

Я использую php и mysql.

Спасибо.

Авинаш


person Avinash    schedule 29.01.2010    source источник


Ответы (3)


С Paypal ваши возможности очень ограничены. Если вы используете Paypal Pro, вы можете подтвердить, что карта существует и является законной, выполнив авторизацию только за 0,00 долларов США. Если вы используете другие способы оплаты, предлагаемые Paypal, вы не сможете этого сделать.

Другой вариант - проверить, что карта содержит как минимум действительную информацию. Вы можете проверить подлинность номера карты, используя алгоритм Луна. Все номера кредитных карт выдаются по шаблону, который можно проверить с помощью этого алгоритма. Он не может подтвердить, что карта действителен, но исключит возможность ввода поддельных номеров кредитных карт. Вы также должны убедиться, что срок действия не истек, и что код CVV состоит всего из трех цифр для Visa, MasterCard и Discover Card и четырех цифр для American Express.

Если вам нужен код для проверки номера карты по алгоритму Луна, дайте мне знать, и я могу добавить свой ответ, чтобы включить его.

ИЗМЕНИТЬ (добавлен код алгоритма Луна в PHP):

function passes_luhn_check($cc_number) {
    $checksum  = 0;
    $j = 1;
    for ($i = strlen($cc_number) - 1; $i >= 0; $i--) {
        $calc = substr($cc_number, $i, 1) * $j;
        if ($calc > 9) {
            $checksum = $checksum + 1;
            $calc = $calc - 10;
        }
        $checksum += $calc;
        $j = ($j == 1) ? 2 : 1;
    }
    if ($checksum % 10 != 0) {
        return false;
    }
    return true;
}

Использование:

$valid_cc = passes_luhn_check('4427802641004797'); // returns true
$valid_cc = passes_luhn_check('4427802641004798'); // returns false
person John Conde    schedule 29.01.2010
comment
Алгоритм Луна помогает, но эта проверка хорошо известна (включая темную сторону ...) - person robertnl; 30.01.2010
comment
@Avinash - Я добавил PHP-код, который проверяет номер кредитной карты по алгоритму Луна. @robertnl - Алгоритм Луна - хороший способ убедиться, что номер плохой карты не был указан, без необходимости платить за ваш шлюз и поставщикам торговых счетов для проверки кредитной карты. Это не полное решение, но лучшее, что вы можете сделать бесплатно. - person John Conde; 30.01.2010
comment
На веб-сайте клиента, который я только что запустил, эта функция, по-видимому, не проверяет все подлинные номера кредитных карт (возможно, не все типы кредитных карт). - person drake035; 17.03.2013

Не зная много о Paypal, я мог бы предположить, что у них есть какой-то API авторизации, где вы можете выполнить авторизацию в размере 0,00 долларов, чтобы проверить, действительна ли карта.

Помните требования PCI при сохранении данных кредитной карты.

person phidah    schedule 29.01.2010

Какие детали кредитной карты могут быть изменены клиентом, что повлияет на данные, которые вы сохранили. Если клиент меняет что-то существенное, например, свое выбитое имя, то эмитент выдает клиенту новую карту. С вашей точки зрения, это должна быть новая карта (даже если номер карты не изменился).

Если вы сохраните некоторые другие детали, вы сэкономите слишком много.

С моей точки зрения (я работаю на эмитента) не идите путем авторизации в 0,00 долларов. Если вы хотите взимать плату с клиента, авторизуйтесь. Не Paypall, но эмитент будет обрабатывать авторизацию. И, в конце концов, только эмитент знает, действительна карта или нет.

person robertnl    schedule 29.01.2010