2015-09-22 2 views
3

Я перечисляю все наши планы с кнопкой подписки следующим образом (Джанго шаблон синтаксис):Как узнать, какой план пользователь выбрал с помощью Checkout.js Stripe?

{% 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() 

Но в этот момент у меня нет идентификатора плана, чтобы вернуться к Stripe. : /.

Я делаю это все виды не так?

ответ

3

Весь скрипт проверки Stripe выполняет вставку токена в скрытое поле в вашей форме, а затем отправку всей формы на ваш сервер. Если вам нужна любая другая информация, такие как план, вы должны включать в себя, что в вашей форме тоже:

<form method="POST" action="."> 
    {% csrf_token %} 
    <input type="hidden" name="plan" value="{{ plan.id }}"> 
    <script....> 
</form> 

Теперь вы можете получить доступ к плану через request.POST['plan'].

+1

Но тогда кто-то может обмануть запрос и сказать, что они купили другой план, чем тот, который они купили? –

+1

Но проверка Stripe ничего не делает, чтобы «купить» план или зарядить пользователя, все, что он делает, это создать токен пользователя, связанный с их кредитной картой. Вы по-прежнему выполняете фактическую покупку плана со своего серверного кода, и это тот момент, когда вы заряжаете пользователя. Поэтому, если они изменили сообщение, они все равно будут взиматься в соответствии с тем, что вы получили. –

+1

Из [docs] (https://stripe.com/docs/checkout): «Стоит отметить, что Checkout фактически не создает сборов - он только создает токены. Вы можете использовать эти токены для создания фактического заряда на вашем сервер «. –

Смежные вопросы