Stripe を Rails アプリに統合しています。支払いフォームを実行しようとすると、Stripe ログに次のエラーが表示されます。
{ "error": { "type": "invalid_request_error", "message": "有効なカードを提供する必要があります" }
このリクエスト本文で:
{ "プラン": "1", "説明": "jjets718@yahoo.com" }
リクエストの本文には、支払いフォームでクレジット カード情報を送信したときに Stripe から提供されたトークンが必要であることに気付きました。コントローラーに支払いを保存するときは、モデルで定義した次のメソッドを使用します。
def save_with_payment
if valid?
customer = Stripe::Customer.create(description: email, plan: 1, card: stripeToken)
self.stripe_customer_token = customer.id
save!
end
rescue Stripe::InvalidRequestError => e
logger.error "Stripe error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card."
false
end
顧客を作成するときに Stripe トークンが Stripe に送信されない理由と、根本的なエラーを修正する方法を誰かが理解するのを手伝ってくれれば、それは素晴らしいことです. 私の Stripe JavaScript は、「stripeToken」という名前の Stripe トークンを生成します。したがって、コントローラーがトークンを取得して顧客を作成する方法に問題があるに違いありません。
<head>
<script type="text/javascript" src="https://js.stripe.com/v1/"></script>
<!-- jQuery is used only for this example; it isn't required to use Stripe -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
// this identifies your website in the createToken call below
Stripe.setPublishableKey('pk_gV4NDoU8ymr5md49FJeNb5E1lIAda');
function stripeResponseHandler(status, response) {
if (response.error) {
// re-enable the submit button
$('.submit-button').removeAttr("disabled");
// 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();
}
}
$(document).ready(function() {
$("#payment-form").submit(function(event) {
// disable the submit button to prevent repeated clicks
$('.submit-button').attr("disabled", "disabled");
// createToken returns immediately - the supplied callback submits the form if there are no errors
Stripe.createToken({
number: $('.card-number').val(),
cvc: $('.card-cvc').val(),
exp_month: $('.card-expiry-month').val(),
exp_year: $('.card-expiry-year').val()
}, stripeResponseHandler);
return false; // submit from callback
});
});
if (window.location.protocol === 'file:') {
alert("stripe.js does not work when included in pages served over file:// URLs. Try serving this page over a webserver. Contact support@stripe.com if you need assistance.");
}
</script>
</head>