我试图将付款页面添加到我的网站,我从条纹文档中复制了代码,但是当我按“付款”按钮时,什么也没发生。通过调试,返回的令牌为空。 问题是,当我尝试在JsFiddle中使用代码时,它可以正常工作,但是当我将其添加到我的应用程序中时,没有响应,控制台为空,因此我在故障排除中迷失了方向。 这是html文件:
sudo apk gcc
这是视图:
{% block content %}
<form method="POST" id="payment-form" >
{% csrf_token %}
<input type="hidden" name="token" />
<div class="group">
<label>
<span>Card</span>
<div id="card-element" class="field"></div>
<div id="card-errors" role="alert"></div>
</label>
</div>
<div class="group">
<label>
<span>Name</span>
<input id="name" name="name" class="field" placeholder="Jane Doe" />
</label>
</div>
<div class="group">
<label>
<span>Address</span>
<input id="address-line1" name="address_line1" class="field" placeholder="77 Winchester Lane" />
</label>
<label>
<span>Address (cont.)</span>
<input id="address-line2" name="address_line2" class="field" placeholder="" />
</label>
<label>
<span>City</span>
<input id="address-city" name="address_city" class="field" placeholder="Coachella" />
</label>
<label>
<span>State</span>
<input id="address-state" name="address_state" class="field" placeholder="CA" />
</label>
<label>
<span>ZIP</span>
<input id="address-zip" name="address_zip" class="field" placeholder="92236" />
</label>
<label>
<span>Country</span>
<input id="address-country" name="address_country" class="field" placeholder="United States" />
</label>
</div>
<button type="submit">Pay $25</button>
<div class="outcome">
<div class="error"></div>
<div class="success">
Success! Your Stripe token is <span class="token"></span>
</div>
</div>
</form>
{% endblock %}
{% block body_scripts %}
<script >
var stripe = Stripe('stripeKeyGoesHere');
var elements = stripe.elements();
var card = elements.create('card', {
hidePostalCode: true,
style: {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 300,
fontFamily: 'Helvetica Neue',
fontSize: '15px',
'::placeholder': {
color: '#CFD7E0',
},
},
}
});
card.mount('#card-element');
function setOutcome(result) {
var successElement = document.querySelector('.success');
var errorElement = document.querySelector('.error');
successElement.classList.remove('visible');
errorElement.classList.remove('visible');
console.log(result);
if (result.token) {
// In this example, we're simply displaying the token
successElement.querySelector('.token').textContent = result.token.id;
successElement.classList.add('visible');
// In a real integration, you'd submit the form with the token to your backend server
var form = document.querySelector('form');
form.querySelector('input[name="token"]').setAttribute('value', result.token.id);
form.submit();
} else if (result.error) {
errorElement.textContent = result.error.message;
errorElement.classList.add('visible');
}
}
card.on('change', function(event) {
setOutcome(event);
});
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
var options = {
name: document.getElementById('name').value,
address_line1: document.getElementById('address-line1').value,
address_line2: document.getElementById('address-line2').value,
address_city: document.getElementById('address-city').value,
address_state: document.getElementById('address-state').value,
address_zip: document.getElementById('address-zip').value,
address_country: document.getElementById('address-country').value,
};
stripe.createToken(card, options).then(setOutcome);
});
</script>
答案 0 :(得分:0)
当您说单击按钮时没有任何反应时,您是否看到调试(使用浏览器开发工具?)时是否确实发生了表单提交?
还可以在console.log(result)
之前尝试在setOutcome
函数中添加if (result.token) { }
吗?
在调试服务器端代码时,是否可以看到控制器/视图/处理程序,即提交表单时调用payments(request)
?您可以检查request.POST词典的内容吗?
想法是检查提交表单时是否实际发出了POST请求(使用浏览器开发工具的客户端),服务器端控制器是否确实接收/处理了该请求以及接收到的POST请求的外观(特别是request.POST词典)。
答案 1 :(得分:0)
该问题从未得到解决,因为我没有找到调试方法并找到问题所在,但是Stripe团队帮助我构建了另一种形式,幸运的是,与Django 1.11一起工作,希望它将对运行中的某人有所帮助陷入同一问题:
var stripe = Stripe('stripe key');
var elements = stripe.elements();
var card = elements.create('card', {
hidePostalCode: true,
style: {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 300,
fontFamily: 'Helvetica Neue',
fontSize: '15px',
border:'2px',
'::placeholder': {
color: '#CFD7E0',
},
},
}
});
card.mount('#card-element');
function setOutcome(result) {
var successElement = document.querySelector('.success');
var errorElement = document.querySelector('.error');
successElement.classList.remove('visible');
errorElement.classList.remove('visible');
if (result.token) {
// In this example, we're simply displaying the token
successElement.querySelector('.token').textContent = result.token.id;
successElement.classList.add('visible');
// In a real integration, you'd submit the form with the token to your backend server
//var form = document.querySelector('form');
//form.querySelector('input[name="token"]').setAttribute('value', result.token.id);
//form.submit();
} else if (result.error) {
errorElement.textContent = result.error.message;
errorElement.classList.add('visible');
}
}
card.on('change', function(event) {
setOutcome(event);
});
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
var options = {
name: document.getElementById('name').value,
address_line1: document.getElementById('address-line1').value,
address_line2: document.getElementById('address-line2').value,
address_city: document.getElementById('address-city').value,
address_state: document.getElementById('address-state').value,
address_zip: document.getElementById('address-zip').value,
address_country: document.getElementById('address-country').value,
};
stripe.createToken(card, options).then(setOutcome);
});