구독 결제를 구현하기 위해 캐스트 캐스트를 따르고 있습니다. 그것은 여기에 : 나는 스트라이프 몇 가지 추가 필드가 통과하지만두 번 호출되는 jQuery 콜백
http://railscasts.com/episodes/288-billing-with-stripe
내 코드는 거의 동일하다. 문제는 성공적으로 청구 된 경우에도 자바 스크립트의 오류 메시지에 제출 버튼이 누적 될 때 항상 오류 메시지가 표시된다는 것입니다. Strip이 오류를 유발하는 무언가를 반환하는지 또는 JS 문제가 있는지 확실하지 않습니다.
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
subscription.setupForm()
subscription =
setupForm: ->
$('#new_membership').submit ->
$('input[type=submit]').attr('disabled', true)
if $('#card_number').length
subscription.processCard()
false
else
true
processCard: ->
card =
number: $('#card_number').val()
cvc: $('#card_code').val()
expMonth: $('#card_month').val()
expYear: $('#card_year').val()
Stripe.createToken(card, subscription.handleStripeResponse)
handleStripeResponse: (status, response) ->
if status == 200
$('#membership_stripe_card_token').val(response.id)
$('#new_membership')[0].submit()
else
$('#stripe_error').text(response.error.message)
$('input[type=submit]').attr('disabled', false)
이것은 오류 처리를 위해 제공되는 스트라이프의 예입니다. 정확히 왜 또는 어떻게 문제를 해결하려면 그래서 무슨 일이 일어나고 있는지 당신에게 말할 수 있지만 :
function stripeResponseHandler(status, response) {
if (response.error) {
...
//show the errors on the form
$(".payment-errors").html(response.error.message);
} else {
var form$ = $("#payment-form");
// token contains id, last4, and card type
var token = response['id'];
// insert the token into the form so it gets submitted to the server
form$.append("<input type='hidden' name='stripeToken' value='" + token + "'/>");
// and submit
form$.get(0).submit();
}
}
UPDATE를 : 그들은 첫 번째 오류에 대해 공정 및 테스트를 뒤집습니다.
나는 콘솔 로그 문을 추가 handleStripeResponse
은 사용자 안타 제출 때 한 번, 두 번 호출되고 있음을 이제 볼 수 있고, 그 다음에 다시 (것하는 200
반환 형식은 다음에 게시하는 아마 때문에 실제 처리를위한 Rails 응용 프로그램? 그리고 오류 메시지를 일으키는 0
을 반환합니다.하지만 Rails가 처리 서버 측을 처리 중이므로 요금이 부과됩니다.
다음은 컴파일 된 JS입니다. :
(function() {
var subscription;
jQuery(function() {
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'));
return subscription.setupForm();
});
subscription = {
setupForm: function() {
return $('#new_membership').submit(function() {
$('input[type=submit]').attr('disabled', true);
if ($('#card_number').length) {
subscription.processCard();
return false;
} else {
return true;
}
});
},
processCard: function() {
var card;
card = {
number: $('#card_number').val(),
cvc: $('#card_code').val(),
expMonth: $('#card_month').val(),
expYear: $('#card_year').val()
};
return Stripe.createToken(card, subscription.handleStripeResponse);
},
handleStripeResponse: function(status, response) {
if (status === 200) {
$('#membership_stripe_card_token').val(response.id);
return $('#new_membership')[0].submit();
} else {
$('#stripe_error').text(response.error.message);
return $('input[type=submit]').attr('disabled', false);
}
}
};
}).call(this);
응답 처리기에서'status'를 로깅 해 보셨습니까? 그것이 당신이 테스트하고있는 것이므로 실제로 그것이 무엇인지 아는 것이 좋습니다. Stripe은 실제로'200 OK '를 주어야합니다. jQuery는'status'를 정수로 제공해야합니다. CoffeeScript가'=='를'==='로 다시 작성해도 작동 할 것입니다. – Flambino
제 문제는 커피 스크립트입니다. 그것은 내가 시도하고 레일즈 컴파일을 시도하는 어떤 변화라도 보인다. (성공 대신에 에러를 테스트하기 위해 시도했다.) ... 그래서 쓰기가 잘 안되지만'console.log (status)'를했다. 'Uncaught ReferenceError : 응답이 정의되지 않았습니다. (익명 함수) application.js : 10575 (익명 함수)' – Slick23
기다림 ... console.log (status)가 콘솔에서 아무것도 반환하지 않았습니다. 하지만 console.log (응답)를하면 콘솔에서'200 '이됩니다. – Slick23