开发者社区 问答 正文

调用钉钉API 发起审批怎么上传附件?

DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create");

OapiProcessinstanceCreateRequest request = new OapiProcessinstanceCreateRequest();

通过以上方式调用API发起审批,请问怎么上传PDF等非图片附件?

我目前按官方说明:

1.(没问题)先调用 “获取审批钉盘空间信息 https://oapi.dingtalk.com/topapi/processinstance/cspace/info” 获取到了spaceId。

2.(没问题)调用 “单步文件上传 https://oapi.dingtalk.com/file/upload/single” 获取到了media_id。

3.(有问题)还要调用 “保存文件到自定义或审批钉盘空间 https://oapi.dingtalk.com/cspace/add” 获取到 fileId,但是在调最后这个接口时,需要传入一个code(免登授权码)参数,请问这个参数我该何如获取?

或者有没有其他方式可以直接上传附件到审批的,麻烦告知一下,谢谢。

展开
收起
游客q3hbyvkpi6hn4 2021-12-29 11:47:00 2038 分享 版权
阿里云 AI 助理回答

为了在发起审批时上传PDF等非图片附件,您已经完成了以下步骤:

  1. 获取审批钉盘空间信息:成功获取了spaceId。
  2. 单步文件上传:成功获得了media_id。

接下来,您遇到的问题在于调用“保存文件到自定义或审批钉盘空间”接口时,需要提供一个code(免登授权码)参数。这个参数的获取方式如下:

免登授权码(code)获取方法

免登授权码通常用于用户在无需登录的情况下访问某些受保护的资源,对于钉钉API而言,这通常涉及到使用钉钉开放平台的免登授权流程。以下是简化的步骤来获取免登授权码:

  1. 创建免登应用:首先,在钉钉开发者后台创建一个免登应用,并确保该应用具有所需的权限(如文件相关权限)。

  2. 引导用户授权:通过特定的URL引导用户进行授权。此URL由您的后端生成,包含应用的appKey、redirectUri等信息,用户访问后会被重定向至钉钉授权页面,同意后将返回一个authCode。

  3. 后端服务器交换authCode为access_token和refresh_token:您的后端服务器需使用上一步获得的authCode,结合appKey、appSecret等向钉钉服务器请求,以换取access_token和refresh_token。这一步骤是通过HTTPS POST请求完成的。

  4. 使用access_token获取免登授权码(code):最后,利用access_token再次发送请求给钉钉服务器,这次是为了获取免登授权码(code),这个code就是您需要的参数,用于后续的文件保存操作。

代码示例(仅供参考,具体实现需根据钉钉API文档调整)

由于直接提供完整的代码实现较为复杂且依赖于具体环境,这里仅给出大致的逻辑框架:

// 假设已获取到authCode
String authCode = "从用户授权回调中获取的authCode";

// 第一步:使用authCode换取access_token
Map<String, String> tokenParams = new HashMap<>();
tokenParams.put("appkey", "yourAppKey");
tokenParams.put("appsecret", "yourAppSecret");
tokenParams.put("grant_type", "authorization_code");
tokenParams.put("code", authCode);

// 发起请求并处理响应,此处省略具体HTTP请求实现
String response = requestAccessToken(tokenParams);
JSONObject tokenResponse = JSONObject.parseObject(response);
String accessToken = tokenResponse.getString("access_token");

// 第二步:使用access_token获取免登授权码code
Map<String, String> codeParams = new HashMap<>();
codeParams.put("access_token", accessToken);
codeParams.put("type", "dingtalk_login"); // 根据实际需求选择类型

// 发起请求并处理响应,此处同样省略具体HTTP请求实现
String codeResponse = requestDingTalkCode(codeParams);
JSONObject codeJson = JSONObject.parseObject(codeResponse);
String code = codeJson.getString("code");

// 现在您可以使用这个code作为参数调用"保存文件到自定义或审批钉盘空间"接口

其他上传附件方式

如果您发现上述流程较为繁琐,可以考虑是否钉钉API有提供更直接的上传附件到审批实例的方法。查阅钉钉开放平台文档,寻找是否有针对审批实例直接上传附件的API接口,这样可能可以简化流程,避免手动管理钉盘文件和code的获取。但根据当前知识库资料,直接上传附件到审批的简化方法未明确提及,建议详细查阅钉钉官方API文档或联系钉钉技术支持获取最新指导。

希望以上信息对您有所帮助!如果有更多问题或需要进一步的技术细节,请随时告知。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答