创建和更新用户
了解 Marqeta 用户及其创建和更新方法。
一个Marqeta用户,也称为持卡人,是指拥有Marqeta卡片的个人。Marqeta用户可以使用与实体或虚拟Marqeta卡关联的账户中的资金。每个Marqeta用户同时也是账户持有人,因为每位用户都拥有一个通用目的账户(GPA),可用于资金转账。
此外,Marqeta 用户之间存在父子关系:用户或业务都可以作为父级。业务是账户持有人,可以作为 Marqeta 用户的父级;它本身不持有任何卡片,但其子用户可以持有。同样,用户也可以成为另一个用户的父级。在卡片使用方面,这种关系为父账户提供了对子账户一定程度的控制权。父用户可以监控或限制子用户的卡片使用情况。该关系还允许将父账户与子用户共享,使子用户能够访问父账户的资金。
这种父子关系可以延伸至多层。这意味着一个普通用户账户可以是业务的子账户,同时又是另一个用户的父账户。在这种情况下,普通用户不能使用其父账户的余额。然而,该普通用户的子账户可以被配置为使用其父账户(即该普通用户)的余额。
在本课程中,我们将学习如何创建和更新Marqeta用户。
创建Marqeta用户
我们可以通过向 {BASE_URL}/users 端点发送 POST 请求来创建Marqeta用户。可以在请求体中提供用户的基本信息。若要创建子用户,必须为 parent_token 提供值。此外,可以通过将 uses_parent_account 字段设置为 true,允许子用户与其父账户共享账户。
注意: 如果子用户与父用户共享账户,则当父账户处于非活跃状态时,子用户无法支出资金。但子用户仍可激活卡片。
请求参数
上述端点的请求参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| first_name | 字符串 | 可选 | 用户名,最大长度:40个字符 |
| last_name | 字符串 | 可选 | 姓名,最大长度:40个字符 |
| 字符串 | 可选 | 用户邮箱地址,长度:1–255个字符。注意:所有用户邮箱必须唯一。 | |
| password | 字符串 | 可选 | 用户账户密码,最大长度:255个字符。条件:至少包含一个数字、一个小写字母、一个大写字母,以及以下符号之一:@ # $ % ! ^ & * ( ) \ _ + ~ ` - = [ ] { } , ; : ' " , . / < > ? |
| address1 | 字符串 | 可选 | 用户地址,最大长度:255个字符 |
| country | 字符串 | 可选 | 用户地址对应的国家,最大长度:40个字符 |
| phone | 字符串 | 可选 | 用户电话号码,格式:+00000000000,最大长度:255个字符 |
| company | 字符串 | 可选 | 公司名称,最大长度:255个字符 |
| token | 字符串 | 可选 | 用户的唯一标识符,长度:1–36个字符。注意:若未指定,系统将自动生成。一旦设置后不可更改。 |
| uses_parent_account | 布尔值 | 可选 | 若子账户与父账户共享余额,则设为 true,否则为 false。默认值:false。注意:若设为 true,则 parent_token 也必须有值。该值一旦设置后不可更改。 |
| parent_token | 字符串 | 可选 | 指定为当前用户的父级的用户或业务的令牌。注意:当 uses_parent_account = true 时,此参数为必填项。 |
| active | 布尔值 | 可选 | 用户状态 |
注意: 以上请求参数列表并非完整。请参阅附录以获取其余参数。
点击下方代码组件中的“运行”按钮查看输出结果。
1// 导入库 2import fetch from "node-fetch" 3 4// 定义端点URL 5const endpointUrl = new URL('{{BASE_URL}}users'); 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 "first_name": "", 18 "last_name": "" 19}); 20 21// 设置API调用选项 22const options = { 23 method: "POST", 24 headers: headerParameters, 25 body: bodyParameters 26}; 27 28// 执行API调用的函数 29async function createUser() { 30 try { 31 const response = await fetch(endpointUrl, options); 32 // 输出响应 33 printResponse(response); 34 } catch (error) { 35 // 输出错误信息 36 printError(error); 37 } 38} 39 40// 调用函数执行API调用 41createUser();
在上述代码中:
- 第5行: 将端点URL定义在
endpointUrl变量中。 - 第16–19行: 在
bodyParameters变量中添加first_name和last_name。 - 第23行: 将请求方法设为
POST,用于创建新的Marqeta用户。 - 第31行: 使用
fetch函数发起API调用。
响应字段
当代码成功执行时,输出将显示包含所有请求数据字段的完整用户对象。系统会提取 token 字段并保存为 USER_TOKEN。我们将在本课程后续操作中使用该密钥来更新用户及执行其他任务。
若失败,则会显示相应的错误信息。
以下是该端点的一些重要响应字段:
| 名称 | 类型 | 描述 |
|---|---|---|
| token | 字符串 | 持卡人的唯一ID,长度:1–36个字符 |
| active | 布尔值 | 若持卡人在Marqeta上处于ACTIVE状态,则为 true,否则为 false |
| first_name | 字符串 | 持卡人的名字 |
| last_name | 字符串 | 持卡人的姓氏 |
| uses_parent_account | 布尔值 | 若子账户与父账户共享余额,则为 true,否则为 false |
| corporate_card_holder | 布尔值 | 若持卡人持有企业卡,则为 true,否则为 false |
| created_time | 日期时间 | 用户创建的时间(UTC格式)。格式:yyyy-MM-ddThh:mm:ssZ |
| last_modified_time | 日期时间 | 资源最后一次更新的时间(UTC格式)。格式:yyyy-MM-ddThh:mm:ssZ |
| meta_data | 对象 | 包含与持卡人一同提供的任何附加元数据 |
| account_holder_group_token | 字符串 | 将持卡人与选定的账户持有者组关联 |
| status | 字符串 | 指定持卡人在Marqeta平台上的状态。允许值:UNVERIFIED(未验证)、LIMITED(受限)、ACTIVE(活跃)、SUSPENDED(暂停)、CLOSED(关闭) |
更新Marqeta用户
我们可以通过向 {BASE_URL}/users/{token} 端点发送 PUT 请求来更新Marqeta用户。路径参数({token})指代我们要更新的用户的令牌。我们还需在请求体中指定需要更新的字段。
请求参数
上述端点的请求参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | 字符串 | 必填 | 要更新的用户的令牌。注意:这是路径参数。 |
注意: 请参考创建Marqeta用户的请求参数表,了解可更新的字段。除该表中受限制的字段外,其余字段均可更新。
在下面的代码中,我们将更新指定用户的 last_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 user_token = '{{USER_TOKEN}}' 8 9// 定义端点URL 10const endpointUrl = new URL(`{{BASE_URL}}users/${user_token}`); 11 12const headerParameters = { 13 'Content-Type': 'application/json', 14 'Authorization': `Basic ${encoded}` 15}; 16 17// 定义请求体参数 18const bodyParameters = JSON.stringify({ 19 "last_name": "Jason" 20}); 21 22// 设置API调用选项 23const options = { 24 method: "PUT", 25 headers: headerParameters, 26 body: bodyParameters 27}; 28 29// 执行API调用的函数 30async function updateUser() { 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调用 42updateUser();
在上述代码中:
- 第10行: 将端点URL定义在
endpointUrl变量中,并将用户令牌作为路径参数添加。 - 第18–20行: 在
bodyParameters变量中添加last_name。 - 第24行: 将请求方法设为
PUT,用于更新Marqeta用户。 - 第32行: 使用
fetch函数发起API调用。
响应字段
当代码成功执行时,输出将显示与给定 token 对应的完整用户对象,包含所有请求的数据字段,包括刚刚更新的字段。若失败,则会显示相应的错误信息。
请参考创建Marqeta用户的响应字段表,了解此API调用的响应字段。