创建和更新卡产品
了解卡片产品及其创建和更新方法。
卡产品 定义了 Marqeta 卡的行为和功能。它定义了卡片的属性,并提供有关其使用方式的信息。同时,它允许我们指定卡片可以使用的具体渠道,例如在 ATM、销售点(POS)以及电子商务网站上使用。
除了卡产品对象外,我们还可以在卡对象中定义属性。如果存在多个定义,卡对象中的定义将优先于卡产品对象中的定义。
在本课程中,我们将学习如何创建和更新一个卡产品。
创建卡产品
我们可以通过向 {BASE_URL}/cardproducts 端点发送 POST 请求来创建一个卡产品。我们可以在请求体中提供卡产品的基本信息,也可以使用 config 对象提供配置信息。这些信息定义了卡产品的功能和行为。
请求参数
端点的请求参数如下表所示:
| 参数 | 类型 | 必填/可选 | 描述 |
|---|---|---|---|
| name | 字符串 | 必填 | 卡产品的名称长度:1–40 个字符 |
| start_date | 日期时间 | 必填 | 卡产品的激活日期格式:yyyy-MM-dd注意:如果开始日期已过且 active 状态设置为 false,则卡片不会被激活。 |
| token | 字符串 | 可选 | 卡产品的唯一标识符长度:1–36 个字符注意:若未指定,系统将自动生成。该值一旦设定后不可更改。 |
| active | 布尔值 | 可选 | 卡产品的状态默认值:true |
| end_date | 日期时间 | 可选 | 卡产品保持活跃的截止日期格式:yyyy-MM-dd |
| config | 对象 | 可选 | 包含卡产品特性的配置信息 |
注意: 有关
config对象的详细信息,请参阅附录中的 附加参数与响应字段 一节。
点击下方代码框中的“运行”按钮查看输出结果。
1// 导入库 2import fetch from "node-fetch" 3 4// 定义端点 URL 5const endpointUrl = new URL('{{BASE_URL}}cardproducts'); 6 7const tokens = '{{APPLICATION_TOKEN}}:{{ADMIN_ACCESS_TOKEN}}' 8const encoded = Buffer.from(tokens, 'ascii').toString('base64') 9 10const headerParameters = { 11 'Content-Type': 'application/json', 12 'Authorization': `Basic ${encoded}` 13}; 14 15// 定义请求体参数 16const bodyParameters = JSON.stringify({ 17 "name": "Basic", 18 "start_date": new Date(), 19 "config": { 20 "poi": { 21 "ecommerce": true, 22 "atm": true, 23 }, 24 } 25}); 26 27// 设置 API 调用选项 28const options = { 29 method: "POST", 30 headers: headerParameters, 31 body: bodyParameters 32}; 33 34// 发起 API 调用的函数 35async function createCardProduct() { 36 try { 37 const response = await fetch(endpointUrl, options); 38 // 输出响应 39 printResponse(response); 40 } catch (error) { 41 // 输出错误信息 42 printError(error); 43 } 44} 45 46// 调用函数发起 API 调用 47createCardProduct();
在上述代码中:
- 第 5 行: 我们将端点 URL 存储在
endpointUrl变量中。 - 第 16–25 行: 我们在
bodyParameters变量中添加了name和start_date。我们将ecommerce属性设为true,表示用户可以用于在线购物;将atm属性设为true,表示用户可以在 ATM 上取现并在 POS 系统中接收资金。 - 第 29 行: 我们将请求方法设为
POST,以创建一个新的卡产品。 - 第 37 行: 我们使用
fetch函数发起 API 调用。
响应字段
当代码成功执行时,输出将显示包含所有请求数据字段的完整卡产品对象。其中 token 字段被提取并保存为 CARD_PRODUCT_TOKEN,我们将在后续课程中使用该值进行操作。若失败,则会显示相应的错误信息。
上述端点的响应字段如下表所示:
| 字段名 | 类型 | 描述 |
|---|---|---|
| token | 字符串 | 卡产品的唯一标识符允许长度:1–36 个字符 |
| active | 布尔值 | 若卡产品在 Marqeta 上处于 ACTIVE 状态则为 true,否则为 false。 |
| name | 字符串 | 卡产品的名称。 |
| created_time | 日期时间 | 卡产品创建的时间(UTC 格式)。格式:yyyy-MM-ddThh:mm:ssZ |
| last_modified_time | 日期时间 | 资源最后一次更新的时间(UTC 格式)。格式:yyyy-MM-ddThh:mm:ssZ |
| start_date | 日期时间 | 卡产品变为 ACTIVE 的日期。 |
| config | 对象 | 包含卡产品特性的配置信息。配置内容根据项目设置返回。 |
更新卡产品
我们可以通过向 {BASE_URL}/cardproducts/{token} 端点发送 PUT 请求来更新一个卡产品。路径参数 {token} 指的是要更新的卡产品的令牌。我们还需要在请求体中指定希望更新的字段。
请求参数
端点的请求参数如下表所示:
| 参数 | 类型 | 必填/可选 | 描述 |
|---|---|---|---|
| token | 字符串 | 必填 | 要更新的卡产品的令牌注意:这是路径参数。 |
注意: 要了解可更新的字段,请参考 卡产品创建 的输入参数表。请注意,除了
token外,其他所有字段均可更新,如表中所示。
在下面的代码中,我们将更改某个卡产品的 name。点击下方代码框中的“运行”按钮查看输出结果。
1// 导入库 2import fetch from "node-fetch" 3 4const tokens = '{{APPLICATION_TOKEN}}:{{ADMIN_ACCESS_TOKEN}}' 5const encoded = Buffer.from(tokens, 'ascii').toString('base64') 6 7const cardProductToken = '{{CARD_PRODUCT_TOKEN}}' 8 9// 定义端点 URL 10const endpointUrl = new URL(`{{BASE_URL}}cardproducts/${cardProductToken}`); 11 12const headerParameters = { 13 'Content-Type': 'application/json', 14 'Authorization': `Basic ${encoded}` 15}; 16 17// 定义请求体参数 18const bodyParameters = JSON.stringify({ 19 "name": "Basic Updated" 20}); 21 22// 设置 API 调用选项 23const options = { 24 method: "PUT", 25 headers: headerParameters, 26 body: bodyParameters 27}; 28 29// 发起 API 调用的函数 30async function updateCardProduct() { 31 try { 32 const response = await fetch(endpointUrl, options); 33 // 输出响应 34 printResponse(response); 35 } catch (error) { 36 // 输出错误信息 37 printError(error); 38 } 39} 40 41// 调用函数发起 API 调用 42updateCardProduct();
在上述代码中:
- 第 10 行: 我们将端点 URL 存储在
endpointUrl变量中,并将卡产品令牌作为路径参数添加。 - 第 18–20 行: 我们在
bodyParameters变量中添加了name字段。 - 第 24 行: 我们将请求方法设为
PUT,以更新卡产品。 - 第 32 行: 我们使用
fetch函数发起 API 调用。
响应字段
当代码成功执行时,输出将显示与给定 token 对应的完整卡产品对象,包含所有请求的数据字段,包括刚刚更新的字段。若失败,则会显示相应的错误信息。
此端点的响应字段与创建卡产品时的响应字段相同。