payment_intent.payment_failed 事件 Python 的 Stripe 结帐会话中的自定义元数据
custom metadata in Stripe checkout session for payment_intent.payment_failed event Python
我想在 payment_intent.payment_failed 事件中获取用户 ID,而 client_refrence_id 不在来自条带的 payment_failed 事件中的请求数据中。我试过 metadata={'user_id': user_id} 但这也没有显示在请求数据中。也试过这个 subscription_data.metadata = {"metadata": {"bar": "BAR", }}, 但它显示语法错误 "SyntaxError:表达式不能包含赋值,也许你的意思是“==”? 即使我这样做 (==) 它说 SyntaxError: positional argument follows keyword argument
这是我的代码:
checkout_session = stripe.checkout.Session.create(
client_reference_id=user_id,
# metadata={'user_id': user_id},
subscription_data.metadata = {"metadata": {"bar": "BAR", }},
success_url="success_url",
cancel_url="cancel_url",
payment_method_types=["card"],
mode="subscription",
line_items=[
{
"price": price_id,
"quantity": 1,
}
],
)
这是我的 webhook 代码
def webhook_received(self):
payload = request.data
endpoint_secret = 'my_secret_key'
sig_header = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
data = event['data']
except:
pass
event_type = event['type']
if event_type == 'checkout.session.completed':
self.handle_checkout_session(data)
elif event_type == 'payment_intent.payment_failed':
self.saving_failed_subscription_data(data)
return "success"
为了在 在 Python 中创建结帐会话时将元数据传递给订阅,您需要使用嵌套字典而不是点表示法。因此,在您的情况下,您可以像这样修改结帐会话的创建:
checkout_session = stripe.checkout.Session.create(
client_reference_id=user_id,
# metadata={'user_id': user_id},
# subscription_data.metadata = {"metadata": {"bar": "BAR", }}, <-- won't work
# This should work to get data to invoice/subscription
subscription_data = {
"metadata": {"user_id": user_id}
},
# This will get the metadata on to the related payment_intent
payment_intent_data={
"metadata": {"user_id": user_id}
},
success_url="success_url",
cancel_url="cancel_url",
payment_method_types=["card"],
mode="subscription",
line_items=[
{
"price": price_id,
"quantity": 1,
}
],
)
对于 Stripe API 允许您操作的任何嵌套属性的 Python 到 post 数据,这种使用字典的方法是必需的。
Create a Session
docs 有一长串值得回顾的可配置参数,现在您已经掌握了如何附加嵌套数据的语法。
我想在 payment_intent.payment_failed 事件中获取用户 ID,而 client_refrence_id 不在来自条带的 payment_failed 事件中的请求数据中。我试过 metadata={'user_id': user_id} 但这也没有显示在请求数据中。也试过这个 subscription_data.metadata = {"metadata": {"bar": "BAR", }}, 但它显示语法错误 "SyntaxError:表达式不能包含赋值,也许你的意思是“==”? 即使我这样做 (==) 它说 SyntaxError: positional argument follows keyword argument 这是我的代码:
checkout_session = stripe.checkout.Session.create(
client_reference_id=user_id,
# metadata={'user_id': user_id},
subscription_data.metadata = {"metadata": {"bar": "BAR", }},
success_url="success_url",
cancel_url="cancel_url",
payment_method_types=["card"],
mode="subscription",
line_items=[
{
"price": price_id,
"quantity": 1,
}
],
)
这是我的 webhook 代码
def webhook_received(self):
payload = request.data
endpoint_secret = 'my_secret_key'
sig_header = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
data = event['data']
except:
pass
event_type = event['type']
if event_type == 'checkout.session.completed':
self.handle_checkout_session(data)
elif event_type == 'payment_intent.payment_failed':
self.saving_failed_subscription_data(data)
return "success"
为了在 在 Python 中创建结帐会话时将元数据传递给订阅,您需要使用嵌套字典而不是点表示法。因此,在您的情况下,您可以像这样修改结帐会话的创建:
checkout_session = stripe.checkout.Session.create(
client_reference_id=user_id,
# metadata={'user_id': user_id},
# subscription_data.metadata = {"metadata": {"bar": "BAR", }}, <-- won't work
# This should work to get data to invoice/subscription
subscription_data = {
"metadata": {"user_id": user_id}
},
# This will get the metadata on to the related payment_intent
payment_intent_data={
"metadata": {"user_id": user_id}
},
success_url="success_url",
cancel_url="cancel_url",
payment_method_types=["card"],
mode="subscription",
line_items=[
{
"price": price_id,
"quantity": 1,
}
],
)
对于 Stripe API 允许您操作的任何嵌套属性的 Python 到 post 数据,这种使用字典的方法是必需的。
Create a Session
docs 有一长串值得回顾的可配置参数,现在您已经掌握了如何附加嵌套数据的语法。