首页 > 解决方案 > Python/Django with Stripe:创建条带订阅时发布请求出错

问题描述

这是我第一次使用条纹,这对任何人来说都很熟悉吗?所以我可以看到在付款时创建了一个令牌,但是我没有重定向到我的模板,而是在下面抛出了这个错误!

错误

>**InvalidRequestError:**
>Request req_d5BvUPtlpLrsG5: Received unknown parameter: source
>Request Method:    POST
>Django Version:    2.1
>Exception Type:    InvalidRequestError
>Exception Value:   
>**Request req_d5BvUPtlpLrsG5: Received unknown parameter: source**

代码

def PaymentView(request):

    user_membership = get_user_membership(request)

    selected_membership = get_selected_membership(request)

    publishKey = settings.STRIPE_PUBLISHABLE_KEY

    if request.method == "POST":
        try:
            token = request.POST['stripeToken']
            subscription = stripe.Subscription.create(
              customer=user_membership.stripe_customer_id,# id on User Membership Model
              items=[
                {
                  "plan": selected_membership.stripe_plan_id,
                },
              ],
              source=token # 4242424242424242
            )

            return redirect(reverse('memberships:update-transactions',
                kwargs={
                    'subscription_id': subscription.id
                }))

        except stripe.error.CardError as e:
            messages.info(request, "Your card has been declined")

    context = {
        'publishKey': publishKey,
        'selected_membership': selected_membership
    }

    return render(request, "path/templategoeshere.html", context)

标签: pythondjangostripe-payments

解决方案


看起来您需要在 stripe.Subscription.create() 方法中删除 source=token 键值对。

所以,你应该有更多类似的东西:

def PaymentView(request):

  user_membership = get_user_membership(request)

  selected_membership = get_selected_membership(request)

  publishKey = settings.STRIPE_PUBLISHABLE_KEY

  import stripe
  stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"

  if request.method == "POST":
    try:
      token = request.POST['stripeToken']
      print(token) # WHAT IS PRINTED OUT HERE?
      subscription = stripe.Subscription.create(
        customer=user_membership.stripe_customer_id,
        items=[
          {
            "plan": selected_membership.stripe_plan_id,
          },
        ]
      )

      return redirect(reverse('memberships:update-transactions', kwargs={ 'subscription_id': subscription.id }))

    except stripe.error.CardError as e:
      messages.info(request, "Your card has been declined")

stripe.Subscription.create() 对象方法的可接受参数是:customer(必需)、application_fee_percent、billing、billing_cycle_anchor、coupon、days_until_due、items、metadata、prorate、tax_precent、trial_end、trial_from_plan 和 trial_period_days(都是可选的)。

这可能会有所帮助:https ://stripe.com/docs/api/python#create_subscription


推荐阅读