调用Planday API遇JWT格式错误及401未授权问题求助
解决Planday API请求的JWT格式错误与401授权问题
问题梳理
执行curl请求HR模块时返回JWT格式错误:
curl --location "https://openapi.planday.com/hr/v1/employees" \ --header "Content-Type: application/json" \ --header "X-ClientId: <ID>" \ --header "Authorization: Bearer <TOKEN>"Jwt is not in the form of Header.Payload.Signature with two dots and 3 sections
手动添加
-X GET/--request GET参数后,出现URL格式错误,偶尔误报未指定ID。Python请求排班模块返回401未授权:
response = requests.get('https://openapi.planday.com/scheduling/v1.0/shifts', headers= {"Authorization":"Bearer <TOKEN>", 'X-ClientId':'<ID>'})
Python解决思路及实操步骤
1. 先验证JWT令牌的有效性与格式
- 核对
<TOKEN>是否为标准三段式结构:Header.Payload.Signature,必须包含两个英文点号(.),无多余空格、换行或特殊字符。 - 可通过JWT解码工具验证令牌结构,重点检查
exp(过期时间)字段是否在有效期内。
2. 修正Python请求代码
以下是可直接复用的完整请求示例,替换占位符即可:
import requests # 替换为你的真实凭据 CLIENT_ID = "你的ClientId" VALID_JWT_TOKEN = "你的完整JWT令牌" # 选择目标API地址(HR或排班模块) target_url = "https://openapi.planday.com/hr/v1/employees" # target_url = "https://openapi.planday.com/scheduling/v1.0/shifts" headers = { "X-ClientId": CLIENT_ID, "Authorization": f"Bearer {VALID_JWT_TOKEN}", # GET请求通常不需要Content-Type,若API明确要求可保留 "Content-Type": "application/json" } try: response = requests.get(target_url, headers=headers) # 打印调试信息,方便排查问题 print(f"状态码: {response.status_code}") print(f"响应详情: {response.text}") if response.status_code == 200: json_data = response.json() print("数据获取成功:", json_data) # 这里可添加你的业务逻辑处理 else: print(f"请求失败原因: {response.reason}") except Exception as e: print(f"请求异常: {str(e)}")
3. 排查401错误的核心方向
- 令牌问题:重新通过Planday授权流程获取新令牌,确保令牌未过期、未被篡改。
- 凭据匹配:确认
X-ClientId与生成令牌时使用的Client ID完全一致,无拼写错误。 - 权限配置:在Planday开发者后台检查应用权限,确保已开通HR或Scheduling模块的访问权限。
- 请求头格式:
Authorization头必须严格遵循Bearer(注意空格)+令牌的格式,不能省略空格。
4. curl命令的额外提示
- GET是curl默认请求方法,无需手动添加
-X GET或--request GET,多余参数可能导致URL解析错误。 - 复制命令时确保引号、换行反斜杠格式完整,避免终端解析异常。
内容的提问来源于stack exchange,提问作者Bjarke Lund
相关产品推荐
相关产品推荐

