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(免登授权码)参数,请问这个参数我该何如获取?
或者有没有其他方式可以直接上传附件到审批的,麻烦告知一下,谢谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
为了在发起审批时上传PDF等非图片附件,您已经完成了以下步骤:
接下来,您遇到的问题在于调用“保存文件到自定义或审批钉盘空间”接口时,需要提供一个code
(免登授权码)参数。这个参数的获取方式如下:
免登授权码通常用于用户在无需登录的情况下访问某些受保护的资源,对于钉钉API而言,这通常涉及到使用钉钉开放平台的免登授权流程。以下是简化的步骤来获取免登授权码:
创建免登应用:首先,在钉钉开发者后台创建一个免登应用,并确保该应用具有所需的权限(如文件相关权限)。
引导用户授权:通过特定的URL引导用户进行授权。此URL由您的后端生成,包含应用的appKey、redirectUri等信息,用户访问后会被重定向至钉钉授权页面,同意后将返回一个authCode。
后端服务器交换authCode为access_token和refresh_token:您的后端服务器需使用上一步获得的authCode,结合appKey、appSecret等向钉钉服务器请求,以换取access_token和refresh_token。这一步骤是通过HTTPS POST请求完成的。
使用access_token获取免登授权码(code):最后,利用access_token再次发送请求给钉钉服务器,这次是为了获取免登授权码(code),这个code就是您需要的参数,用于后续的文件保存操作。
由于直接提供完整的代码实现较为复杂且依赖于具体环境,这里仅给出大致的逻辑框架:
// 假设已获取到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文档或联系钉钉技术支持获取最新指导。
希望以上信息对您有所帮助!如果有更多问题或需要进一步的技术细节,请随时告知。