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

前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了。于是乎,用友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下载。

640?wx_fmt=png

签名算法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#) .

640?wx_fmt=png

签名算法2


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

640?wx_fmt=png

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程序里去,这样调试,我就能快速找到问题所在,并且修正问题。皇天不负有心人啊,终于,感谢天,感谢地,再没出现 令我作呕的错误文字了。不由地心里好一阵激动。不容易啊,不容易。

640?wx_fmt=png

jose-jwt源码签名加密


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

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

原文链接:https://www.cnblogs.com/wnxyz8023/p/11309300.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集群故障处理之处理思路以及听诊三板斧(三十四)

前言 本篇主要分享一些处理故障和问题绝招,比如听诊三板斧:1)查看日志2)查看资源详情和事件3)查看资源配置(YAML)如果还是不太好分析,那就祭出神器——kubectl-debug。最后&…

selenium搜狗搜图简单操作(爬取任意关键字的图片)

Picture preview Steps 这里以搜狗搜图作为一个简单的例子: 第一步就是获取我们的需求了,输入需要下载的图片名字以及需要下载的图片数量。 接下来我们需要在搜狗搜图中输入用户的需求,透过xpathxpathxpath锁定搜索框,然后输入…

Microsoft REST API指南

经过3个月的碎片时间的翻译和校验,由长沙.NET技术社区翻译的英文原文文档《Microsoft REST API指南 》已经翻译完成,现刊载前十一章如下,欢迎大家点击“查看原文”按钮,查看指南的完整内容。PS:内容很长,全…

如何优雅地替换一个实现

前两天,我所在的项目有一个小的技术改动,打算把访问Redis的密码从数据库挪到配置文件里。以前的代码类似下面这样:用户第一次调用GetDatabase时,根据传入的数据库连接字符串访问数据库,从某个表里取出带密码的Redis连接…

莫队——三种题型

普通莫队 P3901 数列找不同 Thinking 一定是用可以用莫队来写题&#xff0c;这点是不用质疑的&#xff0c;所以那就简单了&#xff0c;只需要判断每次询问的区间是否满足r−l1numr - l 1 numr−l1num就行了。 Coding1Coding_1Coding1​ 莫队写法 #include <bits/stdc…

P5357 【模板】AC自动机(二次加强版) fail树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 这个只能搞failfailfail树了&#xff0c;让后跑一遍即可。 重复的字符串记一个&#xff0c;让后其他的都跟他一个答案即可。 // Problem: P3796 【模板】AC自动机&#xff08;加强版&…

10分钟了解一致性hash算法

应用场景当我们的数据表超过500万条或更多时&#xff0c;我们就会考虑到采用分库分表&#xff1b;当我们的系统使用了一台缓存服务器还是不能满足的时候&#xff0c;我们会使用多台缓存服务器&#xff0c;那我们如何去访问背后的库表或缓存服务器呢&#xff0c;我们肯定不会使用…

创业周年记:召唤神龙一周年小记

2018年8月8日&#xff0c;我决定离开腾讯的光环&#xff0c;辞职开始创业。《回顾4180天在腾讯使用C#的历程&#xff0c;开启新的征途》记录了我所说的拥有七龙珠&#xff0c;去召唤神龙&#xff0c;今天正好历时一年时间&#xff0c;非常有必要来回顾过去一年的创业历程。迎接…

「数据ETL」从数据民工到数据白领蜕变之旅(三)-除了Excel催化剂之外PowerQuery新物种同样值得期待...

在自助式BI时代以前&#xff0c;Excel级别的数据ETL工作&#xff0c;非常低效&#xff0c;动不动就要启用VBA来完成一些常见的需求&#xff0c;自带的原生功能&#xff0c;未能满足大量的繁琐数据ETL刚需功能。在Excel2010后&#xff0c;PowerQuery以插件的形式横空出现&#x…

Docker系列之烹饪披萨(二)

