我正在 Pinax 框架内使用 Django (1.4.2) 开发一个 Stripe Web 应用程序:
- django-stripe-付款
- 艾尔达瑞安-阿贾克斯
我已经一切正常,除了 ajax 响应(JSON 格式)似乎没有被任何 ajax 回调处理,因此在浏览器中显示为原始 JSON 数据:
{"html": "\n\n<div class=\"change-card\">\n <h2>Current Card</h2>\n <p class=\"lead\">\n \n Current card on file is a <strong>Visa</strong>\n ending in the digits <strong>4242</strong>.\n \n </p>\n \n \n \n <form action=\"/payments/a/change/card/\" data-stripe-key=\"\" class=\"form ajax\" data-replace-closest=\".change-card\" method=\"POST\">\n <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='<>' /></div>\n <input name=\"stripe_token\" type=\"hidden\" />\n <a href=\"\" class=\"btn btn-primary change-card\">Change Card</a>\n </form>\n</div>\n"}
这个问题 https://stackoverflow.com/questions/21774731/django-stripe-paymants-and-eldarion-ajax-subscribe-json-response似乎很相似,但没有官方答案,提交者似乎已经弄清楚了(根据评论),但这些建议对我不起作用。
Details:
我在用着python manage.py runserver
在 Chrome 和 Firefox 中进行测试。
我刚刚开始使用 stripe 应用程序,并且刚刚使用了 django-stripe- payment 中的示例来开始工作,然后再根据我的特定需求进行定制。
我正在运行的测试用例涉及使用 django-stripe- payment 中的标准 ajax 表单来更改存储的信用卡:
<form action="{% url 'payments_ajax_change_card' %}" data-stripe-key="{{ STRIPE_PUBLIC_KEY }}" class="form ajax" data-replace-closest=".change-card" method="POST">
{% csrf_token %}
<input name="stripe_token" type="hidden" />
<a href="" class="btn btn-primary change-card">{% if request.user.customer.card_kind %}Change{% else %}Add{% endif %} Card</a>
</form>
我的基本模板中有一些 javascript,当选择“更改卡”按钮时,它们会被调用并显示条带中的表单以输入卡详细信息。我不认为这是有问题的 - 我直接从here http://django-stripe-payments.readthedocs.org/en/latest/installation.html#static-media.
我有以下功能:
<script src="{% static "js/jquery-1.9.1.min.js" %}"></script>
<script src="//checkout.stripe.com/v2/checkout.js"></script>
下面这个
<script src="{% static "js/eldarion-ajax.min.js" %}"></script>
返回令牌(以及随后的表单提交事件)后,将执行以下视图代码:
@require_POST
@login_required
def change_card(request):
try:
customer = request.user.customer
send_invoice = customer.card_fingerprint == ""
customer.update_card(
request.POST.get("stripe_token")
)
if send_invoice:
customer.send_invoice()
customer.retry_unpaid_invoices()
data = {}
except stripe.CardError, e:
data = {"error": e.message}
return _ajax_response(request, "payments/_change_card_form.html", **data)
再次...这是开箱即用的 django-stripe-支付代码。接下来发生的是如上所述的原始 JSON。