редактировать данные карты на полосе только истекает месяц

Я создал клиента с данными своей карты и сохраняю его в учетной записи с полосой, когда я получаю результат из того, что он дает мне последние 4 цифры карты и не дает мне CVV. Теперь я хочу обновить данные своей карты с истечением только месяца, не возвращая мои карта и детали CVV,

Но когда я выполняю это, это дает мне неверный номер карты с ошибкой проверки полосы и требуется номер CVV.

Я использовал https://js.stripe.com/v2/ для создания токена, и этот токен я использую для создания и обновления информации о карте.

<?php
if (isset($_POST['stripeToken']) && $_POST['stripeToken'] != "") {
    
    /*Create Customer Account through Stripe*/
    
    // Set secret key
    
    \Stripe\Stripe::setApiKey("sk_test_XXXXXXXXXXXX"); //replace your secreet key of stripe here
    
    // Get the credit card details submitted by the form
    
    $token = $_POST['stripeToken'];
    
    try {
        $cu = \Stripe\Customer::update(
            CUSTOMER_TOKEN, // stored in your application
            ['source' => $_POST['stripeToken']]
        );
    } catch (\Stripe\Error\Card $e) {
        
        $body = $e->getJsonBody();
        $err = $body['error'];
        $error = $err['message'];
        
    }
    
}
?>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script>
$('#editCard').validate({
    rules: {
        craditcard: {
            required: true,
        },
        cvv: {
            required: true,
        },
        month: {
            required: true,
        },
        year: {
            required: true,
        },
        card_full_name: {
            required: true,
        },
    },
    messages: {
        craditcard: {
            required: "Please enter cradit card number"
        },
        cvv: {
            required: "Please enter cvv number"
        },
        month: {
            required: "Please select month"
        },
        year: {
            required: "Please select year"
        },
        card_full_name: {
            required: "Please enter card full name"
        },
    },
    submitHandler : function(){
        
        Stripe.setPublishableKey('pk_test_XXXXXXXXXXXX');
        
        var error = false;
        var msg = ''
        var ccNum = $('#craditcard').val(),
        cvcNum = $('#cvv').val(),
        expMonth = $('#expireMonth').val(),
        expYear = $('#expireYear').val(),
        name = $('#card_full_name').val();
        
        
        // Validate the number:
        if (!Stripe.card.validateCardNumber(ccNum)) {
            error = true;
            msg = 'The credit card number appears to be invalid.';
            alert(msg);
        }
        
        // Validate the CVC:
        if (!Stripe.card.validateCVC(cvcNum)) {
            error = true;
            msg = 'The CVC number appears to be invalid.';
            alert(msg);
        }
        
        // Validate the expiration:
        if (!Stripe.card.validateExpiry(expMonth, expYear)) {
            error = true;
            msg = 'The expiration date appears to be invalid.';
            alert(msg);
        }
        
        
        if (!error) {
            $('.page-load').show();
            // Get the Stripe token:
            Stripe.card.createToken({
                number: ccNum,
                cvc: cvcNum,
                exp_month: expMonth,
                exp_year: expYear,
                name : name,
            }, stripeResponseHandler);
        }
        
    }
});

function stripeResponseHandler(status, response){
    if (response.error) {
        alert(response.error.message);
    } else {
        var f = $("#editCard");
        var token = response.id;
        f.append('<input type="hidden" name="stripeToken" value="' + token + '" />')
        $.ajax({
            method: 'POST',
            url: 'edit_card.php',
            data: $("#editCard").serialize(),
            success: function (output) {
                $('.page-load').hide();
            } 
        });
        return false;
    }
}

Теперь, когда я обновляю, истекает только месяц Stripe.card.validateCardNumber(ccNum) а также Stripe.card.validateCVC(cvcNum) Проверка полосы дает мне ошибку, поэтому я не могу сгенерировать токен, а без токена я не могу редактировать информацию о карте.

1 ответ

  1. Я вижу, как ваш код создает новый токен и прикрепляет его к существующему клиенту, но не обновляет существующий токен карты.

Теперь я хочу обновить данные моей карты только с истечением месяца

Для этого вам нужно будет использовать Stripe на стороне сервера PHP и вызвать API обновления карты: https://stripe.com/docs/api/cards/update

В параметрах на странице API ref показано, как вы должны пройти exp_month а также exp_year.

  1. Вы не должны использовать Stripe.js v2, так как он устарел много лет назад. Я настоятельно рекомендую интегрировать Stripe Elements.

  2. "когда я получаю результат от stipe, он дает мне последние 4 цифры карты и не дает мне CVV"

Ожидается, что выборка Token on Stripe никогда не возвращает CVC или номер карты из соображений соответствия PCI.

Другие вопросы по тегам