我正在为 Square 开发一个客户创建表单,它将创建一个客户,然后立即检索他们的 ID 以在程序中进一步使用。但是,我不知道如何使用 API 来过滤使用 list_customers 命令返回的数据。
我找到了这篇文章: How toretrieve customer id from create customer method in Square using Python 这是四年前问的同样的事情,我不明白他们收到的答案。他们说“所以首先你应该这样做:result = result.body,然后获取ID:result['customer']['id']”,但我不知道如何将其实现到我的代码中。
编辑: 我现在收到错误:
“TypeError:列表索引必须是整数或切片,而不是 str”。这 返回的 ApiObject 格式为 <ApiResponse {"customers": [{"id": “Z6MNDFH4DQCW09ZZAVX6CX9H2G”,“创建于”: “2024-06-19T19:21:57.423Z”,“updated_at”:“2024-07-23T20:48:07Z”...>
出现
TypeError: list indices must be integers or slices, not str
错误的原因是,
list_customers
API 调用返回的是客户列表,而不是单个客户。虽然可能希望在创建客户后立即获取该客户的 ID,但 API 响应包含的格式不同。
以下是如何在使用 Square API 创建客户后获取客户 ID 的方法:
import square
# 初始化 Square 客户端
location_id = 'YOUR_LOCATION_ID'
access_token = 'YOUR_ACCESS_TOKEN'
client = square.Client(access_token=access_token, environment='sandbox')
# 创建客户数据
customer_data = {
'given_name': 'John',
'family_name': 'Doe',
'email_address': '[email protected]',
'phone_number': '555-123-4567'
}
# 创建客户请求
try:
result = client.customers.create_customer(body=customer_data)
# 从结果中直接获取客户 ID
customer_id = result.customer.id
print("新创建的客户 ID 为:", customer_id)
except square.ApiException as e:
print("出现错误:", e.status_code)
print(e.response.text)
在此代码中:
- 创建客户:
-
使用
client.customers.create_customer(body=customer_data)
创建一个新客户。 -
result
将保存对create_customer
调用的响应。 -
从结果中检索客户 ID:
-
成功创建客户后,
result
对象将包含已创建客户的信息。 -
通过访问
result.customer.id
直接访问客户 ID。 -
处理错误:
-
try...except
块用于捕获在 API 调用过程中可能发生的任何square.ApiException
。这确保了如果创建客户出现问题(例如重复的电子邮件地址),则脚本将捕获错误而不是崩溃。
此代码展示了一种在成功执行
create_customer
调用后立即检索客户 ID 的更直接方法。
请记住将
YOUR_LOCATION_ID
和
YOUR_ACCESS_TOKEN
替换为的实际凭据。