【问题标题】:Django Stripe InvalidRequestError: Request req_******: Not a valid URLDjango Stripe InvalidRequestError:请求 req_******:不是有效的 URL
【发布时间】:2021-09-07 15:06:07
【问题描述】:

我将 Stripe 与 django 一起使用,但是在单击 checkout 时它会返回 stripe.error.InvalidRequestError: Request req_N8rlEhXn42Cyxz: Not a valid URL由于 this 问题,首先我尝试了我的 localhost:8000/payment/done 然后使用 ngrok 进行了尝试,以便可以在全球范围内访问它,但仍然无法正常工作)。

这是我的settings.py

.....
STRIPE_PUBLIC_KEY = (
"pk_test_51J5kFsFfjIr2jaBwRlGyDJ9McmvvBGclXxkasIGggbh3Fz076sWsGv9z7pSWxy7WuncldIMXDFOq1U3j2bv2Zstu00lMmMnLjD"
)
STRIPE_SECRET_KEY = (
"sk_test_51J5kFsFfjIr2jaBwg1Khel6thuio8gTshaTeIwe0GjqaM57x6XvjZNxQE0udNk8BAVqjjEkCHtFs8KXBEglu2zbR005LkwAzaq"
)
STRIPE_WEBHOOK_SECRET = ""

还有我的views.py

class CreateCheckOutSessoionView(View):
    def post(self, request, *args, **kwargs):
        ng = "https://localhost:8000"
        product_id = kwargs.get("pk")
        product = Product.objects.get(id=product_id)
        checkout_session = stripe.checkout.Session.create(
            payment_method_types=["card"],
            line_items=[
                {
                    "price_data": {
                        "currency": "usd",
                        "unit_amount": product.get_cent_price,
                        "product_data": {
                            "name": product.name,
                            "images": [product.image.url],
                        },
                    },
                    "quantity": 1,
                },
            ],
            mode="payment",
            success_url=ng + "/payment/done",
            cancel_url=ng + "/payment/cancel",
        )
        return JsonResponse({"id": checkout_session.id})

这就是我将post 发送到此视图的方式

<button type="button" id="checkout-button">Checkout</button>
<script type="text/javascript">
    const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;

    // Create an instance of the Stripe object with your publishable API key
    var stripe = Stripe("{{ STRIPE_PUBLIC_KEY }}");
    var checkoutButton = document.getElementById("checkout-button");

    checkoutButton.addEventListener("click", function () {
      fetch("{% url 'payment:create-checkout-session' 1 %}", {
        method: "POST",
        headers: {
            'X-CSRFToken': csrftoken,
        },
      })
        .then(function (response) {
          return response.json();
        })
        .then(function (session) {
          return stripe.redirectToCheckout({ sessionId: session.id });
        })
        .then(function (result) {
          // If redirectToCheckout fails due to a browser or network
          // error, you should display the localized error message to your
          // customer using error.message.
          if (result.error) {
            alert(result.error.message);
          }
        })
        .catch(function (error) {
          console.error("Error:", error);
        });
    });
  </script>

我不知道..

【问题讨论】:

    标签: python django stripe-payments


    【解决方案1】:

    product.image.url 是一个相对 URL。它必须是绝对 URL。

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 2015-03-04
      • 2017-05-27
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多