You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python Stripe模块使用SESSION_ID获取支付详情

Stripe使用cs_开头的session_id获取支付详情正确方案
  • cs_test_/cs_live_开头的ID是**Stripe Checkout会话(Checkout Session)**的唯一标识,对应查询接口是GET /v1/checkout/sessions/{id}。你之前提到的POST /v1/payment_pages/是Payment Links生成的支付页对象的接口,这类对象的ID是pp_开头,和你手里的cs_开头ID不匹配,强行调用必然报错。
  • 你之前调用stripe.checkout.Session.retrieve却被路由到/v1/payment_intents/接口报错,核心原因是本地安装的Stripe Python SDK版本过旧,旧版本SDK对对象ID前缀的路由识别存在bug。

具体操作步骤

  1. 先升级本地Stripe SDK到最新版本,执行命令:
    pip install --upgrade stripe
  2. 服务端代码中先配置好你的Stripe服务端秘钥(sk_开头,仅能在服务端存储使用,严禁泄露到前端),再调用查询接口,参考代码如下:
import stripe

# 替换为你自己的Stripe服务端秘钥,测试环境用sk_test_开头,生产环境换成sk_live_开头
stripe.api_key = "sk_test_xxxxxx"

def get_payment_detail(session_id: str):
    # 拉取Checkout会话详情,expand参数可以一次性拉取关联对象,减少重复接口调用
    checkout_session = stripe.checkout.Session.retrieve(
        session_id,
        expand=[
            "payment_intent", # 关联的支付意图,包含支付渠道、退款状态等信息
            "customer", # 支付的客户信息
            "line_items.data.price.product" # 支付的商品明细
        ]
    )

    # 校验支付状态,只有payment_status为paid才代表支付成功
    if checkout_session.payment_status != "paid":
        return {"code": 400, "msg": "支付未完成"}
    
    # 提取你需要的支付详情
    payment_info = {
        "total_amount": checkout_session.amount_total, # 注意:Stripe返回金额为货币最小单位,如人民币为分、美元为美分
        "currency": checkout_session.currency,
        "payment_intent_id": checkout_session.payment_intent.id, # 后续发起退款需要用到这个ID
        "customer_email": checkout_session.customer_details.email,
        "products": [item.price.product.name for item in checkout_session.line_items.data]
    }
    return {"code": 200, "data": payment_info}

注意:支付状态校验必须在服务端通过Stripe接口拉取结果判断,不要信任前端跳转时携带的自定义参数,避免被恶意伪造请求篡改支付结果,造成资损。

内容的提问来源于stack exchange,提问作者Nori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:33:31