如_意_个人页

个人头像照片 如_意
0
18
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
  • 提交了问题 2017-03-29

    52013签名失败

  • 提交了问题 2017-03-14

    钉钉发送群消息接口变更

  • 提交了问题 2016-08-25

    更新用户时提示手机号码不合法

  • 提交了问题 2016-08-10

    dd.biz.util.scan扫描不了一维码

  • 提交了问题 2016-07-19

    ErrCode43008ErrMsg参数需要multipart类型

  • 提交了问题 2016-06-06

    说明文档有问题呀

暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 提交了问题 2017-03-29

    52013签名失败

  • 回答了问题 2017-03-29

    DingTalkDemo 52013

    回 2楼君信的帖子 这种方案有可能会出现时间错位而导致过期的情况。比如手机端向服务端发起了签名请求,这时jsticket还没有过期,比如在59分59秒的时候,签名完成后,响应到前端,由于网络较慢可能超过了1秒钟才返回到前端,而服务端因为jsticket已经达到了1小时于是自动发起了更新,服务端更新了新的jsticket,这时前端才收到签名返回的结果,于是在前端再验证时将会导致52013错误,鉴权失败。 ------------------------- ReDingTalkDemo 52013 经测试后猜测,钉钉签权的过程,钉钉手机端的微应用端会保留jsticket,当我们进入微应用页面时,由于jsticket过期,后端将会自动请求新的jsticket来签名,然后将签名包返回,这时钉钉手机端的微应用端却没有即时的更新最新的jsticket,导致签名失败,抛52013的错误。 在手端jsticket没有更新的情况下,过一段时间后再打开前端,就有可能会签名成功。 可能的原因是签名包的本地验证必须要有最新的jsticket,但钉钉手机端的微应用端似乎没有很好的即时同步到。
    踩0 评论0
  • 提交了问题 2017-03-14

    钉钉发送群消息接口变更

  • 回答了问题 2016-11-09

    同一个用户,在不同corpid查出来的userid是一样的

    Re同一个用户,在不同corpid查出来的userid是一样的 userid只保证了企业内的唯一。
    踩0 评论0
  • 回答了问题 2016-11-09

    钉钉群会话发消息是否有条数限制

    Re钉钉群会话发消息是否有条数限制 加入限制的时候,能不能先出个通告说明一下!!!系统因此通知失败,还得去跟原因!!!
    踩0 评论0
  • 回答了问题 2016-10-28

    扫码登录api

    Re扫码登录api APPID怎么还要审批?为什么不直接用CorpID? ------------------------- Re扫码登录api 那如果是桌面系统要钉钉扫码登录  用哪一种方式?
    踩0 评论0
  • 回答了问题 2016-09-01

    更新用户时提示手机号码不合法

    Re更新用户时提示手机号码不合法 手机号可以随意设置?不是一个手机号一个钉钉号么?
    踩0 评论0
  • 提交了问题 2016-08-25

    更新用户时提示手机号码不合法

  • 提交了问题 2016-08-10

    dd.biz.util.scan扫描不了一维码

  • 回答了问题 2016-07-29

    求救!咨询咨询!

    Re求救!咨询咨询! 这个问题大半年之前就有人提了,怎么现在还没有解决?我们需要提供第三方上传文件,并发送到指应群的功能,按现在的接口发送过去的file消息,是一长串的media_id.file。还有后缀怎么都是file?
    踩0 评论0
  • 回答了问题 2016-07-29

    发送file类型的钉消息,怎么让接收者看到原来的文件名,而不是XXXXXXX.file

    Re发送file类型的钉消息,怎么让接收者看到原来的文件名,而不是XXXXXXX 这个问题到现在还没有解决么?
    踩0 评论0
  • 回答了问题 2016-07-21

    ErrCode43008ErrMsg参数需要multipart类型

    ReErrCode43008ErrMsg参数需要multipart类型 经过不断的尝试总算找到了不太完整的解决方法,代码如下 ///         ///POST文件         ///         ///         ///         /// 比如钉钉上传媒体文件使用的是media,该值用于服务端接收到数据时读取该keyname之后相关的数据。         /// 文件数据         /// 文件名         ///         public static string Post(string url,                                   string fileKeyName,                                   byte[] fileBuffer,                                   String fileName,                                   int timeout)         {             var boundary = SecurityHelper.GenerateRadomStr();             WebClient webClient = new WebClient();             webClient.Headers.Add('Content-Type', string.Format('multipart/form-data; boundary={0}', boundary));             string fileFormdataTemplate =                             '\r\n--' + boundary +                             '\r\nContent-Disposition:form-data;name=\'{0}\';filename=\'{1}\'' +                             '\r\nContent-Type:application/octet-stream' +                             '\r\n\r\n';             string formDataHeader = String.Format(fileFormdataTemplate, 'media', fileName);             byte[] formDataHeaderBuffer = Encoding.UTF8.GetBytes(formDataHeader);             string begin = $'--{boundary}\r\n';             byte[] beginBuffer = Encoding.UTF8.GetBytes(begin);             string end = $'\r\n--{boundary}--\r\n';             byte[] endBuffer = Encoding.UTF8.GetBytes(end); ;             byte[] dataStream = new byte[formDataHeaderBuffer.Length + beginBuffer.Length + fileBuffer.Length + endBuffer.Length];             formDataHeaderBuffer.CopyTo(dataStream, 0);             beginBuffer.CopyTo(dataStream, formDataHeaderBuffer.Length);             fileBuffer.CopyTo(dataStream, formDataHeaderBuffer.Length + begin.Length);             endBuffer.CopyTo(dataStream, formDataHeaderBuffer.Length + begin.Length + fileBuffer.Length);             var returnBuffer = webClient.UploadData(url, 'POST', dataStream);             Encoding encode = Encoding.UTF8;             string resultJson = encode.GetString(returnBuffer);             return resultJson;         } 调用的代码 int timeout = 1000 * 60 * 5; String resultJson = RequestHelper.Post(requestUrl, 'media', fileBuffer, fileName, timeout);//media是固定的字符串 其中fileBuffer为文件的字节流,requestUrl按照接口的方式找接而成https://oapi.dingtalk.com/media/upload?access_token=ACCESS_TOKEN&type=TYPE。 目前测出,type=file时是可行的,type=image时不知为何总是提示【系统繁忙】 ------------------------- 回 6楼如意的帖子 附上读取媒体文件的方法 #region FetchMediaFile Function         ///         /// 获取媒体文件         ///         /// 媒体文件的id         ///         public static DDMediaFetchResult FetchMediaFile(string mediaId)         {             DDMediaFetchResult result = null;             string apiurl = FormatApiUrlWithToken(Urls.media_get);             apiurl = $'{apiurl}&{Keys.media_id}={mediaId}';             WebClient webClient = new WebClient();             var data = webClient.DownloadData(apiurl);             int testHeaderMaxLength = 100;             var testHeaderBuffer = new byte[(data.Length             Array.Copy(data, 0, testHeaderBuffer, 0, testHeaderBuffer.Length);             Encoding encoder = Encoding.UTF8;             String testHeaderStr = encoder.GetString(testHeaderBuffer);             if (testHeaderStr.StartsWith('--'))             {//正常返回数据时,第一行数据为分界线,而分界线必然以'--'开始.                 var tempArr = testHeaderStr.Split(new String[] { Environment.NewLine }, StringSplitOptions.None);                 string boundary = tempArr[0] + Environment.NewLine;                 int boundaryByteLength = encoder.GetBytes(boundary).Length;               byte[] destData = new byte[data.Length-boundaryByteLength];                 Array.Copy(data, boundaryByteLength, destData, 0, destData.Length);                 result = new DDMediaFetchResult();                 result.ErrCode = DDErrCodeEnum.OK;                 result.ErrMsg = 'OK';                 result.Data = destData;                 const string Content_Length = 'Content-Length';                 if (webClient.ResponseHeaders == null || (!webClient.ResponseHeaders.AllKeys.Contains(Content_Length)))                 {                     result.FileLength = -1;                 }                 var lengthStr = webClient.ResponseHeaders[Content_Length];                 int length = 0;                 if (int.TryParse(lengthStr, out length))                 {                     result.FileLength = length;                 }                 else                 {                     result.FileLength = 0;                 }                 const string Content_Type = 'Content-Type';                 if (webClient.ResponseHeaders == null || (!webClient.ResponseHeaders.AllKeys.Contains(Content_Type)))                 {                     result.FileType = 'unknown';                 }                 else                 {                     result.FileType = webClient.ResponseHeaders[Content_Type];                 }             }             else             {                 string resultJson = encoder.GetString(data);                 result = DDRequestAnalyzer.AnalyzeResult(resultJson);//将resultJson反序化为DDMediaFetchResult             }             return result;         }         #endregion ///     /// 媒体文件获取结果     ///     public class DDMediaFetchResult     {     ///         /// 错误码         ///     public int ErrCode{get;set;         ///         /// 错误消息         ///         public string ErrMsg { get; set; }}         ///         /// HTTP响应头         ///         public Dictionary Header { get; set; }         ///         /// 获取的数据         ///         public byte[] Data { get; set; }         ///         /// 文件长度         ///         public int FileLength { get; set; }         ///         /// 文件类型         ///         public String FileType { get; set; }     }
    踩0 评论0
  • 回答了问题 2016-07-20

    二次开发钉盘上传文件接口问题

    Re二次开发钉盘上传文件接口问题 看说明和示例代码,以为是要对边界也进行UrlEncode,后来不进行UrlEncode,可以得到filePath了。 但是把filePath当成mediaId,用获取媒体文件的接口去获取文件时,又提示不是合法的id,这是什么情况? ------------------------- 回 3楼如意的帖子 对mediaid主观理解造成的,以为可以用https://oapi.dingtalk.com/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID这个接口来获取上传的文件数据。 采用https://oapi.dingtalk.com/file/upload?access_token=ACCESS_TOKEN&uploadid=UPLOADID这个接口创建到钉盘的文件返回的filepath,不能直接用获取媒体文件的接口来获取数据,对照下图参数说明
    踩0 评论0
  • 提交了问题 2016-07-19

    ErrCode43008ErrMsg参数需要multipart类型

  • 提交了问题 2016-06-06

    说明文档有问题呀

  • 回答了问题 2016-06-06

    dd.biz.contact.choose 调用失败

    Redd.biz.contact.choose 调用失败 解决了没有?调用时也抛了一样的错误? ------------------------- Redd.biz.contact.choose 调用失败 找到问题了,在api列表调用申请的地方,输入biz.contact.choose,而不是dd.biz.contact.choose.不理解这两个有什么差异?因为我们调用的时候是用dd.biz.contact.choose的。
    踩0 评论0
  • 回答了问题 2016-05-18

    怎么获取群会话

    Re怎么获取群会话 强烈需要此功能,不然对于管理员自己企业下的企业群有哪些都不清楚,而且要对这些群发在后台自动通知一些特殊的消息的时候,没有这样的功能很能处理。
    踩0 评论0
  • 回答了问题 2016-05-18

    如何获得chatId

    Re如何获得chatId 创建了群,怎么就再也拿不到chartid了。QQ群创建后,也一样可以看到QQ群的群号呀。不理解这个逻辑出于何种目的,反正实际使用中相当别扭。想再找到群,发点消息都做不了。 ------------------------- Re如何获得chatId 我现在是服务端创建后就立即保存的数据库了。目前没有找到更合适的解决方案。强烈期待出相应的接口。 ------------------------- Re如何获得chatId 已经通过jsapi的dd.biz.chat.chooseConversationByCorpId方式来达到目的了。就是太麻烦了。
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息