發(fā)布時(shí)間:2024-11-18 瀏覽:3218次
前言:公司的業(yè)務(wù)主要是對(duì)接財(cái)務(wù)系統(tǒng)做單據(jù)傳輸或者憑證處理的,難免少不了和各大財(cái)務(wù)軟件做數(shù)據(jù)對(duì)接,其中當(dāng)然是必須通過接口來傳遞數(shù)據(jù)了。于是乎,用友T+的版本來了,對(duì)接的工作自然是我來做,可沒想到就是這樣一個(gè)T+接口,搞得我快吐血了。
1.先簡單描述下項(xiàng)目的運(yùn)行環(huán)境,.net core 2.2。這也是導(dǎo)致后來一直卡在接口對(duì)接上的一大原因。接口不太支持.net core的運(yùn)行環(huán)境。因?yàn)樽约褐耙蔡幚磉^財(cái)務(wù)接口,金蝶K3,KIS賬務(wù)平臺(tái),K3wise,U8Cloud等等,說實(shí)話,T+還是第一次接觸,當(dāng)然第一件事肯定是看官方文檔了。不過打開之后,瀏覽器一直在刷新頁面,后來問了社區(qū)的服務(wù)人員人家說換個(gè)瀏覽器試試,換了T+的瀏覽器,結(jié)果還是一直刷新,到底是啥問題,咱也不知道,咱也不敢問??,后來在官網(wǎng)的文檔中給了解釋,說是最好使用IE和360瀏覽器,估計(jì)是客戶使用的比較多吧,所以才不兼容主流的Google瀏覽器嘛?
2.OK,那么首要任務(wù)就是先熟悉接口定義以及相關(guān)的請(qǐng)求方式和請(qǐng)求參數(shù)等等,當(dāng)然返回參數(shù)也是需要的。接著就開始將接口封裝到項(xiàng)目中了,T+ OpenAPI v2 接口需要引入鑒權(quán)機(jī)制,簡單的來說就是需要在每次請(qǐng)求業(yè)務(wù)接口時(shí),請(qǐng)求的Header需要帶上Authorization參數(shù),那么Authorization怎么來獲取呢?見下圖,即 對(duì)appKey,authInfo,orgId做base64位的加密。那么authInfo的值又如何獲取呢?
請(qǐng)看官方文檔的注釋,即 對(duì) appkey,orgid,appsecret這三個(gè)參數(shù)做一次簽名算法,那么還有兩個(gè)問題需要解決。第一,這三個(gè)參數(shù)怎么獲?ISV申請(qǐng) http://tplusdev.chanjet.com/enterprise 官網(wǎng)注冊(cè)后會(huì)有ISV的申請(qǐng),點(diǎn)擊申請(qǐng)?zhí)顚懞觅Y料后系統(tǒng)會(huì)有人員審核資質(zhì)并發(fā)放具體的加密密鑰。好了,第一個(gè)問題解決了,那么第二個(gè)問題呢?簽名算法怎么做。不要著急,官網(wǎng)也有提供,這里僅標(biāo)注C#版本,因?yàn)槭褂玫沫h(huán)境是.net 的
3.OK,我們接著往下看,如果上一步的工作都做完并且正常返回 {"result":true,"access_token":"03e74889-1457-48cd-970a-ba3742ffcdea","sid":""} 的信息時(shí),不要高興的太早,我當(dāng)時(shí)也以為接口調(diào)用成功了,沒想到啊,還是太年輕。還有接著的業(yè)務(wù)調(diào)用需要用到上一步請(qǐng)求到的access_token。請(qǐng)求方式,如下圖官網(wǎng)給的注釋一樣,只不過在做authInfo的值處理時(shí),需要添加第一步獲取到的access_token的值同時(shí)做簽名2的處理。不過官網(wǎng)給的還有對(duì)應(yīng)的winForm demo大家可以下載后,根據(jù)自己的參數(shù)做出修改,并且可以在線調(diào)試,還是比較方便的,比較容易定位到問題。T+OpenAPI測(cè)試工具(包含v2版本).zip(C#) .
4.好了,坑終于來了,下載完demo后,將demo中用到的dll拷貝到自己的項(xiàng)目中去。主要用到的dll 有這么多
由于官網(wǎng)提供的版本是.NET Framework的版本,但是項(xiàng)目中的環(huán)境是.net core2.2,大家都知道,目前.net Framework的好多類庫,在.net core 下是不支持的,比如接口中用到的jose-jwt.dll
遇到這種情況,我的第一反應(yīng)是反編譯,將dll反編譯為工程文件,再引用到自己的項(xiàng)目中去。因?yàn)橹白鼋鸬鸎3Cloud的接口也是,提供的是framework的版本,當(dāng)時(shí)也是搞了好久的接口,最后采用的反編譯項(xiàng)目才搞定的。所以這次也是想著直接反編譯項(xiàng)目試試,結(jié)果,自己還是太年輕。反編譯的項(xiàng)目在.net core 下也不能用。怎么辦呢,當(dāng)然是問了,在社區(qū)發(fā)布問題,加QQ群,問群里的大佬,有用的回答寥寥無幾,不過還是感謝群里的一個(gè)朋友,指出來是jwt的加密算法有問題,雖然最后我實(shí)在是找不到到底是加密算法哪的問題,問了他好幾次,他也沒有告訴我。
至于加密算法是哪的問題,最后我也找到了問題,不過解決辦法卻沒有找到。反編譯出來的加密算法,在執(zhí)行到num=加密方法的時(shí)候,最后返回的num值不是0,所以到這一步總是會(huì)報(bào)錯(cuò),至于為啥會(huì)報(bào)錯(cuò),對(duì)不起,我到現(xiàn)在也沒搞清楚,因?yàn)榧用茉创a這塊,實(shí)在是看不太懂。原諒本人經(jīng)歷太淺,技術(shù)太菜。??。就這樣,一個(gè)業(yè)務(wù)調(diào)用的接口,搞了我差不多一個(gè)星期的時(shí)間,無奈啊,還是沒搞定,只好求助自己的技術(shù)老大了,也是自己的老師,非常感謝感謝。在他努力一天的結(jié)果下,終于把接口的第一步調(diào)通了,但是夜里接到他通知我接口搞定的微信后,我就睡不著了。一直在想,在?希望業(yè)務(wù)調(diào)用的接口也能正常使用。懷著忐忑的心情,跑起來他給我的項(xiàng)目,哈,果然,控制臺(tái)確實(shí)返回了結(jié)果,只不過是Token的獲取結(jié)果。還不能確定第二步是否能用。
后續(xù)我將業(yè)務(wù)調(diào)用的代碼添加上后,激動(dòng)的按下了F5,結(jié)果還是不出所料,接口返回 提供的令牌信息不正確。。。這些天,我看這些個(gè)文字已經(jīng)快看吐了。帶著截圖去群里問大佬,@大佬,結(jié)果沒有人回復(fù)。哎,我也不知道為啥,問個(gè)問題也沒回復(fù)的。沒辦法,接著調(diào)試唄。將老大給我的新封裝的.net core 環(huán)境下的T+項(xiàng)目里的jose-jwt 添加到官網(wǎng)給的framework的winForm程序里去,這樣調(diào)試,我就能快速找到問題所在,并且修正問題;侍觳回(fù)有心人啊,終于,感謝天,感謝地,再?zèng)]出現(xiàn) 令我作嘔的錯(cuò)誤文字了。不由地心里好一陣激動(dòng)。不容易啊,不容易。
5.至此,終于是將T+的接口給搞定了,也不枉自己在這上面耽誤這么多時(shí)間,感覺自己的頭發(fā)又掉了好多。最后的最后,附上.net core 環(huán)境下T+的接口調(diào)用,給有需要的朋友,也免得大家入坑。
總結(jié)一下,在處理接口問題的時(shí)候,其實(shí)最重要的還是要徹底理解接口的定義,然后做起來才能得心應(yīng)手,不過,也很感謝這次經(jīng)歷,起碼有了對(duì)接T+接口的經(jīng)驗(yàn),下次遇到同樣的項(xiàng)目就可以直接使用了,也免去了后續(xù)的麻煩。也希望自己在以后的工作中能更加有經(jīng)驗(yàn)。加油。
客服電話:400-665-0028
用友好會(huì)計(jì)、用友易代賬、用友好業(yè)財(cái)、用友好生意、用友T+Cloud試用地址__用友暢捷通公司網(wǎng)站
關(guān)鍵字:用友軟件,暢捷通軟件,財(cái)務(wù)軟件,進(jìn)銷存軟件,U9官網(wǎng),用友U8,用友T1,用友T+,用友T3,用友T6,暢捷通好會(huì)計(jì),好生意,好業(yè)財(cái),用友培訓(xùn)服務(wù)售后公司,暢捷通運(yùn)營培訓(xùn)服務(wù)公司