3
我列出我們的訂閱按鈕,所有的計劃如下(Django的模板語法):我如何知道用戶使用Stripe的Checkout.js選擇了哪個計劃?
{% for plan in plans %}
<tr>
<td>{{ plan.name }}</td>
<td>£{{ plan.price_human }}</td>
<td>
<form method="POST" action=".">
{% csrf_token %}
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="{{ public_key }}"
data-image="/static/images/logo-n.png"
data-name="Product Name"
data-description="{{ plan.name }}"
data-currency="{{ plan.currency }}"
data-amount="{{ plan.price }}"
data-locale="{{ request.LANGUAGE_CODE }}"
data-email="{{ user.email }}"
data-label="{% trans 'Subscribe' %}"
data-panel-label="{% trans 'Subscribe' %}"
data-allow-remember-me="false"
>
</script>
</form>
</td>
</tr>
{% endfor %}
然後我在迴應這種形式創建客戶/訂閱張貼:
class SubscribePageView(generic.TemplateView):
def post(self, request, *args, **kwargs):
stripe.api_key = settings.STRIPE_SECRET_KEY
user = self.request.user
token = request.POST.get('stripeToken')
customer = stripe.Customer.create(
source=token,
plan=[[WHERE DOES THIS COME FROM??]],
email=user.email,
)
user.customer_id = customer.id
user.save()
但在那個時候,我沒有計劃ID回傳給Stripe。 :/。
我在做這樣的各種錯誤嗎?
但是,然後有人可以欺騙請求,並告訴我他們買了一個不同於他們購買的計劃的計劃? –
但是Stripe checkout沒有做任何事情來「購買」一個計劃或向用戶收費,它所做的只是創建與其信用卡相關的用戶令牌。您仍然從您的服務器端代碼購買實際的計劃購買,這就是您向用戶收費的點。因此,如果他們修改了帖子,他們仍然會根據您實際收到的內容收費。 –
來自[文檔](https://stripe.com/docs/checkout):「值得注意的是,Checkout實際上並沒有創建費用 - 它只創建令牌。您可以使用這些令牌來創建實際的費用服務器。」 –