钉钉微应用踩坑记录

一、要解决的问题:

      钉钉微应用开发,应对未来可能的PC端使用场景:PC访问网页,工作台登陆后,通过钉钉服务端接口完成自身业务。

二、开发前准备:

       根据官方文档,钉钉微应用PC端开发和移动端开发已经统一,方便我们统一开发,两套使用。

       前端调用钉钉API可在页面引入对应js文件:

       为什么引入鉴权(dd.config)?——钉钉业务相关JSAPI必须鉴权,手机原生功能可不用鉴权,在dd.ready内执行即可。目前支持的JSAPI功能展示可参见https://wsdebug.dingtalk.com/。

        鉴权原理:

钉钉微应用踩坑记录_第1张图片

1.在你的Web服务器端调用api,传入CorpId和CorpSecret,获取accessToken,即访问令牌。

2.在服务器端调用api,传入accessToken,获取JsApiTicket,即JsApi的访问许可(门票)。

3.按照既定规则,在后台由JsApiTicket、NonceStr、Timestamp、本页面Url生成字符串,计算SHA1消息摘要,即签名Signature。

4.将AgentId、CorpId、Timestamp、NonceStr、Signature等参数传递到前台,在前台调用api,得到authCode,即授权码。

5.根据授权码,在前台或后台调用api,获得userId,进而再根据userId,调用api获取用户详细信息。

补充几点:

1.accessToken通过下图的接口获取,钉钉有形形色色的token。

钉钉微应用踩坑记录_第2张图片

根据应用id和应用密码得到的访问令牌:

钉钉微应用踩坑记录_第3张图片

用上述token获取的sns访问令牌:

钉钉微应用踩坑记录_第4张图片

扫码免登token:(钉钉扫码门禁)

钉钉微应用踩坑记录_第5张图片

2.    nonceStr自定义,时间戳timestamp为服务器时间(可以理解为sign()方法调用当时的系统时间与1970年1月1日差值的秒数,为长整型,前后台应一致)。

钉钉微应用踩坑记录_第6张图片

3.   sign方法,在https://debug.dingtalk.com/可以把参数传过去,验证方法获得的sign是不是正确。在调试的时候报52011错误,一度发现不了问题,后来用此法排除了是不是sign方法写错的怀疑。

钉钉微应用踩坑记录_第7张图片

方法论:

后端代码:

钉钉微应用踩坑记录_第8张图片

前端代码:

钉钉微应用踩坑记录_第9张图片

dd.error方法在调试的时候很有用,我按这个步骤完成后,访问目标页面一直提示52011,查看官方文档和网上说明,基本是按照下边截图筛查:

钉钉微应用踩坑记录_第10张图片

按此步骤筛查无误,后来又用https://debug.dingtalk.com/来确定了jsapi_ticket和sign值均正确,且没有别的服务同时获取jsapi_ticket,前前后后代码看了个遍,也没找到问题所在。后来在一个帖子的某一个人的回复里边看到一句话:

我试了试,改了这个地方:

钉钉微应用踩坑记录_第11张图片

右图是官方实例,估摸是哪个配置代码程序员眼花了,没完全按驼峰写。要不是找到这帖子一楼一楼看,生找bug谁能发现…这也是企业自建服务窗微应用独有的问题,e应用貌似没问题。

至此问题解决。

钉钉微应用踩坑记录_第12张图片

你可能感兴趣的:(钉钉微应用踩坑记录)