Pythonを使ったStripeのWebhookでハマった話

こんにちは、タカフミです!

久しぶりにコーディング関連のお話です。

僕は今、定額制のデザインサービスSugunyの決済システムをStripeを使って構築しているのですが、Webhookの部分で上手くいかなくて手こずっておりました。

誰かのお役にたてたら良いと思い記事にすることにしました。

 

StripeのWebhookが拾えない

 

Pythonを利用して決済システムを導入しているので、今回上手くいかなくて困っていたのが以下のWebhookイベントを取得する部分でした。Stripeのドキュメントです。

 



# Set your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
stripe.api_key = "sk_test_xxxxxx"

import json
from django.http import HttpResponse

# Using Django
def my_webhook_view(request):
  # Retrieve the request's body and parse it as JSON
  event_json = json.loads(request.body)

  # Do something with event_json

  return HttpResponse(status=200)

最初はStripeのドキュメントに従って、上のコードのようにrequest.bodyの内容を取得しようとしたのですが、上手くいきませんでした。

 

Python3に対応する

 

ついつい開発に夢中になってしまい、自分がPython3を使っていることをすっかり忘れていたのが上手くいかない原因でした。

Stripeのドキュメントを参考にして、Python3に対応させたものが以下のコードです。ポイントは utf-8でリクエスト内容をデコードしている点です。

 



"""
WEBHOOK
"""
import json

@csrf_exempt
def webhook_view(request):
    bodyUnicode = request.body.decode('utf-8')
    body = json.loads(bodyUnicode)

    # Do something with event
    return HttpResponse(status=200)

 

これでちゃんとStripeから送信されたWebhook経由のイベントを取得することができました!