Stripe Python SDK:Subscription.resume添加metadata报错及Webhook问题
问题1:stripe.Subscription.resume 传入metadata报错的解决办法
Stripe的Subscription.resume API本身不支持直接传入metadata参数,这是接口设计的限制。如果想保留Subscription.resumed Webhook触发的同时添加metadata,可以分两步操作:
- 先调用
resume恢复订阅,触发Subscription.resumed事件 - 紧接着调用
Subscription.modify添加或更新metadata
修改后的代码示例:
@routes.post("/company_management/resume-subscription") async def resume_subscription(request): try: data = await request.json() subscription_id = data.get("subscription_id") user = await get_user(request) if not user: return web.json_response({"error": "Not found"}, status=404) user_id = user.get("user_id") # 第一步:恢复订阅,触发Subscription.resumed事件 await stripe.Subscription.resume( subscription_id, billing_cycle_anchor='unchanged' ) # 第二步:添加metadata await stripe.Subscription.modify( subscription_id, metadata={"user_id": user_id} ) # 执行用户状态更新逻辑 async with request.app["db"].acquire() as conn: async with conn.cursor(aiomysql.DictCursor) as cur: # 这里放你的数据库更新代码 pass return web.json_response({"message": "Subscription resumed successfully", "status": "success"}) except Exception as e: return web.json_response({"error": str(e)}, status=400)
这样既满足了触发Subscription.resumed的需求,又能把metadata附加到订阅上,后续相关Webhook事件中就能读取到该metadata。
问题2:触发Subscription.paused Webhook事件
用Subscription.modify暂停订阅时,不能仅将pause_collection设为空字符串,需要正确配置pause_collection的结构,指定暂停行为,才会触发Subscription.paused事件。
正确的代码示例:
await stripe.Subscription.modify( subscription_id, pause_collection={"behavior": "pause"} # 必须指定behavior为pause )
如果需要设置暂停截止时间,可添加expires_at参数:
await stripe.Subscription.modify( subscription_id, pause_collection={ "behavior": "pause", "expires_at": 1735689600 # 以时间戳形式指定暂停结束时间 } )
内容的提问来源于stack exchange,提问作者Morty quinn
相关产品推荐
相关产品推荐

