php網(wǎng)站集成支付寶接口微信支付V3sdk封裝了與業(yè)務(wù)錯(cuò)誤語義不一致的現(xiàn)象支付寶網(wǎng)站集成支付寶
2021-11-23
根據(jù)微信v3的接口文檔,我們知道微信支付返回業(yè)務(wù)錯(cuò)誤時(shí),會(huì)返回相應(yīng)的。當(dāng)狀態(tài)碼在[200,300)之間時(shí),認(rèn)為請(qǐng)求合法返回;當(dāng)大于300時(shí),判斷接口返回一定有異常錯(cuò)誤。微信支付V3 sdk封裝了和的相關(guān)處理。
在對(duì)外暴露http接口時(shí),在拋出業(yè)務(wù)錯(cuò)誤的同時(shí),也必須拋出同樣的語義,這就需要開發(fā)者搞清楚語義。這樣做的缺點(diǎn)是學(xué)習(xí)成本高,而且根據(jù)開發(fā)人員的熟練程度,可能會(huì)出現(xiàn)語義和業(yè)務(wù)錯(cuò)誤語義不一致的情況。
2. 支付寶錯(cuò)誤碼定義
參考鏈接:
不同服務(wù)的業(yè)務(wù)錯(cuò)誤代碼:舉一個(gè)接口的例子#%E4%B8%9A%E5%8A%A1%E9%94%99%E8%AF%AF%E7%A0%81
, 這兩個(gè)參數(shù)標(biāo)識(shí)支付寶返回的業(yè)務(wù)錯(cuò)誤代碼和業(yè)務(wù)錯(cuò)誤信息;
{"code":"",//網(wǎng)關(guān)返回碼"msg":"",//網(wǎng)關(guān)返回碼"":"ACQ.","":"無效參數(shù)"}
支付寶的錯(cuò)誤碼定義與微信支付v2界面定義風(fēng)格類似。
支付寶錯(cuò)誤碼結(jié)構(gòu)分為兩級(jí):第一級(jí):網(wǎng)關(guān),第二級(jí):業(yè)務(wù)錯(cuò)誤碼。
要請(qǐng)求支付寶接口,首先要通過支付寶網(wǎng)關(guān)系統(tǒng)。網(wǎng)關(guān)系統(tǒng)執(zhí)行簽名驗(yàn)證、加解密、流量控制等功能。如果發(fā)生網(wǎng)關(guān)驗(yàn)證錯(cuò)誤,則會(huì)拋出公共錯(cuò)誤代碼。網(wǎng)關(guān)驗(yàn)證成功后,交給下游業(yè)務(wù)系統(tǒng),并帶有清晰的語義錯(cuò)誤代碼和錯(cuò)誤描述。
3. API 規(guī)范
參考鏈接:%E9%94%99%E8%AF%AF.md
在錯(cuò)誤碼的定義中,返回碼的結(jié)構(gòu)定義為
{// 可以通過的代碼。// 代碼是由`.rpc.Code` 編寫的。代碼 = 1; // A--輸入。它 // 和它。= 2; // 代碼可用于 // 的php網(wǎng)站集成支付寶接口,例如或幫助鏈接。..任何= 3;}
其中code:是錯(cuò)誤代碼,而:是具體的錯(cuò)誤信息。根據(jù)錯(cuò)誤,建議調(diào)用方采取什么措施。
錯(cuò)誤碼的定義比較簡潔。一個(gè)代碼分配給一個(gè)主要類別;不為多個(gè)相似的錯(cuò)誤類型提供多個(gè)代碼。
規(guī)范中的信息:指明錯(cuò)誤的具體原因,定義參考:
定義該信息表示可以返回錯(cuò)誤碼進(jìn)行重試,并給出推薦的重試延遲時(shí)間,該信息表示配額錯(cuò)誤、超過限流等;可以詳細(xì)解釋為什么會(huì)報(bào)這個(gè)錯(cuò)誤等,等待開發(fā)者根據(jù)詳細(xì)的錯(cuò)誤返回碼做出正確的響應(yīng)。
4. 微博規(guī)范
參考接口:
{"": "http://.json", "": "", "": "需要 uid。"}
錯(cuò)誤碼的組成:1位錯(cuò)誤級(jí)別號(hào)(系統(tǒng)、服務(wù))+2位服務(wù)模塊(如網(wǎng)關(guān)、微博、評(píng)測(cè)、私信更像是服務(wù)標(biāo)識(shí))+2位錯(cuò)誤碼(自定義錯(cuò)誤碼)
服務(wù)級(jí)別錯(cuò)誤(1 是系統(tǒng)級(jí)別錯(cuò)誤)服務(wù)模塊代碼特定錯(cuò)誤代碼
微博的錯(cuò)誤代碼具有清晰的結(jié)構(gòu)和語義。服務(wù)系統(tǒng)標(biāo)識(shí)顯示在錯(cuò)誤代碼中。這個(gè)操作有點(diǎn)類似于支付寶錯(cuò)誤碼的組成。第一個(gè)數(shù)字標(biāo)識(shí)服務(wù)級(jí)別和系統(tǒng)級(jí)別字段。不知道是不是網(wǎng)關(guān)拋出的錯(cuò)誤,還是分類拋出了幾個(gè)系統(tǒng)級(jí)的錯(cuò)誤。
5.阿里巴巴的JAVA技術(shù)手冊(cè)
阿里巴巴規(guī)范
第一點(diǎn):解釋錯(cuò)誤碼的特點(diǎn):簡單明了;
第二點(diǎn):錯(cuò)誤碼最好定義為字符串類型:源+錯(cuò)誤號(hào)(這樣錯(cuò)誤碼的值可以攜帶更多的信息)
第三點(diǎn):避免隨意添加錯(cuò)誤代碼,避免直接將錯(cuò)誤代碼暴露給用戶端
綜上所述,從這些被調(diào)查企業(yè)的外部文件來看,業(yè)界并沒有統(tǒng)一的錯(cuò)誤代碼定義標(biāo)準(zhǔn)。但一般的設(shè)計(jì)思路如下:
一種。錯(cuò)誤碼類型為字符串類型
灣 如果系統(tǒng)由網(wǎng)關(guān)→內(nèi)部服務(wù)組成,錯(cuò)誤代碼分為兩級(jí)
C。錯(cuò)誤代碼可以識(shí)別引發(fā)錯(cuò)誤的源服務(wù)。
d. 錯(cuò)誤碼可以抽象出兩種常見的錯(cuò)誤碼和業(yè)務(wù)錯(cuò)誤碼
四、思考與結(jié)論
結(jié)合以上調(diào)查的行業(yè)錯(cuò)誤代碼定義和錢包??系統(tǒng)的現(xiàn)狀。由于支付系統(tǒng)處于整個(gè)業(yè)務(wù)流程的最基礎(chǔ)層,并提供支付、支付等RPC能力,因此不存在直接對(duì)外暴露http接口的可能。因此,微信支付和支付寶支付的三層錯(cuò)誤碼結(jié)構(gòu)不適合錢包系統(tǒng)。
基于以上調(diào)查的api,錯(cuò)誤碼定義為字符串類型,更適合業(yè)務(wù)場(chǎng)景,方便后期業(yè)務(wù)擴(kuò)展。規(guī)范中對(duì)錯(cuò)誤碼場(chǎng)景定義的統(tǒng)一規(guī)范,在一定程度上降低了開發(fā)者隨意定義新的錯(cuò)誤碼的可能性。所以在場(chǎng)景定義上參考-api規(guī)范
錯(cuò)誤代碼:字符串。前N位是當(dāng)前業(yè)務(wù)領(lǐng)域的標(biāo)識(shí)。優(yōu)點(diǎn):易于區(qū)分其他業(yè)務(wù)錯(cuò)誤代碼。如果由于業(yè)務(wù)擴(kuò)展或業(yè)務(wù)收縮導(dǎo)致業(yè)務(wù)拆分和合并php網(wǎng)站集成支付寶接口,錯(cuò)誤代碼仍可保持當(dāng)前設(shè)置。
提取常見的常見錯(cuò)誤:
參考采集規(guī)范:
RPC 接口常見錯(cuò)誤 內(nèi)部錯(cuò)誤 115 請(qǐng)求不被支持 112 狀態(tài)錯(cuò)誤 110 頻繁請(qǐng)求 109 無權(quán)限類型錯(cuò)誤 108 權(quán)限檢查錯(cuò)誤 107 現(xiàn)有類型錯(cuò)誤 106 不存在類型錯(cuò)誤 105 超時(shí)類型錯(cuò)誤 104 參數(shù)錯(cuò)誤 103 未知錯(cuò)誤
(比如調(diào)用下游接口出錯(cuò),可以拋出這個(gè)異常) 101
對(duì)于其他業(yè)務(wù)錯(cuò)誤代碼,可以使用200~999錯(cuò)誤段進(jìn)行自定義設(shè)置;但是如果有錯(cuò)誤語義碰到了上面的錯(cuò)誤小程序開發(fā),則需要先選擇上面的錯(cuò)誤代碼。
五、RPC 錯(cuò)誤代碼結(jié)構(gòu)定義
{1:; 2:;}
錯(cuò)誤代碼定義:
組成:業(yè)務(wù)+錯(cuò)誤代碼類型+自定義業(yè)務(wù)代碼;自定義業(yè)務(wù)代碼為系統(tǒng)自定義。
標(biāo)識(shí)服務(wù)錯(cuò)誤代碼的類型(3)自定義服務(wù)代碼(2)
參數(shù)驗(yàn)證失敗:{"":".", "":" does not " }:表示當(dāng)前錯(cuò)誤發(fā)生時(shí)正在處理的業(yè)務(wù)標(biāo)識(shí) 105:不存在 01:交易不存在 02:用戶存在不存在 03:訂單不存在...
2.:錯(cuò)誤信息
錯(cuò)誤信息開發(fā)人員可以快速定位問題。
3. 必須拋出錯(cuò)誤
如果接口處理出現(xiàn)錯(cuò)誤,將相應(yīng)的錯(cuò)誤代碼和錯(cuò)誤描述打包輸出,而不是將錯(cuò)誤包裝在接口返回參數(shù)中。因?yàn)楣臼褂玫氖?http協(xié)議,監(jiān)控告警強(qiáng)烈依賴直接拋出錯(cuò)誤,監(jiān)控可以更有效的監(jiān)控RPC接口,避免處理錯(cuò)誤,但是返回200。