刷卡機(jī)刷卡密碼錯(cuò)誤受限,錯(cuò)誤碼設(shè)計(jì)思考
網(wǎng)上關(guān)于刷卡機(jī)刷卡密碼錯(cuò)誤受限,錯(cuò)誤碼設(shè)計(jì)思考的刷卡知識(shí)比較多,也有關(guān)于刷卡機(jī)刷卡密碼錯(cuò)誤受限的問(wèn)題,今天第一pos網(wǎng)(m.fzog.com.cn)為大家整理刷卡常見(jiàn)知識(shí),未來(lái)的我們終成一代卡神。
本文目錄一覽:
刷卡機(jī)刷卡密碼錯(cuò)誤受限
在微服務(wù)化的今天,服務(wù)間的交互越來(lái)越復(fù)雜,統(tǒng)一異常處理規(guī)范作為框架的基礎(chǔ),一旦上線后很難再更改,如果設(shè)計(jì)不好,會(huì)導(dǎo)致后期的維護(hù)成本越來(lái)越來(lái)大。 對(duì)于錯(cuò)誤碼的設(shè)計(jì),不同的開(kāi)發(fā)團(tuán)隊(duì)有不同的風(fēng)格習(xí)慣。本文分享作者從實(shí)踐中總結(jié)的經(jīng)驗(yàn)及對(duì)應(yīng)的思考,期望對(duì)讀者有所啟發(fā)。
本文中涉及的源碼:https://github.com/sofn/app-engine/tree/master/common-error
什么是錯(cuò)誤碼引自阿里巴巴《Java 開(kāi)發(fā)手冊(cè)》- 異常日志-錯(cuò)誤碼
錯(cuò)誤碼的制定原則:快速溯源、簡(jiǎn)單易記、溝通標(biāo)準(zhǔn)化。
正例:錯(cuò)誤碼回答的問(wèn)題是誰(shuí)的錯(cuò)?錯(cuò)在哪?
1)錯(cuò)誤碼必須能夠快速知曉錯(cuò)誤來(lái)源,可快速判斷是誰(shuí)的問(wèn)題。
2)錯(cuò)誤碼易于記憶和比對(duì)(代碼中容易 equals)。
3)錯(cuò)誤碼能夠脫離文檔和系統(tǒng)平臺(tái)達(dá)到線下輕量化地自由溝通的目的。
那么用Java異常能表示出來(lái)嗎?答案顯然是否定的
必須能夠快速知曉錯(cuò)誤來(lái)源:異常類因?yàn)閺?fù)用性不能很快的定位,異常類和代碼行數(shù)也不是一個(gè)穩(wěn)定的值必須易于記憶和對(duì)比:異常類不具有可比性,且不利于前后端交互能夠脫離代碼溝通:異常類只能存在于Java代碼中錯(cuò)誤碼設(shè)計(jì)錯(cuò)誤碼的設(shè)計(jì)是比較簡(jiǎn)單的,一般只需要定義一個(gè)數(shù)字和描述信息即可。不過(guò)想設(shè)計(jì)一套完善錯(cuò)誤碼系統(tǒng)還有很多需要考慮的場(chǎng)景。
1、錯(cuò)誤碼的分層大部分項(xiàng)目錯(cuò)誤碼設(shè)計(jì)分為3級(jí)能滿足業(yè)務(wù)場(chǎng)景,即項(xiàng)目、模塊、錯(cuò)誤編碼。比如錯(cuò)誤碼是6位,前兩位是項(xiàng)目碼、中間兩位是模塊碼,最后兩位是異常編號(hào)。以下是錯(cuò)誤碼10203的對(duì)應(yīng)說(shuō)明:
2、錯(cuò)誤的表示方法:枚舉or 類推薦使用枚舉,因?yàn)槊杜e具有不可變性,且所有值都在一個(gè)文件里描述。
3、多模塊錯(cuò)誤碼定義及接口定義最原始的錯(cuò)誤定義方法是項(xiàng)目中所有的錯(cuò)誤碼都定義在一個(gè)類里,但是這樣會(huì)隨著業(yè)務(wù)的發(fā)展錯(cuò)誤碼越來(lái)越多,最終導(dǎo)致難以維護(hù),推薦的做法是按照項(xiàng)目+模塊粒度定義成多個(gè)錯(cuò)誤碼枚舉類。有兩個(gè)問(wèn)題需要考慮:
(1)項(xiàng)目編碼、模塊編碼的維護(hù):推薦另建一個(gè)枚舉類統(tǒng)一維護(hù)
(2)異常類的統(tǒng)一引用:定義接口,枚舉類實(shí)現(xiàn)接口
示例:
//異常接口定義public interface ErrorCode {}//模塊定義public enum UserProjectCodes { LOGIN(1, 1, "登錄模塊"), USER(1, 2, "用戶模塊")}//登錄模塊異常碼定義public enum LoginErrorCodes implements ErrorCode { USER_NOT_EXIST(0, "用戶名不存在"), //錯(cuò)誤碼: 10100 PASSWORD_ERROR(1, "密碼錯(cuò)誤"); //錯(cuò)誤碼: 10101 private final int nodeNum; private final String msg; UserLoginErrorCodes(int nodeNum, String msg) { this.nodeNum = nodeNum; this.msg = msg; ErrorManager.register(UserProjectCodes.LOGIN, this); }}4、防重設(shè)計(jì)
錯(cuò)誤碼本質(zhì)上就是一個(gè)數(shù)字,且每一個(gè)都需要由RD編碼定義,在錯(cuò)誤碼多的項(xiàng)目很容易重復(fù)。最佳實(shí)踐是在枚舉的構(gòu)造方法里調(diào)用Helper類,Helper類統(tǒng)一維護(hù)所有的異常碼,如有重復(fù)則枚舉初始化失敗。
5、錯(cuò)誤擴(kuò)展信息只有錯(cuò)誤碼是不夠的,還需要反饋給調(diào)用方詳細(xì)的錯(cuò)誤信息以方便修正。固定的錯(cuò)誤信息字符串在某些場(chǎng)景寫(xiě)也是不夠的,這里推薦使用slf4j打日志時(shí)使用的動(dòng)態(tài)參數(shù),這種方式相比于String.format格式的好處是不需要關(guān)心參數(shù)的類型以及記憶%s、%d等的區(qū)別,且打印日志時(shí)經(jīng)常使用,降低了團(tuán)隊(duì)成員的學(xué)習(xí)成本。
示例:
//錯(cuò)誤碼定義PARAM_ERROR(17, "參數(shù)非法,期望得到:{},實(shí)際得到:{}")//錯(cuò)誤碼使用ErrorCodes.PARAM_ERROR.format(arg1, arg2);
實(shí)現(xiàn)方式:
org.slf4j.helpers.MessageFormatter.arrayFormat(this.message, args).getMessage() 錯(cuò)誤碼和異常
在日常業(yè)務(wù)開(kāi)發(fā)中,對(duì)于異常使用最多的還是拋出Java異常(Exception),異常又分為受檢查異常(Exception)和不受檢查異常(RuntimeException):
受檢查的異常:這種在編譯時(shí)被強(qiáng)制檢查的異常稱為"受檢查的異常"。即在方法的聲明中聲明的異常。不受檢查的異常:在方法的聲明中沒(méi)有聲明,但在方法的運(yùn)行過(guò)程中發(fā)生的各種異常被稱為"不被檢查的異常"。這種異常是錯(cuò)誤,會(huì)被自動(dòng)捕獲。1、異常綁定錯(cuò)誤碼定義兩個(gè)父類,分別用于首檢查異常和非受檢查異常。可支持傳入錯(cuò)誤碼,同時(shí)需要支持原始的異常傳參,這種場(chǎng)景會(huì)賦予一個(gè)默認(rèn)的錯(cuò)誤碼,比如:500服務(wù)器內(nèi)部異常
//父類定義public abstract class BaseException extends Exception { protected BaseException(String message) {...} protected BaseException(String message, Throwable cause) {...} protected BaseException(Throwable cause) {...} protected BaseException(ErrorInfo errorInfo) {...} protected BaseException(ErrorCode errorCode) {...} protected BaseException(ErrorCode errorCode, Object... args) {...}}2、部分異常
使用異常能適用于大部分場(chǎng)景,不過(guò)對(duì)于多條目的場(chǎng)景不是很適合,比如需要批量保存10條記錄,某些成功、某些失敗,這種場(chǎng)景就不適合直接拋出異常。
在Node.js和Go語(yǔ)言中異常處理采用多返回值方式處理,第一個(gè)值是異常,如果為null則表示無(wú)異常。在Java里建議采用vavr庫(kù)中的Either來(lái)實(shí)現(xiàn),通常使用左值表示異常,而右值表示正常調(diào)用后的返回結(jié)果,即: Either<ErrorCode, T>
注意不推薦Pair、Tuple來(lái)實(shí)現(xiàn),因?yàn)镋ither只能設(shè)置一個(gè)左值或右值,而Pair、Tuple無(wú)此限制。
錯(cuò)誤碼和統(tǒng)一返回值在前后端的交互中,后端一般使用JSON方式返回結(jié)果,整合前面說(shuō)的錯(cuò)誤碼,可定義以下格式:
{ "code": number, "msg": string, "data": object}
在SpringMVC中實(shí)現(xiàn)方式是自定義ResponseBodyAdvice和異常攔截,具體實(shí)現(xiàn)方式直接查看:源碼
實(shí)現(xiàn)了以上步驟之后就可以在SpringMVC框架中愉快的使用了,會(huì)自動(dòng)處理異常及封裝成統(tǒng)一返回格式
@GetMapping("/order") public Order getOrder(Long orderId) { return service.findById(orderId); }總結(jié)
本文總結(jié)了設(shè)計(jì)錯(cuò)誤碼需要考慮的各種因素,并給出了參考示例,基本能滿足一般中大型項(xiàng)目。規(guī)范有了最重要的還是落地,讓團(tuán)隊(duì)成員遵守規(guī)范才能讓項(xiàng)目健康的迭代。
源碼地址:https://github.com/sofn/app-engine/tree/master/common-error
本文來(lái)自https://www.cnblogs.com/lesofn/p/16051008.html
POS機(jī)刷卡錯(cuò)誤是怎么回事?
pos機(jī)刷卡錯(cuò)誤代碼速查表: 00 ——pos機(jī)交易成功 承兌或交易成功 01 ——pos機(jī)交易失敗,請(qǐng)聯(lián)系發(fā)卡行 查發(fā)卡行或檢查卡內(nèi)余額 02 ——同上 03—— 商戶未登記,無(wú)權(quán)使用銀聯(lián)pos機(jī)終端 聯(lián)系銀行卡服務(wù)中心處理 04—— 沒(méi)收卡,請(qǐng)聯(lián)系收單行 操作員沒(méi)收卡(這種情況為高風(fēng)險(xiǎn)卡片,有黑卡或仿卡的嫌疑)
05 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 發(fā)卡不予承兌,與發(fā)銀行聯(lián)系查詢 06 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 發(fā)卡行故障,稍等重新刷卡 07 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 特殊條件下沒(méi)收卡,這種情況為高風(fēng)險(xiǎn)卡片,有黑卡或仿卡的嫌疑 09 ——交易失敗,請(qǐng)重試 重做該交易,稍等重新刷卡 12—— 交易失敗,請(qǐng)重試 發(fā)卡行不支持的交易,這種情況為部分銀行卡不識(shí)別銀聯(lián)pos機(jī)上的刷卡器或未和銀聯(lián)簽訂支付清算協(xié)議。
13—— 交易金額超限,請(qǐng)重試交易金額無(wú)效,采用小金額交易或與發(fā)卡行聯(lián)系,可向銀行申請(qǐng)暫時(shí)提升信譽(yù)額度,或小額刷卡。
14 ——無(wú)效卡號(hào),請(qǐng)聯(lián)系發(fā)卡行無(wú)效卡號(hào),與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系,長(zhǎng)時(shí)間未使用或未交年費(fèi)管理費(fèi)情況造成,或者注銷(xiāo)卡。
15 ——此卡不能受理 與銀行卡服務(wù)中心聯(lián)系處理,未接入銀聯(lián)網(wǎng)絡(luò),銀聯(lián)不予以清算和結(jié)賬。
19 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 刷卡讀取數(shù)據(jù)有誤,重新刷卡 20 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系 21 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系 22 ——操作有誤,請(qǐng)重試 POS狀態(tài)與中心不符,重新簽到,確定操作員號(hào)碼和密碼正確,重新刷卡。
23 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 不可接受的交易費(fèi),這筆交易資金存在風(fēng)險(xiǎn)或者未簽訂銀聯(lián)協(xié)議。
25—— 交易失敗,請(qǐng)聯(lián)系發(fā)卡行發(fā)卡行未能找到有關(guān)記錄,核對(duì)有關(guān)資料重做該交易或與發(fā)卡行聯(lián)系 30 ——交易失敗,請(qǐng)重試 檢查卡磁條是否完好或反方向刷卡或者銀聯(lián)pos機(jī)的磁條沒(méi)有問(wèn)題,以及其他接口正常。
31—— 此卡不能受理 此發(fā)卡方未與中心開(kāi)通業(yè)務(wù),檢查此卡是否是簽訂銀聯(lián)協(xié)議的銀行卡。 33—— 過(guò)期卡,請(qǐng)聯(lián)系發(fā)卡行 過(guò)期的卡或與發(fā)卡行聯(lián)系,暫時(shí)凍結(jié)結(jié)算功能 34 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 有作弊嫌疑的卡,操作員可以沒(méi)收(黑卡仿卡,高風(fēng)險(xiǎn)卡)
35 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 有作弊嫌疑的卡,操作員可以沒(méi)收(黑卡仿卡,高風(fēng)險(xiǎn)卡)
36 ——此卡有誤,請(qǐng)換卡重試 有作弊嫌疑的卡,操作員可以沒(méi)收(黑卡仿卡,高風(fēng)險(xiǎn)卡)
37 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 有作弊嫌疑的卡,操作員可以沒(méi)收(黑卡仿卡,高風(fēng)險(xiǎn)卡)
38 ——密碼錯(cuò)誤次數(shù)超限 密碼輸錯(cuò)的次數(shù)超限,一般pos機(jī)結(jié)算刷卡為保護(hù)持卡人利益,連續(xù)輸入3次未能輸入正確,發(fā)卡行系統(tǒng)自動(dòng)凍結(jié)此卡,24小時(shí)后自動(dòng)解凍。
39 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 可能刷卡操作有誤,請(qǐng)重新刷卡 40 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 發(fā)卡行不支持的交易類型,查看卡內(nèi)余額以及操作流程得當(dāng),重新刷卡。
41 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 掛失的卡,與發(fā)卡行聯(lián)系處理,此卡已經(jīng)掛失,一般為盜卡,高風(fēng)險(xiǎn)卡。
42 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡方 發(fā)卡行找不到此帳戶,此卡為黑卡,防范風(fēng)險(xiǎn)。
43 ——沒(méi)收卡,請(qǐng)聯(lián)系收單行 被竊卡, 操作員可以沒(méi)收,黑卡、盜卡防范風(fēng)險(xiǎn) 44 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 可能刷卡操作有誤,重新刷卡,確定刷卡流程和步驟正確。 51 ——余額不足,請(qǐng)查詢 帳戶內(nèi)余額不足,小額刷卡。
52 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 無(wú)此支票賬戶,信用卡信息不全或者不準(zhǔn)確,核實(shí)后補(bǔ)充資料 53—— 交易失敗,請(qǐng)聯(lián)系發(fā)卡行 無(wú)此儲(chǔ)蓄卡賬戶,沒(méi)有登記的卡,過(guò)期卡、實(shí)效卡、仿卡 54 ——過(guò)期卡,請(qǐng)聯(lián)系發(fā)卡行 過(guò)期的卡,像銀行提出申請(qǐng)重新補(bǔ)辦或開(kāi)通 55 ——密碼錯(cuò),請(qǐng)重試 密碼輸錯(cuò),可重新輸入,注意只可以聯(lián)系刷如3次要是還沒(méi)有輸入正確此卡將被暫時(shí)凍結(jié)。 56 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 發(fā)卡行找不到此帳戶,與發(fā)卡行聯(lián)系,黑卡、盜卡、仿卡注意防范風(fēng)險(xiǎn) 57 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行不允許持卡人進(jìn)行的交易,與發(fā)卡行聯(lián)系,持卡人之前交易有套現(xiàn)嫌疑,屬于銀行的風(fēng)險(xiǎn)持卡人,銀行對(duì)此持卡人已提升監(jiān)控。 58 ——終端無(wú)效,請(qǐng)聯(lián)系收單行或銀聯(lián)重新簽到再試或與銀行卡服務(wù)中心聯(lián)系 59 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行,是否開(kāi)通結(jié)算功能,或者超出額度 60 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 查詢卡內(nèi)余額或者詢問(wèn)此卡是否簽訂銀聯(lián)協(xié)議 61 ——金額太大 超出去款金額限制,可向銀行提出暫時(shí)額度,根據(jù)持卡人消費(fèi)核定暫時(shí)額度的金額 62 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 受限制的卡,此持卡人為銀行的風(fēng)險(xiǎn)持卡人,已被銀行監(jiān)控,注意防范風(fēng)險(xiǎn) 63 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 違反安全保密規(guī)定,存在惡意透支或者沒(méi)有按時(shí)還款 64 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行原始金額不正確,核對(duì)原始資料或與發(fā)卡行聯(lián)系,持卡人資料有問(wèn)題,請(qǐng)核實(shí)持卡人身份資料,及卡片資料。 65 ——超出取款次數(shù)限制 超出取款次數(shù)限制,銀行系統(tǒng)風(fēng)險(xiǎn)控制,聯(lián)系銀行解決 66 ——交易失敗,請(qǐng)聯(lián)系收單行或銀聯(lián) 銀聯(lián)磁條不識(shí)別或者卡片消磁 67 ——沒(méi)收卡 黑卡、盜卡、仿卡高風(fēng)險(xiǎn)卡片,注意防范風(fēng)險(xiǎn) 68 ——交易超時(shí),請(qǐng)重試發(fā)卡行規(guī)定時(shí)間內(nèi)沒(méi)有應(yīng)答,與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系,重新簽到或操作刷卡。 75 ——密碼錯(cuò)誤次數(shù)超限允許的輸入PIN次數(shù)超限,該卡要重置密碼方能使用,撥打銀行客戶服務(wù)電話解決 77—— 請(qǐng)向網(wǎng)絡(luò)中心簽到 重做簽到,輸入密碼和操作員號(hào)碼 79 ——POS終端重傳脫機(jī)數(shù)據(jù) POS終端上傳的脫機(jī)數(shù)據(jù)對(duì)帳不平,檢查接口是否鏈接好 90 ——交易失敗,請(qǐng)稍后重試日期切換正在處理,與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系 91 ——交易失敗,請(qǐng)稍后重試 電話查詢發(fā)卡方或銀聯(lián),可重作,重新輸入操作員號(hào)碼和密碼 92 ——交易失敗,請(qǐng)稍后重試銀行通訊故障,電話查詢發(fā)卡方或網(wǎng)絡(luò)中心 93 ——交易失敗,請(qǐng)聯(lián)系發(fā)卡行 交易違法、不能完成。有套現(xiàn)或惡意透支嫌疑可重新簽到后再試 94 ——交易失敗,請(qǐng)稍后重試重新簽到后再交易或與銀行卡服務(wù)中心聯(lián)系 95 ——交易失敗,請(qǐng)稍后重試 發(fā)卡行調(diào)節(jié)控制錯(cuò),與發(fā)卡行聯(lián)系,銀行系統(tǒng)風(fēng)險(xiǎn)控制 96 ——交易失敗,請(qǐng)稍后重試 與發(fā)卡行或銀行卡服務(wù)中心聯(lián)系銀行或銀聯(lián)風(fēng)險(xiǎn)系統(tǒng)自動(dòng)報(bào)警 97 ——終端未登記,請(qǐng)聯(lián)系收單行或銀聯(lián) 與銀行卡服務(wù)中心聯(lián)系,及時(shí)遞交資料解決 98 ——交易超時(shí),請(qǐng)重試銀聯(lián)收不到發(fā)卡行應(yīng)答,與銀行卡服務(wù)中心或發(fā)卡行聯(lián)系 99 ——校驗(yàn)錯(cuò),請(qǐng)重新簽到 重新簽到再作交易 A0—— 校驗(yàn)錯(cuò),請(qǐng)重新簽到 重新簽到作交易
以上就是關(guān)于刷卡機(jī)刷卡密碼錯(cuò)誤受限,錯(cuò)誤碼設(shè)計(jì)思考的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于刷卡機(jī)刷卡密碼錯(cuò)誤受限的知識(shí),希望能夠幫助到大家!
轉(zhuǎn)載請(qǐng)帶上網(wǎng)址:http://m.fzog.com.cn/shuaka/41799.html