【问题标题】:A problem handling Django stripe payment exceptions处理 Django 条带支付异常的问题
【发布时间】:2020-04-15 21:02:52
【问题描述】:

我有一个Django条带支付的异常处理问题,当我输入条带时出现异常错误,所以无法保存到数据库中

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # django crispy
    'crispy_forms',
    # django countries
    'django_countries',
    # init core
    'core',
    # stripe
    'stripe',
]

views.py

from django.conf import settings
import stripe
stripe.api_key = settings.STRIPE_SECRET_KEYS

class PaymentView(View):
    def get(self, *args, **kwargs):
        return render(self.request, "payment.html")

    def post(self, *args, **kwargs):
        order   = Order.objects.get(user=self.request.user, ordered=False)
        token   = self.request.POST.get('stripeToken')
        amount  = int(order.get_total() * 100)

        try:
            # Use Stripe's library to make requests...
            charge  = stripe.Charge.create(
                amount=amount, # sen
                currency="usd",
                source=token
            )

            payment = Payment()
            payment.stripe_charge_id = charge['id']
            payment.user = self.request.user
            payment.amount = order.get_total()
            payment.save()


            order.ordered   = True
            order.payment   = payment
            order.save()

            message.success("Your order successfully")
            return redirect("/")

        except stripe.error.CardError as e:
            # Since it's a decline, stripe.error.CardError will be caught
            body    = json_body
            err     = body.get('error', {})
            messages.error(self.request, f"{err.get('message')}")
            return redirect("/")

        except stripe.error.RateLimitError as e:
            # Too many requests made to the API too quickly
            messages.error(self.request, "Rate limit error")
            return redirect("/")

        except stripe.error.InvalidRequestError as e:
            # Invalid parameters were supplied to Stripe's API
            messages.error(self.request, "Invalid parameter")
            return redirect("/")

        except stripe.error.AuthenticationError as e:
            # Authentication with Stripe's API failed
            # (maybe you changed API keys recently)
            messages.error(self.request, "Not authenticated")
            return redirect("/")

        except stripe.error.APIConnectionError as e:
            # Network communication with Stripe failed
            messages.error(self.request, "Network error")
            return redirect("/")

        except stripe.error.StripeError as e:
            # Display a very generic error to the user, and maybe send
            # yourself an email
            messages.error(self.request, "Something wrong, please try again")
            return redirect("/")

        except Exception as e:
            # Something else happened, completely unrelated to Stripe
            messages.error(self.request, "a serious error, we have been notified")
            return redirect("/")

对于进入stripe字段的结果是Something else发生了,与Stripe完全无关。感谢您的帮助回答

【问题讨论】:

  • 您看到了什么错误?是charge = stripe.Charge.create抛出的错误还是保存到数据库payment.save()时抛出的错误?

标签: python django stripe-payments


【解决方案1】:

检查付款页面中的 test_token 并将其与您的 STRIPE_PUBLIC_KEYS 匹配

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 2016-06-27
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多