高レベルから、ストライプ Webhook を実装しようとしています。データベースの値を true に更新して、成功したイベントを処理したいと考えています。handle_verification
私が取ったアプローチは、現在ログインしているユーザーを取得し、id_verified フラグを更新するという非同期関数を作成することでした。
@app.get("/user")
async def get_current_user(authorize: AuthJWT = Depends()):
authorize.jwt_required()
id = authorize.get_jwt_subject()
return await User_Pydantic.from_queryset_single(UserModel.get(id=id))
@app.put('/user/verify')
async def handle_verification():
user = await get_current_user()
await UserModel.filter(id=user.id).update(id_verified = True)
ここの Webhook コードでこの関数を呼び出そうとします
@app.post('/create-verification-session')
async def create_verification_session(request: Request):
verification_session = stripe.identity.VerificationSession.create(
type='document',
)
return verification_session.client_secret
@app.post('/verification-session-webhook')
async def webhook(request: Request ):
webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
data = await request.body()
print(data)
signature = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload=data,
sig_header=signature,
secret=webhook_secret
)
event_data = event['data']['object']
except stripe.error.SignatureVerificationError as e:
print(str(e))
return {'error': str(e)}
event_type = event['type']
if event_type == 'identity.verification_session.created':
print("Started verification")
print(event_data.url)
if event_type == 'identity.verification_session.verified':
print("All the verification checks passed")
await handle_verification()
return {'status': "success"}
エラーが発生します
AttributeError: 'Depends' object has no attribute 'jwt_required
このエラーはget_current_user()
、非同期の順序で何かが台無しになっていることが原因であることがわかっています。handle_verification
asyncio.run() を使用する同期ラッパー関数を入れようとしましたが、うまくいきませんでした。
私はさまざまな修正の試みを試みましたが、中心的な問題は、私がまだ非同期と Webhook とすべてのジャズについて学んでいるので、完全に困惑していることだと思います. この問題への私のアプローチについての助けと、私が現在持っているものよりも簡単かもしれない別のアプローチへの洞察をいただければ幸いです。よろしくお願いします!