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