上一篇我们讲解了虚拟机和容器的区别&#xff0c;本节我们来讲讲Docker中关于Dockerfile、镜像、容器等基本概念。Docker是一个在容器内开发、部署、运行应用程序的平台&#xff0c;Docker本质上是容器化的代名词&#xff0c;容器对于提高软件开发和数据科学的安全性&#xff0…

史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究 –Amazon持续交付之道战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会&#xff0c;及本公众号。&#xff09;本案例内容贡献者&#xff1a;单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

ASP.NET Core on K8S深入学习(3)Deployment

上一篇《部署过程解析与安装Dashboard》中我们了解K8S的部署过程&#xff0c;这一篇我们来了解一下K8S为我们提供的几种应用运行方式&#xff1a;Deployment、DaemonSet与Job&#xff0c;它们是Kubernetes最重要的核心功能提供者。考虑到篇幅和更新速度&#xff0c;我将其分为两…

8月语言排行:C#继续呈现增长态势

TIOBE 编程语言排行榜 8 月更新已公布&#xff0c;排名前十的分别是&#xff1a;Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, Objective-C 和 SQL。和上个月唯一的不同之处在于 Objective-C 和 SQL 的排名发生了交换。事实上&#xff0c;上周 Dice Insights …

面试必谈的哈希,.Net 程序员温故而知新

引言&#xff1a;作为资深老鸟&#xff0c;有事没事&#xff0c;出去面试&#xff1b;找准差距、定位价值。面试必谈哈希&#xff0c;Q1&#xff1a;什么是哈希?Q2&#xff1a;哈希为什么快?Q3&#xff1a;你是怎么理解哈希算法利用空间换取时间的&#xff1f;Q4&#xff1a;…

Grpc Proto To Nuget Package 插件使用说明

Grpc Proto To Nuget Package 是一个 VS 插件&#xff08;支持 VS2019&#xff09;&#xff0c;目的是将基于 gRPC 的接口定义 .proto 文件一键转成 Nuget Package&#xff0c;然后发布到私有仓库上。下载最新 GrpcProtoToNugetPackageTemplate.zip ASP.NET 的项目模板&#xf…

.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

.NET Core 3.0 Preview 7现已推出&#xff0c;它包含一系列ASP.NET Core和Blazor的新更新。以下是此预览中的新功能列表&#xff1a;最新的Visual Studio预览包括.NET Core 3.0作为默认运行时Visual Studio中的顶级ASP.NET核心模板简化的网页模板组件的属性splattingTypeConver…

你必须知道的Docker数据卷

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff08;微信上暂无法访问&#xff0c;可以通过cnblogs博客园访问&#xff09;&#xff0c;可以点击查看更多容器化技术相关系列文章。本篇预计阅读时间为5分钟。01—Docker数据挂载到容器在Docker中&#xff0c;要想实…

牛客小白月赛11:Rinne Loves Data Structure

Rinne Loves Data Structure 思路 我们插入的位置大概分了四种&#xff1a; 第一种 显然我们找到比当前插入的值的pre&#xff0c;也就是比当前节点大的最小值。 第二种 我们只要找到当前节点的suc&#xff0c;也就是比当前节点小的&#xff0c;最大值。 第三种 我们只…

VS Code 1.37 发布!多达数十个图标迎来全新设计

今天&#xff08;北京时间 2019 年 8 月 9 日&#xff09;&#xff0c;微软发布了 Visual Studio Code 1.37 版本。此版本主要更新的内容包括&#xff1a;Full product icon refresh - 多达数十个图标迎来全新的现代化设计Edit string arrays in the Settings UI - 在配置编辑器…

Serilog 自定义 Enricher 来增加记录的信息

Serilog 自定义 Enricher 来增加记录的信息IntroSerilog 是 .net 里面非常不错的记录日志的库&#xff0c;结构化日志记录&#xff0c;而且配置起来很方便&#xff0c;自定义扩展也很方便Serilog is a diagnostic logging library for .NET applications. It is easy to set up…