如何通过Stripe API获取所有卡片的发卡方列表?Python代码排查求助
问题分析与解决方案
能否通过Stripe API获取目标表格?
可以。Stripe API的Card对象包含id(对应你的Card_id)和issuer字段(需注意字段结构),完全能获取你需要的表格数据。
你的代码问题所在
issuer字段解析错误:Stripe Card对象的issuer并非直接的字符串值,而是包含name等属性的字典对象。你直接判断source.issuer并添加到集合,实际拿到的是对象而非发卡方名称,逻辑判断的偏差导致无数据被添加。- 缺失分页处理:
stripe.Customer.list(limit=100)仅返回第一页的100个客户,若客户数量超过100,后续客户的卡片数据会被遗漏;同理list_sources也可能存在分页未处理的问题。 - 集合去重不符合需求:你用
set()存储结果,最终只会返回不重复的发卡方名称,而非所有卡片的id与对应发卡方的完整表格数据。
修正后的代码
以下是可生成目标格式数据的代码:
import stripe # 替换为你的Stripe API密钥 stripe.api_key = "your_api_key_here" def get_card_details(): card_details = [] # 处理客户分页 customers = stripe.Customer.list(limit=100) while customers: for customer in customers.data: # 处理客户卡片分页 sources = stripe.Customer.list_sources(customer.id, object="card", limit=100) while sources: for source in sources.data: # 提取卡片id和发卡方名称 card_id = source.id # 正确解析issuer的name字段,处理字段不存在的情况 card_issuer = source.issuer.get("name") if source.issuer else "Unknown" card_details.append({ "Card_id": card_id, "Card_issuer": card_issuer }) # 获取下一页卡片数据 sources = sources.next_page() if sources.has_more else None # 获取下一页客户数据 customers = customers.next_page() if customers.has_more else None return card_details if __name__ == "__main__": all_card_details = get_card_details() # 打印表格格式内容 print("| Card_id | Card_issuer |") print("|---------|-------------|") for detail in all_card_details: print(f"| {detail['Card_id']} | {detail['Card_issuer']} |")
关键修正说明
- 正确解析
issuer字段:通过source.issuer.get("name")提取发卡方名称,同时兼容issuer字段不存在的场景。 - 完整分页遍历:利用
has_more和next_page()方法遍历所有客户与卡片数据,避免遗漏。 - 保留全部卡片记录:用列表存储每一张卡片的id和对应发卡方信息,最终输出完整的表格内容,而非去重后的结果。
内容的提问来源于stack exchange,提问作者Cyriaque Thomas
相关产品推荐
相关产品推荐

