创建和更新卡片
了解什么是 Marqeta 卡,以及如何创建和更新它。
一张**卡**是用户拥有的支付卡,可以是实体卡或虚拟卡。卡片的行为和属性由与其关联的卡片产品对象定义。我们也可以在卡片对象中定义卡片的属性,此时卡片对象中的定义将优先于卡片产品对象中的定义。
在本课程中,我们将学习如何创建和更新 Marqeta 支付卡。
创建一张卡
我们可以通过向 {BASE_URL}/cards 端点发送 POST 请求来创建一张 Marqeta 支付卡。可以在请求体中提供卡片的基本信息,包括邮寄信息。同时,还需要指定卡片所有者的 user_token 以及控制该卡片的卡片产品 card_product_token。因此,在创建新的 Marqeta 卡片之前,我们需要先创建一个用户和一个卡片产品。
请求参数
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| show_cvv_number | boolean | 可选 | 设置为 True 时,响应中会显示 CVV2 号码;否则为 False。注意:这是一个查询参数。 |
| show_pan | boolean | 可选 | 设置为 True 时,响应中会显示卡片的 PAN(主账户号码);否则为 False。注意:这是一个查询参数。 |
| card_product_token | string | 必需 | 卡片产品的令牌 |
| expedite | boolean | 可选 | 当需要请求履约提供商加快卡片处理速度时设为 True,否则为 False。默认值:False |
| metadata | object | 可选 | 将客户提供的元数据添加到卡片中。允许最多 20 对键值对。格式示例:"my_name_1": "my_value_1" |
| expiration_offset | object | 可选 | 定义卡片发行后有效的持续时间 |
| token | string | 可选 | 卡片的唯一令牌,长度为 1–36 个字符。注意:若未指定,系统将自动生成。一旦设置,此值不可更改。 |
| user_token | string | 必需 | 卡片用户的唯一令牌 |
| fulfillment | object | 可选 | 包含邮寄信息和卡片的物理特征 |
| reissue_pan_from_card_token | string | 可选 | 重新发行指定的卡片,并为其分配相同的 PAN 和 PIN(个人识别号码),但更换新的到期日期和 CVV2 号码。最大长度:36 个字符 |
| translate_pin_from_card_token | string | 可选 | 将新创建的卡片的 PIN 设置为与指定卡片相同。最大长度:36 个字符。注意:两张卡片必须属于同一用户,且不能同时设置 reissue_pan_from_card_token |
| activation_actions | object | 可选 | 包含卡片激活时要执行的操作。注意:此对象中的字段互斥。 |
| bulk_issuance_token | string | 可选 | 用于将卡片链接到批量发卡订单的令牌。注意:该字段一旦设置便无法更新。最大长度:36 个字符 |
注意:有关
expiration_offset、fulfillment和activation_actions对象的详细信息,请参阅本课程的附录。
在下面的代码中,我们传递了两个查询参数 show_cvv_number 和 show_pan,以及一些可选的请求体参数,再加上必需的参数。
第 1–2 行:我们将 show_cvv_number 和 show_pan 两个可选查询参数都设为 True。
第 8–9 行:我们已在前面的课程中保存了必需参数 user_token 和 card_product_token 的值。
第 14 行:我们输入 name_line_1.value 的值。
第 20–24 行:我们输入 address1、city、state、postal_code 和 country 的值。详情请参考 Marqeta 官方文档。
注意:您可以根据需要修改表格中列出的其他可选参数的值。
输入完所有值后,点击下方代码框中的“运行”按钮查看输出结果。
1show_cvv_number = True 2show_pan = True 3 4url = "https://sandbox-api.marqeta.com/v3/cards?show_cvv_number=" \ 5 + str(show_cvv_number) + "&show_pan="+ str(show_pan) 6 7data = json.dumps({ 8 "user_token": "{{USER_TOKEN}}", 9 "card_product_token": "{{CARD_PRODUCT_TOKEN}}", 10 "fulfillment": { 11 "card_personalization": { 12 "text": { 13 "name_line_1": { 14 "value": "" 15 } 16 } 17 }, 18 "shipping": { 19 "recipient_address": { 20 "address1": "", 21 "city": "", 22 "state": "", 23 "postal_code": "", 24 "country": "", 25 } 26 }, 27 }, 28}) 29 30response = requests.post(url, headers=headers, data=data) 31 32printResponse(response)
当代码成功执行后,输出将显示包含所有数据字段的完整卡片对象。我们提取其中的 token 字段并保存为 CARD_TOKEN。该值将在本课程后续操作中使用。
如果失败,则会显示相应的错误信息。
创建卡片状态变更
卡片状态变更 指的是我们设置现有卡片的 state。所有卡片在创建时均为非激活状态,需要手动激活。我们可以通过向 {BASE_URL}/cardtransitions 端点发送 POST 请求来设置现有卡片的状态。
注意:卡片激活后,可能无法再将其从一个用户转移到另一个用户。
请求参数
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| card_token | string | 必需 | 要更改状态的卡片令牌 |
| channel | string | 必需 | 状态变更所使用的机制。允许值:ADMIN、API、FRAUD、IVR、SYSTEM |
| state | string | 必需 | 要设置的新状态。允许值:ACTIVE、SUSPENDED、TERMINATED |
| token | string | 可选 | 卡片状态变更的唯一令牌,长度为 1–36 个字符。注意:若未指定,系统将自动生成。一旦设置,此值不可更改。 |
| reason | string | 可选 | 状态变更的附加说明,最大长度 255 个字符 |
| reason_code | string | 可选 | 两位数字代码,描述变更原因。允许值:00–31 |
| validations | object | 可选 | 包含用户相关信息 |
注意:有关
validations对象以及channel和reason_code值的详细说明,请参阅本课程的附录。
第 4 行:我们使用前一段代码中提取的 CARD_TOKEN 作为 card_token 的值。
第 5 行:我们将必需参数 state 设置为 ACTIVE。
第 6 行:我们将必需参数 channel 设置为 API,因为我们通过 API 处理此请求。
注意:您可以根据需要填写表格中列出的其他可选参数。
点击下方代码框中的“运行”按钮查看输出结果。
1url = '{{BASE_URL}}cardtransitions' 2 3data = json.dumps({ 4 "card_token": "{{CARD_TOKEN}}", 5 "state": "ACTIVE", 6 "channel": "API", 7}) 8 9response = requests.post(url, headers=headers, data=data) 10 11printResponse(response)
当代码成功执行后,输出将显示完整的卡片状态变更对象,包含所有数据字段,其中包括更新后的 state。
如果失败,则会显示相应的错误信息。
更新一张卡
我们可以通过向 {BASE_URL}/cards/{token} 端点发送 PUT 请求来更新一张卡片。路径参数 ({token}) 指的是要更新的卡片的令牌。我们还需在请求体中指定希望更新的字段。
请求参数
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | string | 必需 | 要更新的卡片的令牌。注意:这是路径参数。 |
| user_token | string | 可选 | 要关联到该卡片的用户令牌 |
| expedite | boolean | 可选 | 当请求履约提供商加快卡片处理时设为 True,否则为 False。默认值:False |
| fulfillment | object | 可选 | 包含邮寄信息和卡片的物理特征 |
| metadata | object | 可选 | 将客户提供的元数据添加到卡片中。允许最多 20 对键值对。格式示例:"my_name_1": "my_value_1" |
注意:我们只能更新
user_token、expedite参数,以及fulfillment和metadata对象的值。有关这些参数的详细信息,请参阅前面卡片创建请求参数表。
在下面的代码中,我们更新卡片的 metadata。
注意:您可以选择修改表格中列出的任意属性。
第 1 行:我们使用之前保存的 CARD_TOKEN 作为 token 的值。
第 7 行:我们添加 "card_purpose": "payment_card" 到卡片的 metadata 中。
点击下方代码框中的“运行”按钮查看输出结果。
1token = '{{CARD_TOKEN}}' 2 3url = '{{BASE_URL}}cards/' + token 4 5data = json.dumps({ 6 "metadata": { 7 "card_purpose": "payment_card" 8 } 9}) 10 11response = requests.put(url, headers=headers, data=data) 12 13printResponse(response)
当代码成功执行后,输出将显示与给定 token 对应的完整卡片对象,包含所有数据字段,包括已更新的内容。
如果失败,则会显示相应的错误信息。