精华内容
下载资源
问答
  • 该文档为钉钉微应用PC端调试文档,需根据文档自行下载PC端钉钉RC版本,并升级到最新版,根据文档描述进行调试即可
  • 阿里钉钉微应用开发

    千人学习 2019-10-09 15:13:01
    本课程针对阿里钉钉微应用开发,在钉钉上开发企业个性化的功能,以及与企业自身ERP进行对接,移动端与PC端无缝衔接。本课程前端开发语言为javascript,后端语言为c#
  • { window.removeEventListener(‘popstate’, this.goBack, false) }, 1.2.vue控制退出钉钉微应用: dd.ready(function() { document.addEventListener(‘popstate’, function(e) { // 在这里处理你的业务逻辑 e....

    **

    1.1.控制浏览器返回(区分安卓和苹果(兼容性))

    **
    import * as dd from ‘dingtalk-jsapi’
    mounted{
    const u = navigator.userAgent
    const isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/)
    if (!isiOS) { // 控制androw端的返回
    if (window.history && window.history.pushState) {
    history.pushState(null, null, document.URL)
    window.addEventListener(‘popstate’, this.goBack, false)
    }
    } else { // 控制ios端的返回
    const that = this
    if (this.isInDingTalk) {
    this.util.setNavbarTitle(‘已发送的报价单’)
    dd.biz.navigation.setLeft({
    control: true,
    onSuccess: function () {
    that.goBack()
    }
    })
    }
    }
    }
    //离开销毁:
    destroyed () {
    window.removeEventListener(‘popstate’, this.goBack, false)
    },

    1.2.vue控制退出钉钉微应用:

    dd.ready(function() {
    document.addEventListener(‘popstate’, function(e) {
    // 在这里处理你的业务逻辑
    e.preventDefault();
    dd.biz.navigation.close({
    onSuccess : function(result) {
    alert(JSON.stringify(result));
    },
    onFail : function(err) {}
    })
    });

    展开全文
  • 主要介绍了用java实现“钉钉微应用,免登进入某H5系统首页“功能”,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 钉钉微应用开发,页面更新之后,客户端访问时,依然访问的是老版的页面。需要清除钉钉缓存之后才能 刷新到新页面。但是全公司百十来号人,不能要求每人都清除一下缓存,最好是打开就是改过之后的页面。 解决 微应用...
    问题

    钉钉微应用开发,页面更新之后,客户端访问时,依然访问的是老版的页面。需要清除钉钉缓存之后才能 刷新到新页面。但是全公司百十来号人,不能要求每人都清除一下缓存,最好是打开就是改过之后的页面。

    解决

    微应用是用vue-cli开发的,钉钉原生webview会将应用缓存cache缓存下来,并且很难通过钉钉内置缓存清除。最后查看打包后的文件发现,所有文件名都是不变的,即使改版后打包的文件名和改版前是一样的。这是导致缓存的原因。

    解决办法:
    在vue打包后的文件名添加时间戳,保证每次打包文件名都不一样。这样就不会触发缓存。
    在vue-cli配置项中将打包文件名添加时间戳。

    let TimeStamp = new Date().getTime();
      configureWebpack: {
        output: {
          // 输出重构  打包编译后的 文件名称
          filename: `js/[name].${TimeStamp}.js`,
          chunkFilename: `js/[name].${TimeStamp}.js`,
        },
      },
    
    展开全文
  • 钉钉微应用调试方法

    千次阅读 2019-05-30 10:19:12
    钉钉微应用调试方法 [https://files.alicdn.com/tpsservice/76ac853fc96075414a837d8bbae89030.pdf]

    钉钉微应用调试方法

    1、下载并安装Android钉钉开发版 下载地址 版本:4.5.15

    2、打开钉钉Android开发版,选择:我的 -> 设置 -> 通⽤ -> 开发者选项 -> 微应⽤调试(置于打开
    状态,如下图)
    在这里插入图片描述
    3、安装钉钉Android调试⼯具 windows系统下载地址 MAC统下载地址

    在这里插入图片描述
    用usb将电脑和Android手机连接 在设置中打开usb调试和开发者选项 如下图
    在这里插入图片描述
    同时打开钉钉Android开发版上⾃⼰开发的微应⽤,可以看到如下视图:
    在这里插入图片描述
    打开⾃⼰需要调试的微应⽤⻚⾯地址,可以看到如下视图:
    在这里插入图片描述
    现在就可以正常调试啦! 喜欢的友友们记得点赞噢

    展开全文
  • 而企业内部应用又分微应用 & 小程序两种 应用类型介绍 - 钉钉开放平台 其中应用类型的区别需要自己看看 其实就仅仅完成消息通知 如下图类似的效果的话 应用类型无论那个都没什么区别 本文选用的是微应用 1...

    由于业务需要 系统对接钉钉的开放接口 发送消息 , 经参考与查找资料后发现  要调用钉钉的发送消息接口  都需要有钉钉的应用才可以调用接口  

    由于是自己系统对接肯定是选企业内部应用了

    而企业内部应用又分微应用 & 小程序两种  

    应用类型介绍 - 钉钉开放平台     其中应用类型的区别需要自己看看   

    其实就仅仅完成消息通知 如下图类似的效果的话    应用类型无论那个都没什么区别

    本文选用的是   微应用    

    1.创建应用配置   前提你是管理员/子管理员身份

    1.1直接创建

    创建成功后

    可以在管理页面看到几个必要的参数 

    1.2其中还有个关键的参数也注意获取    这里CorpId  是企业标识id      后续发送接口中会用到

    2.应用申请权限

    由于我不是管理员   没有这个页面的截图     但这个设置是在应用的权限管理菜单处 修改   

    用到那个 申请那个   

    3.选用确定消息发送类型

    钉钉开放的对接接口中能发送的有以下几种

    消息通知概述 - 钉钉开放平台

    其中使用模板发送工作通知 仅能第三方应用才能使用

    1. 工作通知 

    2.企业群消息

    企业群窗口消息   以应用名义  直接发消息到企业群里的 

    3.普通消息

    普通对话窗口 ,调用后需要选择对话  以员工个人账号发送消息  本文使用的为 工作通知

    3.接入口列表

    1.GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret  获取企业内部应用的access_token https://developers.dingtalk.com/document/app/obtain-orgapp-token

    2.POST https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token=ACCESS_TOKE 根据手机号获取userid

    https://developers.dingtalk.com/document/app/query-users-by-phone-number

    3.POST https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN  发送工作通知

    https://developers.dingtalk.com/document/app/asynchronous-sending-of-enterprise-session-messages

    4.POST https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult?access_token=ACCESS_TOKEN 获取工作通知消息的发送结果

    https://developers.dingtalk.com/document/app/gets-the-result-of-sending-messages-asynchronously-to-the-enterprise

    3.1流程依次对应上述接口

    1.获取token 

    2.根据tonken & 手机号获取userid

    3. 根据tonken & userid 发送通知

    4.根据tonken &  第3步返回的 taskid 获取结果

    4.下载sdk

    https://developers.dingtalk.com/document/app/download-the-server-side-sdk

    这个链接下载java sdk

    4.1.下载的sdk 有两个 将其导入自己的项目

    4.2.也可以用mavevn 导入到本地

    -Dfile : 安装jar文件路径

    -DgroupId: 赋予名称

    -Dversion: 版本号

    -Dpackaging : 打包方式

    4.2.1mvn命令 :

    mvn install:install-file -Dfile=D:\AliyunDependency\taobao-sdk-java-auto_1479188381469-20210927.jar -DgroupId=com.taobao -DartifactId=taobao-sdk-java-auto -Dversion=20210927 -Dpackaging=jar
    
    mvn install:install-file -Dfile=D:\AliyunDependency\taobao-sdk-java-auto_1479188381469-20210927-source.jar -DgroupId=com.taobao -DartifactId=taobao-sdk-java-auto-source -Dversion=20210927 -Dpackaging=jar

    4.2.2安装后 项目引用

    <dependency>
        <groupId>com.taobao</groupId>
        <artifactId>taobao-sdk-java-auto</artifactId>
        <version>20210927</version>
    </dependency>
    <dependency>
        <groupId>com.taobao</groupId>
        <artifactId>taobao-sdk-java-auto-source</artifactId>
        <version>20210927</version>
    </dependency>

    5.代码

    import cn.hutool.core.date.DateUtil;
    import cn.hutool.core.util.ObjectUtil;
    import cn.hutool.core.util.StrUtil;
    import com.dingtalk.api.DefaultDingTalkClient;
    import com.dingtalk.api.DingTalkClient;
    import com.dingtalk.api.request.OapiGettokenRequest;
    import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
    import com.dingtalk.api.request.OapiMessageCorpconversationGetsendresultRequest;
    import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
    import com.dingtalk.api.response.OapiGettokenResponse;
    import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
    import com.dingtalk.api.response.OapiMessageCorpconversationGetsendresultResponse;
    import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
    import com.taobao.api.ApiException;
    import com.taobao.api.TaobaoRequest;
    import com.taobao.api.TaobaoResponse;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    @EnableAutoConfiguration
    class ReptileTests {
    
        /**
         * 企业Id
         */
        private static final String corpId = "xxxx";
        /**
         * AgentId
         */
        private static final Long agentId = 1L;
        /**
         * app_key
         */
        private static final String appKey = "xx";
        /**
         * AppSecret
         */
        private static final String appSecret = "xx";
    
        @Test
        void dingding() throws Exception {
            // 1. 获取accessToken
            String accessToken = this.getAccessToken();
            // 2. 获取userid
            String userByMobile = this.getUserByMobile(accessToken, "13928776144");
            // 3. 发送消息
            Long taskId = this.send(accessToken, userByMobile);
            // 4. 获取通知结果
            this.getSendResult(accessToken, taskId);
        }
    
        /**
         * getAccessToken   获取token
         *
         * @return java.lang.String
         * @date 2021/10/11 9:45
         */
        public String getAccessToken() throws Exception {
            OapiGettokenRequest request = new OapiGettokenRequest();
            // 应用app_key
            request.setAppkey(appKey);
            // 应用app_secret
            request.setAppsecret(appSecret);
            // 请求方式 get
            request.setHttpMethod("GET");
            // 发送请求
            OapiGettokenResponse response = (OapiGettokenResponse)
                    getResponse("https://oapi.dingtalk.com/gettoken", request, null);
            // 判空
            isEmpty(response, new Exception().getStackTrace()[0].getMethodName());
    
            return response.getAccessToken();
        }
    
    
        /**
         * 根据手机号获取用户id
         *
         * @param accessToken token
         * @param mobile      手机号
         * @return java.lang.String
         * @date 2021/10/11 10:08
         */
        public String getUserByMobile(String accessToken, String mobile) throws Exception {
            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
            // 手机号码
            req.setMobile(mobile);
            OapiV2UserGetbymobileResponse rsp = (OapiV2UserGetbymobileResponse)
                    getResponse("https://oapi.dingtalk.com/topapi/v2/user/getbymobile", req, accessToken);
            isEmpty(rsp, new Exception().getStackTrace()[0].getMethodName());
            System.out.println(rsp.getBody());
            return rsp.getResult().getUserid();
        }
    
    
        /**
         * 发送消息
         *
         * @param accessToken token
         * @param userIds     用户id  多个用户 逗号拼接  :   "139xxxxx , 135xxxxx"
         * @return java.lang.String
         * @date 2021/10/11 11:43
         */
        public Long send(String accessToken, String userIds) throws Exception {
            OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
            request.setAgentId(agentId);
            request.setUseridList(userIds);
            request.setToAllUser(false);
    
            OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
            msg.setMsgtype("text");
            msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
            msg.getText().setContent("今天测试成功");
            request.setMsg(msg);
    
            msg.setMsgtype("image");
            msg.setImage(new OapiMessageCorpconversationAsyncsendV2Request.Image());
            msg.getImage().setMediaId("@lADOdvRYes0CbM0CbA");
            request.setMsg(msg);
    
            msg.setMsgtype("file");
            msg.setFile(new OapiMessageCorpconversationAsyncsendV2Request.File());
            msg.getFile().setMediaId("@lADOdvRYes0CbM0CbA");
            request.setMsg(msg);
    
            msg.setMsgtype("link");
            msg.setLink(new OapiMessageCorpconversationAsyncsendV2Request.Link());
            msg.getLink().setTitle("test");
            msg.getLink().setText("test");
            msg.getLink().setMessageUrl("test");
            msg.getLink().setPicUrl("test");
            request.setMsg(msg);
    
            msg.setMsgtype("markdown");
            msg.setMarkdown(new OapiMessageCorpconversationAsyncsendV2Request.Markdown());
            msg.getMarkdown().setText("##### text");
            msg.getMarkdown().setTitle("### Title");
            request.setMsg(msg);
    
            msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
            msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
            msg.getOa().getHead().setText("head");
            msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
            msg.getOa().getBody().setContent("xxx");
            msg.setMsgtype("oa");
            request.setMsg(msg);
    
            msg.setActionCard(new OapiMessageCorpconversationAsyncsendV2Request.ActionCard());
            msg.getActionCard().setTitle(DateUtil.now() + "发送测试消息");
            msg.getActionCard().setMarkdown("### 测试123111");
            msg.getActionCard().setSingleTitle("测试测试");
            msg.getActionCard().setSingleUrl("http://airsky.vicp.io:20408/fantas/web/#/");
            msg.setMsgtype("action_card");
            request.setMsg(msg);
    
            OapiMessageCorpconversationAsyncsendV2Response rsp = (OapiMessageCorpconversationAsyncsendV2Response)
                    getResponse("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2", request, accessToken);
            isEmpty(rsp, new Exception().getStackTrace()[0].getMethodName());
            System.out.println(rsp.getBody());
            return rsp.getTaskId();
        }
    
        /**
         * 获取发送结果
         *
         * @param accessToken token
         * @param taskId      任务id
         * @return com.dingtalk.api.response.OapiMessageCorpconversationGetsendresultResponse.AsyncSendResult
         * @date 2021/10/11 14:47
         */
        public OapiMessageCorpconversationGetsendresultResponse.AsyncSendResult getSendResult(String accessToken,
                                                                                              Long taskId
        ) throws Exception {
            OapiMessageCorpconversationGetsendresultRequest request = new OapiMessageCorpconversationGetsendresultRequest();
            request.setAgentId(agentId);
            request.setTaskId(taskId);
            OapiMessageCorpconversationGetsendresultResponse rsp = (OapiMessageCorpconversationGetsendresultResponse)
                    getResponse("https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult", request, accessToken);
            isEmpty(rsp, new Exception().getStackTrace()[0].getMethodName());
            System.out.println(rsp.getBody());
            return rsp.getSendResult();
        }
    
        /**
         * 发送请求 获取返回
         *
         * @param url         请求地址
         * @param request     请求
         * @param accessToken token
         * @return java.lang.Object
         * @date 2021/10/11 9:49
         */
        private static Object getResponse(String url, TaobaoRequest request, String accessToken) {
            try {
                // 1. 构建钉钉http请求连接
                DingTalkClient client = new DefaultDingTalkClient(url);
                // 2. 发送请求
                if (StrUtil.isNotBlank(accessToken)) {
    
                    return client.execute(request, accessToken);
                } else {
                    return client.execute(request);
                }
            } catch (ApiException e) {
                System.out.println("钉钉请求异常");
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 判空 & 错误
         *
         * @param response   返回
         * @param methodName 方法名
         * @date 2021/10/11 10:50
         */
        private static void isEmpty(TaobaoResponse response, String methodName) throws Exception {
            // System.out.println(response.getBody());
            // 1. 判空
            if (ObjectUtil.isNotNull(response)) {
                // 2. 判错误
                if (!response.isSuccess()) {
                    throw new Exception(response.getBody());
                }
            } else {
                throw new Exception("系统请求钉钉" + methodName + "请求返回为null");
            }
        }
    }

    展开全文
  • 一、参考官方文档 ... 二、划线部分是要改的地方,这个路径指的是开发者后台配置的地址 三、然后改造路径,使它能带参数,正常路径打个问号后面拼接参数,对路径unicode转码 c#转码方式 ... //url编码
  • 钉钉微应用PC端开发

    千次阅读 2019-05-08 19:22:12
    钉钉微应用PC端踩得坑一 作为一个开发过钉钉E应用的人来说 开发PC端真是恶心他妈抱着恶心哭了,猝不及防的就会给你一个大水泡子 在开发之前一定要有PC端开发工具 找半天都没找到,最后咨询了钉钉的技术支持 才给了我一...
  • 钉钉微应用开发

    2021-02-23 18:12:08
    基于钉钉微应用开发的实验室绩效管理系统,实现实验室的绩效、学分、论文评审管理与钉钉对接。 主要功能有:绩效、学分申请与审核,论文评审投票及学分管理,项目开发学分管理,实验室助研金计算等。 涉及的技术...
  • 钉钉小程序 和 钉钉微应用区别

    千次阅读 2020-10-22 16:21:39
    前沿:钉钉小程序、...钉钉小程序和钉钉H5微应用区别 小程序 H5微应用 加载性能 首次使用略慢,后续加载快 受到很多因素影响,优化不够好,容易慢 使用体验 非常顺滑,接近 Native 容易卡顿 ...
  • 钉钉微应用分享功能

    2020-06-24 16:58:53
     //判断是不是钉钉  var ua = navigator.userAgent.toLowerCase();  return ua.indexOf("dingtalk") >= 0; }; if (isdingding()){ // 右侧导航点击 dd.biz.navigation.setRight({ show: true, //控制...
  • 钉钉微应用 前端

    2021-01-05 22:47:21
    基于钉钉微应用开发的实验室绩效管理系统,实现实验室的绩效、学分、论文评审管理与钉钉对接。 主要功能有:绩效、学分申请与审核,论文评审投票及学分管理,项目开发学分管理,实验室助研金计算等。 ...
  • vue 钉钉微应用的正确打开方式

    万次阅读 2018-07-23 16:31:46
    使用vue开发钉钉微应用,下载钉钉开放平台官网提供的demo(vue-fed-oapage+nodejs-server-todo),地址:https://github.com/open-dingtalk/which-language-demo,会出现不能发送网络请求、页面空白等问题。需要解决...
  • 真机调试钉钉微应用步骤

    千次阅读 2019-10-18 13:51:30
    1、下载Andorid开发版钉钉,http://download.alicdn.com/wireless/dingtalk/4.6.20.2-93006-0/10002068@dingding-dev.apk 2、打开并登陆钉钉; 3、将本地项目跑起来,npm run start 4、cmd — ipconfig 查看本机...
  • 场景:从Controller方法跳转至 跳转页面,在跳转页面获取临时免登授权码,再跳入主页,从主页点击返回直接退出当前页。 跳转页面代码: <!DOCTYPE html> <html lang="en">.../sc
  • IOS钉钉微应用文件上传OSS失败

    千次阅读 2019-11-21 16:11:09
      H5开发微应用时,Android、PC端使用OSS都可以正常上传文件,IOS在Safari浏览器和微信浏览器中也可以正常上传,但是在IOS钉钉微应用中上传文件失败。   通过寻求钉钉技术协助反馈,参考:...
  • 钉钉微应用发送消息

    2019-01-07 11:26:00
    微应用就是网站,钉钉自带的E应用难用,而且前端UI都不是很好,所以倾向使用网站来开发 string UrlUserID = "https://oapi.dingtalk.com/message/send?access_token=" + token; //获取自己的Token ...
  • 首先在钉钉中注册一个企业,创建一个新应用,如下: 点击应用即可进入到应用详情页 最至关重要的两点:开发管理、权限管理 应用首页地址:即本地IP+?corpid=$CORPID$,携带 ?问号 corpid=CORPIDCORPIDCORPID在...
  • 阿里钉钉微应用开发 从事ERP管理开发十年工作经验,了解熟悉企业日常生产管理...
  • 钉钉微应用内置浏览器js缓存清理

    千次阅读 2020-05-13 09:40:21
    html中引用的js文件加上版本号,如下:
  • <p>vue项目,开发移动端专有钉钉微应用,目前按照api中路由跳转添加 <code>/test?dd_orientation=landscape</code></pre> 但是无效,求解</p>
  • 在这里我是把钉钉授权放在了一个单独的文件里(utils/authorization.js)下。 首先我们要明白为什么要授权? 因为我们需要调用钉钉业务相关的一些jsapi,需要做一个鉴权,这样才可以使用,但是钉钉提供的jsapi有很多...
  • 钉钉微应用上传文件的坑

    千次阅读 热门讨论 2020-04-07 15:43:34
    input file正常用!!!!!!!!!!!!
  • 最近有个需求,要把之前做的一套H5应用放在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去H5系统直接登陆。请教C#代码,谢谢!
  • 钉钉微应用接入

    千次阅读 2019-05-23 08:39:43
    JSAPI为微应用提供调用原生控件的能力,帮助开发者高效使用拍照、定位等手机系统的能力,同时可以直接使用扫一扫、分享、钉盘等钉钉特有的能力,带给微应用接近原生代码的体验。此文档面向开发者介绍钉钉JSAPI如何...
  • 如线上应用使用本工具造成稳定性问题,后果由自己承担。如使用本工具传播违法不良信息,钉钉将追究法律责任。 内网穿透示意图 场景介绍 案例一:ISV三方企业小程序的回调地址必须是公网域名或IP,对于大部分...
  • 钉钉微应用的免登录(前后端)

    千次阅读 2019-05-15 17:06:29
    最近做了个钉钉企业内部微应用的项目。记录下自己的心得。 首先根据官方文档明白免登流程 但是,最近更新的开发者平台,已经不在提供corpSecret了,所以获取获取access_token就要获取获取appKey和appSecret,官方...
  • 钉钉微应用获取用户信息

    千次阅读 2019-12-20 15:19:17
    前言 最近有个需求,要把之前做的一套H5应用放在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份...创建微应用: 进入钉钉管理后台后可以进入 “企业应用-应用管理” 页面创建微应用。 需要填写应用Logo、应用名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,098
精华内容 839
关键字:

钉钉微应用