AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79256457
Accepted
PhilM
PhilM
Asked: 2024-12-06 06:59:44 +0800 CST2024-12-06 06:59:44 +0800 CST 2024-12-06 06:59:44 +0800 CST

Django / Stripe - Webhook não encontrado

  • 772

Estou tentando estabelecer um webhook com stripe. (primeira vez)

Entretanto, parece que o caminho para o webhook não foi encontrado.

Espero que alguém possa trazer um par de olhos novos e me dizer o que estou fazendo errado.

No meu urls.py (nível de projeto)

urlpatterns = [

    path('my_app/', include('my_app.urls')),
    ...
]

No nível do aplicativo urls.py:

urlpatterns = [
    ..
    path('stripe_webhook/', views.stripe_webhook, name='stripe_webhook')
]

No meu views.py (nível my_app):

@csrf_exempt
def stripe_webhook(request):
    print("enter webhook")
    stripe.api_key = settings.STRIPE_SECRET_KEY_TEST
   
    payload = request.body
    signature_header = request.META.get('HTTP_STRIPE_SIGNATURE')
    webhook_secret = settings.STRIPE_WEBHOOK_SECRET_TEST
    ...

Na faixa, nos ouvintes locais registrei:

localhost:8000/stripe_webhook/

Se eu executar stripe trigger customer.created. Eu recebo o seguinte retornado para mim:

A newer version of the Stripe CLI is available, please update to: v1.22.0
Setting up fixture for: customer
Running fixture for: customer
Trigger succeeded! Check dashboard for event details.

No entanto, executando simultaneamente stripe listen --forward-to localhost:8000/stripe_webhook/, também recebo os seguintes logs:

> Ready! You are using Stripe API Version [2024-09-30.acacia]. Your webhook signing secret is XXXXX (^C to quit)
2024-12-05 22:27:54   --> customer.created [xxx]
2024-12-05 22:27:54  <--  [404] POST http://localhost:8000/stripe_webhook/ [xx]

e meus logs de servidor também retornarão (seja em produção ou local): Not Found: /stripe_webhook/.

Isso me faz pensar que o caminho para meu webhook não está configurado corretamente, mas não consigo ver nada que eu possa ter perdido. Há algo na plataforma Stripe que eu esqueci?

Observação : todas as minhas chaves ( STRIPE_PUBLIC_KEY_TEST, STRIPE_SECRET_KEY_TESTe STRIPE_WEBHOOK_SECRET_TEST) no meu arquivo .env correspondem às chaves fornecidas na plataforma do Stripe.

Alguma ideia?

django
  • 1 1 respostas
  • 23 Views

1 respostas

  • Voted
  1. Best Answer
    RyanM
    2024-12-06T07:54:49+08:002024-12-06T07:54:49+08:00

    Parece-me que você está prefaciando seus URLs de aplicativo com my_app/então eu esperaria que isso estivesse no URL final. Tenho uma integração Django de longa data (mais de 3 anos) com Stripe e, quando verifico meu urls.pyarquivo raiz, vejo que tenho meus URLs de aplicativo principais especificados assim

    path('', include('payments.urls')),
    

    Isso evita a necessidade de incluir um prefixo de aplicativo, o que localhost:8000/webhooks/funciona para mim.

    Já que você especificou my_app/, você deve tentar localhost:8000/my_app/stripe_webhook. Você pode usar a CLI para disparar eventos de webhook para que você possa verificar se isso funciona.

    Outra abordagem que gosto de usar é adicionar uma verificação de método de API na minha função webhook e responder a uma solicitação GET com algo como <h1>Hello Webhook!</h1>. Algo assim:

    @csrf_exempt
    def stripe_webhook(request):
       if request.method == "GET":
          # Respond with webpage indicating success
       else:
          # Do webhook-y stuff here
    

    Dessa forma, você pode testar facilmente se a rota está funcionando inserindo a URL no seu navegador.

    • 1

relate perguntas

  • Django Admin: mostrar vários aplicativos juntos em uma seção?

  • Maneira mais eficiente de acionar a exceção DoesNotExist para pk

  • Mostrar valor models.DateField no modelo Django

  • Templatetag não funciona na condição IF do modelo Django 4.2

  • Administrador do Django: exibindo propriedade computada ao visualizar um único item

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve