редактировать данные карты на полосе только истекает месяц
Я создал клиента с данными своей карты и сохраняю его в учетной записи с полосой, когда я получаю результат из того, что он дает мне последние 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 ответ
- Я вижу, как ваш код создает новый токен и прикрепляет его к существующему клиенту, но не обновляет существующий токен карты.
Теперь я хочу обновить данные моей карты только с истечением месяца
Для этого вам нужно будет использовать Stripe на стороне сервера PHP и вызвать API обновления карты: https://stripe.com/docs/api/cards/update
В параметрах на странице API ref показано, как вы должны пройти exp_month
а также exp_year
.
Вы не должны использовать Stripe.js v2, так как он устарел много лет назад. Я настоятельно рекомендую интегрировать Stripe Elements.
"когда я получаю результат от stipe, он дает мне последние 4 цифры карты и не дает мне CVV"
Ожидается, что выборка Token on Stripe никогда не возвращает CVC или номер карты из соображений соответствия PCI.