如何通过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。
具体操作步骤
- 先升级本地Stripe SDK到最新版本,执行命令:
pip install --upgrade stripe - 服务端代码中先配置好你的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
相关产品推荐
相关产品推荐

