使用DocuSign API根据邮箱获取用户ID及删除用户的问题排查
如何通过DocuSign API根据邮箱获取单个用户信息?
问题原因分析
你遇到返回所有用户的问题,核心出在两个地方:
- GET请求参数传递方式错误:DocuSign的
GET /v2/accounts/{accountId}/users接口不支持通过请求体(也就是你用的json=data)传递过滤条件,而且GET请求本身就不应该用请求体传参。你当前写的data={"users": [{"email": email}]}根本不会被API解析,所以接口默认返回了该账户下的全部用户。 - 冗余请求头干扰:你的请求头里包含了
Content-Length、Origin、Referer这类浏览器端请求才需要的字段,服务器端调用DocuSign API时这些字段不仅多余,甚至可能导致接口解析异常。
解决方案:用查询参数过滤用户
要根据邮箱精准获取单个用户,你需要通过URL查询参数传递email过滤条件,同时简化请求头。以下是修正后的完整代码:
import sys import requests # 从命令行获取目标邮箱 email = sys.argv[1] account_id = "<你的账户ID>" auth_token = "<你的Bearer令牌>" # 只保留API必需的请求头 headers = { 'Accept': 'application/json', 'Authorization': f'Bearer {auth_token}' } # 构造带email查询参数的请求URL url = f'https://demo.docusign.net/restapi/v2/accounts/{account_id}/users?email={email}' # 发送GET请求,无需传递json参数 response = requests.get(url, headers=headers) # 处理响应结果 if response.status_code == 200: users_list = response.json().get('users', []) if users_list: target_user = users_list[0] user_id = target_user.get('userId') print(f"找到目标用户:ID={user_id},邮箱={target_user.get('email')}") # 这里可以继续调用删除用户的API:DELETE /v2/accounts/{account_id}/users/{user_id} else: print(f"未找到邮箱为 {email} 的用户") else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")
额外提示
- DocuSign的
GET /users接口支持多个查询参数(比如userName、status),你可以根据需求组合使用来缩小筛选范围。 - 如果账户下存在多个相同邮箱的用户(这种情况极少),接口会返回所有匹配项,你需要额外添加逻辑处理。
- 删除用户时,直接调用
DELETE /v2/accounts/{accountId}/users/{userId}接口,传入获取到的user_id即可。
内容的提问来源于stack exchange,提问作者Kyle Fennell
相关产品推荐
相关产品推荐

