# 钉钉同步失败诊断:对比新旧 token、不同旧版 topapi 接口的可用性 $appKey = "ding4eootvq4jzas96lr" $appSecret = "UI6XcD8GFPE_W_yo2eQkMuoSsTEf1whpZYEXrsDA7CV7bkJp40B3VNcETWS1aGgg" $out = @() # 1. 新版 accessToken $newTokResp = Invoke-RestMethod -Method Post -Uri "https://api.dingtalk.com/v1.0/oauth2/accessToken" -ContentType "application/json" -Body (@{appKey=$appKey;appSecret=$appSecret} | ConvertTo-Json) $newToken = $newTokResp.accessToken $out += "[1] new accessToken len=$($newToken.Length)" # 2. 新版 token 调旧版 listbypage(复现应用内的失败) $body = '{"department_id":1,"offset":0,"size":10}' try { $r2 = Invoke-RestMethod -Method Post -Uri "https://oapi.dingtalk.com/topapi/user/listbypage?access_token=$newToken" -ContentType "application/json" -Body $body $out += "[2] listbypage(new tok): " + ($r2 | ConvertTo-Json -Depth 5 -Compress) } catch { $out += "[2] listbypage(new tok) HTTP EX: " + $_.Exception.Message } # 3. 新版 token 调 v2 listsub(部门接口对照) try { $r3 = Invoke-RestMethod -Method Post -Uri "https://oapi.dingtalk.com/topapi/v2/department/listsub?access_token=$newToken" -ContentType "application/json" -Body '{"dept_id":1}' $out += "[3] v2 listsub(new tok): " + ($r3 | ConvertTo-Json -Depth 5 -Compress) } catch { $out += "[3] v2 listsub(new tok) HTTP EX: " + $_.Exception.Message } # 4. 旧版 gettoken $oldTok = Invoke-RestMethod -Method Get -Uri "https://oapi.dingtalk.com/gettoken?appkey=$appKey&appsecret=$appSecret" $oldToken = $oldTok.access_token $out += "[4] gettoken errcode=$($oldTok.errcode) errmsg=$($oldTok.errmsg) oldToken len=$($oldToken.Length)" # 5. 旧版 token 调 listbypage(对照:若成功则说明是新旧 token 兼容问题) if ($oldToken) { try { $r5 = Invoke-RestMethod -Method Post -Uri "https://oapi.dingtalk.com/topapi/user/listbypage?access_token=$oldToken" -ContentType "application/json" -Body $body $out += "[5] listbypage(old tok): " + ($r5 | ConvertTo-Json -Depth 5 -Compress) } catch { $out += "[5] listbypage(old tok) HTTP EX: " + $_.Exception.Message } # 6. 旧版 token 调 v2 版用户接口(另一种可选实现) try { $r6 = Invoke-RestMethod -Method Post -Uri "https://oapi.dingtalk.com/topapi/v2/user/list?access_token=$oldToken" -ContentType "application/json" -Body '{"dept_id":1,"cursor":0,"size":10}' $out += "[6] v2 user/list(old tok): " + ($r6 | ConvertTo-Json -Depth 5 -Compress) } catch { $out += "[6] v2 user/list(old tok) HTTP EX: " + $_.Exception.Message } } $out | Out-File -Encoding utf8 "d:\code\crm-backend-matt\tmp\dt-diag-out.txt" $out | ForEach-Object { Write-Output $_ }