前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了。于是乎,用友T+的版本来了,对接的工作自然是我来做,可没想到就是这样一个T+接口,搞得我快吐血了。

1.先简单描述下项目的运行环境,.net core 2.2。这也是导致后来一直卡在接口对接上的一大原因。接口不太支持.net core的运行环境。因为自己之前也处理过财务接口,金蝶K3,KIS账务平台,K3wise,U8Cloud等等,说实话,T+还是第一次接触,当然第一件事肯定是看官方文档了。直通车T+开发平台,不过打开之后,浏览器一直在刷新页面,后来问了社区的服务人员人家说换个浏览器试试,换了T+的浏览器,结果还是一直刷新,到底是啥问题,咱也不知道,咱也不敢问,后来在官网的文档中给了解释,说是最好使用IE和360浏览器,估计是客户使用的比较多吧,所以才不兼容主流的Google浏览器嘛?

2.OK,那么首要任务就是先熟悉接口定义以及相关的请求方式和请求参数等等,当然返回参数也是需要的。接着就开始将接口封装到项目中了,T+ OpenAPI v2 接口需要引入鉴权机制,简单的来说就是需要在每次请求业务接口时,请求的Header需要带上Authorization参数,那么Authorization怎么来获取呢?见下图,即 对appKey,authInfo,orgId做base64位的加密。那么authInfo的值又如何获取呢?请看官方文档的注释,即 对 appkey,orgid,appsecret这三个参数做一次签名算法,那么还有两个问题需要解决。第一,这三个参数怎么获取?ISV申请 http://tplusdev.chanjet.com/enterprise 官网注册后会有ISV的申请,点击申请填写好资料后系统会有人员审核资质并发放具体的加密密钥。好了,第一个问题解决了,那么第二个问题呢?签名算法怎么做。不要着急,官网也有提供,这里仅标注C#版本,因为使用的环境是.net 的 签名1的下载地址签名1下载。

签名算法1

3.OK,我们接着往下看,如果上一步的工作都做完并且正常返回 {"result":true,"access_token":"03e74889-1457-48cd-970a-ba3742ffcdea","sid":""} 的信息时,不要高兴的太早,我当时也以为接口调用成功了,没想到啊,还是太年轻。还有接着的业务调用需要用到上一步请求到的access_token。请求方式,如下图官网给的注释一样,只不过在做authInfo的值处理时,需要添加第一步获取到的access_token的值同时做签名2的处理。签名2地址下载。不过官网给的还有对应的winForm demo大家可以下载后,根据自己的参数做出修改,并且可以在线调试,还是比较方便的,比较容易定位到问题。T+OpenAPI测试工具(包含v2版本).zip(C#).

签名算法2

4.好了,坑终于来了,下载完demo后,将demo中用到的dll拷贝到自己的项目中去。主要用到的dll 有这么多

dll引用

由于官网提供的版本是.NET Framework的版本,但是项目中的环境是.net core2.2,大家都知道,目前.net Framework的好多类库,在.net core 下是不支持的,比如接口中用到的jose-jwt.dll

遇到这种情况,我的第一反应是反编译,将dll反编译为工程文件,再引用到自己的项目中去。因为之前做金蝶K3Cloud的接口也是,提供的是framework的版本,当时也是搞了好久的接口,最后采用的反编译项目才搞定的。所以这次也是想着直接反编译项目试试,结果,自己还是太年轻。反编译的项目在.net core 下也不能用。怎么办呢,当然是问了,在社区发布问题,加QQ群,问群里的大佬,有用的回答寥寥无几,不过还是感谢群里的一个朋友,指出来是jwt的加密算法有问题,虽然最后我实在是找不到到底是加密算法哪的问题,问了他好几次,他也没有告诉我。不过还是谢谢他。

至于加密算法是哪的问题,最后我也找到了问题,不过解决办法却没有找到。反编译出来的加密算法,在执行到num=加密方法的时候,最后返回的num值不是0,所以到这一步总是会报错,至于为啥会报错,对不起,我到现在也没搞清楚,因为加密源码这块,实在是看不太懂。原谅本人经历太浅,技术太菜。。就这样,一个业务调用的接口,搞了我差不多一个星期的时间,无奈啊,还是没搞定,只好求助自己的技术老大了,也是自己的老师,非常感谢感谢。在他努力一天的结果下,终于把接口的第一步调通了,但是夜里接到他通知我接口搞定的微信后,我就睡不着了。一直在想,在希望业务调用的接口也能正常使用。怀着忐忑的心情,跑起来他给我的项目,哈,果然,控制台确实返回了结果,只不过是Token的获取结果。还不能确定第二步是否能用。

后续我将业务调用的代码添加上后,激动的按下了F5,结果还是不出所料,接口返回 提供的令牌信息不正确。。。这些天,我看这些个文字已经快看吐了。带着截图去群里问大佬,@大佬,结果没有人回复。哎,我也不知道为啥,问个问题也没回复的。没办法,接着调试呗。将老大给我的新封装的.net core 环境下的T+项目里的jose-jwt 添加到官网给的framework的winForm程序里去,这样调试,我就能快速找到问题所在,并且修正问题。皇天不负有心人啊,终于,感谢天,感谢地,再没出现 令我作呕的错误文字了。不由地心里好一阵激动。不容易啊,不容易。

jose-jwt源码签名加密

5.至此,终于是将T+的接口给搞定了,也不枉自己在这上面耽误这么多时间,感觉自己的头发又掉了好多。最后的最后,附上.net core 环境下T+的接口调用,给有需要的朋友,也免得大家入坑。Tplus.net core接口下载

总结一下,在处理接口问题的时候,其实最重要的还是要彻底理解接口的定义,然后做起来才能得心应手,不过,也很感谢这次经历,起码有了对接T+接口的经验,下次遇到同样的项目就可以直接使用了,也免去了后续的麻烦。也希望自己在以后的工作中能更加有经验。加油。

金蝶k3财务接口_记录用友T+接口对接的心酸历程相关推荐

  1. 记录用友T+接口对接的心酸历程

    前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了.于是乎,用友T+的版本来了,对接的工作自然是我来做,可没想到就是这样 ...

  2. 记录用友ERP二次开发全过程(转载)

    记录用友ERP二次开发全过程 以此为备忘录. 最好在机器上装好U8. 下一步把自定义权限及模块加入U8里,以方便外部程序调用,识别! function erpLogin:boolean; var lo ...

  3. postman调用webservice接口_【分享】关于接口对前后端和测试的意义

    1.什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互. 2.接口都有哪些类型? ...

  4. http接口_基于Python的HTTP接口自动化测试框架实现

    一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值 输出:XML文件 二.实现方法 1.选用Python脚本来驱动测试 2.采用Excel表格管理测试数 ...

  5. 显示器接口_显示器上的TypeC接口 可能绝大多数人都不知道这么大作用

    大多数的数码爱好者认识Type-C接口,估计都是从2015年的安卓手机开始的. 但估计不少用户不知道的是,电脑端的显示器上也有Type-C接口. 如果你是一个刚入门想买显示器的朋友,下面可以分别看看显 ...

  6. 显示器接口_显示器上的Type-C接口 可能绝大多数人都不知道这么大作用

    [PConline 杂谈]大多数的数码爱好者认识Type-C接口,估计都是从2015年的安卓手机开始的,但估计不少用户不知道的是,电脑端的显示器上也有Type-C接口,如果你是一个刚入门想买显示器的朋 ...

  7. 华为荣耀9显示无服务器,华为荣耀9是什么接口_华为荣耀9充电接口是什么-太平洋IT百科...

    华为荣耀9是什么接口?华为荣耀9充电接口是什么?从华为荣耀9上市以来这也是很多网友们比较关注的问题,接下来详细介绍华为荣耀9是什么接口? 华为荣耀9是什么接口?华为荣耀9充电接口是什么? 华为荣耀9是 ...

  8. kf真空接口_一种测试仪器真空接口转标准kf真空接口的转接头的制作方法

    一种测试仪器真空接口转标准kf真空接口的转接头的制作方法 [专利摘要]本实用新型涉及一种测试仪器真空接口转标准KF真空接口的转接头,包括接头.O型圈.螺钉,接头为不同内.外径的圆柱体,其一端内.外径与 ...

  9. 金蝶k3财务接口_金蝶云为企业成长而生,让工作更高效!

    业家才 能等) 金蝶云介绍 金蝶云是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台.金蝶云围绕着"生态.人人.体验",旨在帮助企业打造面向新时代的生 ...

