如何通过Stripe Python API获取指定日期后的最新收费记录
获取指定日期范围的Stripe收费记录(Python实现)
当然可以!用Stripe的Python API获取指定时间段(比如过去一周)的收费记录其实很简单,只是你可能没留意到stripe.Charge.list()方法里的created参数——这就是按时间过滤的核心。下面我给你一步步拆解实现方式,附完整代码示例:
第一步:准备工作
先确保你安装了Stripe的Python SDK,用pip就能搞定:
pip install stripe
第二步:核心实现代码
1. 初始化客户端并设置密钥
记得替换成你自己的Stripe秘钥,千万别硬编码在代码里,建议用环境变量存储(比如os.getenv("STRIPE_SECRET_KEY")):
import stripe from datetime import datetime, timedelta # 初始化Stripe客户端 stripe.api_key = "your_stripe_secret_key_here"
2. 计算时间范围
Stripe API用UNIX时间戳(秒数)处理时间过滤,所以我们先把「一周前的日期」转成时间戳:
# 计算7天前的时间点 one_week_ago = datetime.now() - timedelta(days=7) # 转换为UNIX时间戳(秒) start_timestamp = int(one_week_ago.timestamp())
3. 获取指定范围内的收费记录
调用stripe.Charge.list(),通过created参数设置过滤条件,同时可以用limit控制每页返回的数量(默认10条,最大100条):
# 获取过去一周的收费记录 charges = stripe.Charge.list( created={"gte": start_timestamp}, # gte = 大于等于该时间戳 limit=100 # 按需调整每页条数 ) # 遍历结果,提取你需要的匹配字段 for charge in charges.data: print(f"收费ID: {charge.id}") print(f"金额: {charge.amount / 100} {charge.currency}") # Stripe金额以最小单位存储(比如美元是分) print(f"关联客户ID: {charge.customer}") print(f"关联发票ID: {charge.invoice}") print(f"创建时间: {datetime.fromtimestamp(charge.created)}") print("---")
4. 处理分页(如果记录超过100条)
如果你的收费记录超过了limit设置的数量,Stripe会返回has_more=True,这时候需要循环获取下一页:
all_charges = [] last_charge = None while True: # 第一页直接获取,后续页从上次最后一条记录开始 charge_list = stripe.Charge.list( created={"gte": start_timestamp}, limit=100, starting_after=last_charge.id if last_charge else None ) all_charges.extend(charge_list.data) if not charge_list.has_more: break last_charge = charge_list.data[-1] # 现在all_charges包含了所有符合条件的记录 print(f"共获取到 {len(all_charges)} 条收费记录")
实用提示
- 字段匹配:如果要和客户/发票信息匹配,可以用
charge.customer调用stripe.Customer.retrieve(charge.customer)获取完整客户数据;用charge.invoice调用stripe.Invoice.retrieve(charge.invoice)获取发票详情。 - 时间过滤扩展:除了
gte,还可以用lte(小于等于)、gt(大于)、lt(小于)来精准控制时间范围,比如获取上周一到周日的记录。 - 安全提醒:永远不要把Stripe秘钥暴露在代码仓库里,用环境变量或加密配置文件管理更安全。
内容的提问来源于stack exchange,提问作者Rubén Villar
相关产品推荐
相关产品推荐

