钉钉微应用的服务

摘要:钉钉企业微应用的基本接入罗列整理

先从如何接入钉钉微应用和获取免登码入手。

1,需要钉钉企业号,并创建钉钉企业

2,钉钉内创建一个微应用。

3,搭建自己的本地服务或者外网web服务

4,设置微应用的首页为本地服务的地址或者外网地址

5,引入钉钉提供的SDK

6,下载地址: https://github.com/ddtalk/client_sdk

        (1)后端:获取accesstoken 以及 js_ticket

                传入的参数就是新建企业是拿到的CorpId和CorpSecret

                

ServiceFactory serviceFactory = ServiceFactory.getInstance();
 CorpConnectionService corpConnectionService = serviceFactory.getOpenService(CorpConnectionService.class);
 accessToken = corpConnectionService.getCorpToken(CorpID,CorpSecret);

                获取到accesstoken之后 我们可以通过accesstoken拿到js_ticket

                

 ServiceFactory serviceFactory = ServiceFactory.getInstance();
 JsapiService jsapiService = serviceFactory.getOpenService(JsapiService.class);
 JsapiTicket jsapiTicket = jsapiService.getJsapiTicket(accessToken , "jsapi");
 JSTicket = jsapiTicket.getTicket(); 

                拿到js_ticket 我们就可获取到signature 签名信息

@RequestMapping("/get_js_config")
    @ResponseBody
    public Map<String,Object> getJsConfig(@RequestParam(value = "url" ,required = false) String url
            ,@RequestParam(value = "corpId",required = false) String corpId){
        String accessToken = authHelper.getAccessToken();
        String JSTicket = authHelper.getJSTicket(accessToken);

        String nonceStr = Utils.getRandomStr(8);
        Long  timeStamp = System.currentTimeMillis();

        try {
            String signature = DingTalkJsApiSingnature.getJsApiSingnature(url ,nonceStr ,timeStamp ,JSTicket);
            Map<String,Object> JsApiConfig = new HashMap<String,Object>();

            JsApiConfig.put("signature",signature);
            JsApiConfig.put("nonceStr",nonceStr);
            JsApiConfig.put("timeStamp",timeStamp);
            JsApiConfig.put("corpId",corpId);

            return JsApiConfig;
        } catch (Exception e) {
            e.printStackTrace();
            logger.info(" message ", e.getMessage());

        }

        return null;
    }

                参数URL 是我们前面设置的首页地址 CorpId是我新建企业可以拿到的

后端需要获取的参数以及获取完毕。


    (2).前端 通过后端传递到前端的参数 通过dd.config鉴权


前端处理的工作:

$(document).ready(function () {
        var url = window.location.href;
        console.log("url", url);
        var corpId = "xxxxxxxxxxxxxxxxxxxxxxxx";  // 企业的corpId
        var signature = "";
        var nonceStr = "";
        var timeStamp = "";
        var agentId = "";

        $.post(
            'get_js_config',
            {
                "url": url,
                "corpId": corpId
            },
            function (result) {
                console.log("result", result);
                signature = result.signature;
                nonceStr = result.nonceStr;
                timeStamp = result.timeStamp;
                agentId = result.agentId;
                corpId = result.corpId;

                dd.config({
                    agentId: agentId,
                    corpId: corpId,
                    timeStamp: timeStamp,
                    nonceStr: nonceStr,
                    signature: signature,
                    jsApiList: [
                        'runtime.info',
                        'biz.contact.choose',
                        'device.notification.confirm',
                        'device.notification.alert',
                        'device.notification.prompt',
                        'biz.ding.post',
                        'biz.util.openLink'] //必填,需要使用的jsapi列表
                });

                dd.ready(function () {
                        console.log('dd.ready rocks!')

                        dd.runtime.info({
                            onSuccess: function (info) {
                                console.log('runtime info: ' + JSON.stringify(info));
//                                alert(JSON.stringify(info));
                            },
                            onFail: function (err) {
                                console.log('fail: ' + JSON.stringify(err));
//                                alert(JSON.stringify(err));
                            }
                        });

                        dd.runtime.permission.requestAuthCode({
                            corpId: corpId, //企业id
                            onSuccess: function (info) {
                                console.log('authcode' + info.code);
//                                alert('authcode = '+info.code);
                                Window.authcode = info.code;   //免登授权码
                            },
                            onFail: function (err) {
                                console.log('requestAuthCode fail: ' + JSON.stringify(err));
//                                alert(JSON.stringify(err));
                            }
                        });
                    }
                );
            })
    });
         返回的结果 我们就可以拿到免登码 
拿到免登码 我们就可以通过免登码获取用户的信息。

猜你喜欢

转载自blog.csdn.net/qq_36205856/article/details/79960615