最新文章

  1. TCP和UDP相关记录
  2. 猎八哥浅谈存储过程——数据库中的双刃剑
  3. 安卓APP_ 布局(6) —— ConstrainLayout约束布局(重要)
  4. 为SharePoint Services (SPS)设置文件图标
  5. oracle导出报错04063,Oracle EXP导出报错的解决方法
  6. WM6.5中隐藏和显示任务栏、命令栏及输入面板
  7. MacOS下安装Grafana、InfluxData、telegraf
  8. 如何在福昕阅读器上将 pdf 文档背景色改为绿豆沙
  9. ipv6-hosts
  10. java 无限循环语句_java学习之循环语句
  11. 人脸识别数据集和特点
  12. 90后美女学霸传奇人生:出身清华姚班,成斯坦福AI实验室负责人高徒
  13. Linux虚拟网络设备之bridge(桥)
  14. linux开发工具少_从设计到开发,我必不可少的10种工具
  15. CSMA/CD 简要介绍
  16. 论文|Jointly Pre-Training Transformers on Unpaired Images and Text
  17. DPDK Rx flexible descriptor在Intel E810网卡中的使用
  18. pandas dataframe drop函数
  19. 上海相会 | 冒志鸿与丁磊畅谈ArcBlock未来宏图
  20. 谈谈引用和Threadlocal的那些事

热门文章

  1. kudu : 扩容报错 Bad status: Not found: Unable to initialize catalog manager
  2. spark学习-41-Spark的块传输服务BlockTransferService
  3. Linux进程里运行新代码,linux调度器源码分析 - 新进程加入(三)
  4. 批处理框架 Spring Batch,数据迁移量过大如何保证内存?
  5. Kafka是什么、主要应用在什么场景?
  6. oracle中以dba_、user_、v$_、all_、session_、index_开头
  7. c语言中栈的作用,栈(Stack)的概念和应用及C语言实现
  8. 它在计算机房的旁边英文,计算机房设备搬迁协议 (中英文)
  9. 【Spring Bean的生命周期】
  10. Docker安装MongoDB管理工具nosqlclient