本發(fā)明涉及數據處理技術領域,特別是涉及一種掃碼收取電子發(fā)票的方法與系統。
背景技術:
電子發(fā)票是信息時代的產物,同普通發(fā)票一樣,采用稅務局統一的形式發(fā)放給商家使用,發(fā)票號碼采用全國統一編碼、統一防偽技術分配給商家,在電子發(fā)票上附有電子稅局的簽名機制。
目前,針對電子發(fā)票收取一般采用被動式,即當用戶(消費者)在商戶消費后索取電子發(fā)票,商戶會通過用戶預留的手機號或者郵箱,將電子發(fā)票版式文件,例如pdf或ofd等格式的版式文件推送給消費者。其中,短信推送基于短信服務商(一般具體指運營商或者代理服務商)進行推送;郵件推送基于郵件服務商(常見的郵件服務商包括騰訊企業(yè)郵箱、163企業(yè)郵箱以及outlook郵箱等)進行推送。依據該種方式,用戶只能被動的等待商戶發(fā)送的電子發(fā)票,無法滿足用戶想要及時獲取電子發(fā)票的需求,并且依據該種方式發(fā)送電子發(fā)票,可能會出現商戶遺漏發(fā)送電子發(fā)票的情況,或者是由于網絡不穩(wěn)定等因素的影響,發(fā)送出現延緩,導致消費者沒有收到或者遺漏收取的問題,甚至可能會因為預留信息有誤而導致錯發(fā)。如果能夠實現讓用戶主動進行電子發(fā)票的收取,將極大的提升消費者的用戶體驗,并且可以有效避免上述推送電子發(fā)票時出現的漏發(fā)、延時、錯發(fā)等問題。
可見,如何能夠實現讓用戶主動進行電子發(fā)票的收取,是本領域技術人員亟待解決的問題。
技術實現要素:
本發(fā)明實施例的目的是提供一種掃碼收取電子發(fā)票的方法與系統,用戶可以主動進行電子發(fā)票的收取。
為解決上述技術問題,本發(fā)明實施例提供一種掃碼收取電子發(fā)票的方法,包括:
二維碼生成寫入模塊將電子發(fā)票的相關信息封裝成二維碼數據,并將所述二維碼數據存儲于二維碼數據存儲模塊;
二維碼讀取模塊根據二維碼展示模塊的讀取需求,從所述二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊;
所述二維碼展示模塊根據接收到的所述對應的二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼;
掃碼收票模塊掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息;所述電子發(fā)票的相關信息包括:電子發(fā)票信息和電子發(fā)票鏈接地址;
所述掃碼收票模塊依據于所述電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息;
所述掃碼收票處理模塊,依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
可選的,所述二維碼讀取模塊根據二維碼展示模塊的讀取需求,從所述二維碼數據存儲模塊讀取對應的二維碼數據包括:
二維碼讀取模塊根據讀取需求中包含的數據信息,從所述二維碼數據存儲模塊中查找是否存在對應的二維碼數據;所述數據信息包括:流水號、發(fā)票號碼、發(fā)票代碼;
若存在,則從所述二維碼數據存儲模塊中讀取所述對應的二維碼數據。
可選的,還包括:
二維碼生成寫入模塊采用加密算法對所述二維碼數據進行加密處理,得到加密后的二維碼數據;
相應的,
所述掃碼收票處理模塊在接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,根據預先存儲的密鑰,對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到解密后的電子發(fā)票信息。
可選的,所述掃碼收票處理模塊中的請求處理子模塊在接收到所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,將所述請求發(fā)送至所述掃碼收票處理模塊中的獲取子模塊;
所述獲取子模塊依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;
若存在,則所述獲取子模塊將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;
所述請求處理子模塊將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
可選的,當所述電子發(fā)票信息為加密后的電子發(fā)票信息時;
所述請求處理子模塊在接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,根據預先存儲的密鑰對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼;并向所述獲取子模塊發(fā)送用于獲取電子發(fā)票版式文件的第二請求;所述第二請求中攜帶有解密后的電子發(fā)票信息;
相應的,
所述獲取子模塊依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
本發(fā)明實施例還提供了一種掃碼收取電子發(fā)票的系統,包括:二維碼生成寫入模塊、二維碼讀取模塊、二維碼數據存儲模塊、二維碼展示模塊、掃碼收票模塊、掃碼收票處理模塊和電子發(fā)票版式文件存儲模塊;
所述二維碼生成寫入模塊,用于將電子發(fā)票的相關信息封裝成二維碼數據,并將所述二維碼數據存儲于所述二維碼數據存儲模塊;
所述二維碼讀取模塊,用于根據二維碼展示模塊的讀取需求,從所述二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊;
所述二維碼展示模塊,用于根據接收到的所述對應的二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼;
所述掃碼收票模塊,用于掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息;所述電子發(fā)票的相關信息包括:電子發(fā)票信息和電子發(fā)票鏈接地址;
所述掃碼收票模塊還用于依據于所述電子發(fā)票鏈接地址,向所述掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息;
所述掃碼收票處理模塊,用于接收所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求,并依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;其中,所述電子發(fā)票版式文件存儲模塊,用于存儲電子發(fā)票版式文件;
若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
可選的,所述二維碼讀取模塊具體用于根據讀取需求中包含的數據信息,從所述二維碼數據存儲模塊中查找是否存在對應的二維碼數據;所述數據信息包括:流水號、發(fā)票號碼、發(fā)票代碼;
若存在,則從所述二維碼數據存儲模塊中讀取所述對應的二維碼數據。
可選的,所述二維碼生成寫入模塊還用于采用加密算法對所述二維碼數據進行加密處理,得到加密后的二維碼數據;
相應的,
所述掃碼收票處理模塊還用于,在接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,根據預先存儲的密鑰,對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到解密后的電子發(fā)票信息。
可選的,所述掃碼收票處理模塊包括:請求處理子模塊和獲取子模塊;
所述請求處理子模塊,用于接收所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求,并將所述請求發(fā)送至所述獲取子模塊;
所述獲取子模塊,用于依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;
若存在,則所述獲取子模塊將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;
所述請求處理子模塊還用于將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
可選的,當所述電子發(fā)票信息為加密后的電子發(fā)票信息時;
所述請求處理子模塊還用于,在接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,根據預先存儲的密鑰對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼;并向所述獲取子模塊發(fā)送用于獲取電子發(fā)票版式文件的第二請求;所述第二請求中攜帶有解密后的電子發(fā)票信息;
相應的,
所述獲取子模塊具體用于依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
由上述技術方案可以看出,通過二維碼生成寫入模塊,將電子發(fā)票的相關信息封裝成二維碼數據,二維碼讀取模塊根據二維碼展示模塊的讀取需求,從二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊;二維碼展示模塊,可以將該二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼;掃碼收票模塊可以掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息;所述電子發(fā)票的相關信息包括:電子發(fā)票信息和電子發(fā)票鏈接地址,并依據于所述電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息;所述掃碼收票處理模塊,在接收到所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊??梢?,通過將電子發(fā)票的相關信息轉換成二維碼的形式,用戶可以利用掃碼收票模塊主動掃描二維碼的方式來獲取對應的電子發(fā)票,使得用戶收取電子發(fā)票的方式變得靈活化、主動化。
附圖說明
為了更清楚地說明本發(fā)明實施例,下面將對實施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種掃碼收取電子發(fā)票的方法的流程圖;
圖2為本發(fā)明實施例提供的一種掃碼收取電子發(fā)票的系統的結構示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下,所獲得的所有其他實施例,都屬于本發(fā)明保護范圍。
為了使本技術領域的人員更好地理解本發(fā)明方案,下面結合附圖和具體實施方式對本發(fā)明實施例作進一步的詳細說明。
接下來,詳細介紹本發(fā)明實施例所提供的一種掃碼收取電子發(fā)票的方法。圖1為本發(fā)明實施例提供的一種掃碼收取電子發(fā)票的方法的流程圖,包括:
s101:二維碼生成寫入模塊將電子發(fā)票的相關信息封裝成二維碼數據,并將所述二維碼數據存儲于二維碼數據存儲模塊。
在本發(fā)明實施例中,二維碼數據可以由兩部分構成:電子發(fā)票鏈接地址和地址參數。
其中,電子發(fā)票鏈接地址可以是一個網址,這個網址對應的服務器是掃碼收票處理模塊和電子發(fā)票版式文件存儲模塊所在的服務器。訪問這個網址就相當于把獲取電子發(fā)票版式文件的請求提交給掃碼收票處理模塊。
地址參數即為電子發(fā)票信息,可以包括:發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等信息。
例如,二維碼數據的內容可以是:
https://www.test.com/fp/showqr?r=##########,兩部分之間的內容可以用“?”進行分割。
其中,第一部分https://www.test.com/fp/showqr即為電子發(fā)票鏈接地址。第二部分r=##########即為地址參數。
考慮到發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼是電子發(fā)票的重要信息,并且是區(qū)分不同電子發(fā)票的重要依據,故此,在地址參數中可以包括發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼。
具體的,二維碼生成寫入模塊可以將電子發(fā)票的相關信息封裝成二維碼數據;所述相關信息包括:發(fā)票代碼、發(fā)票號碼、發(fā)票校驗碼以及電子發(fā)票鏈接地址。
需要說明的是,在本發(fā)明實施例中,除了包含上述三項:發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼外,在地址參數中也可以包含電子發(fā)票的版本號和流水號等信息。如表1所示,地址參數可以由4個子部分組成:
表1
表1中,第一列信息表示的是地址參數的4個組成部分的序號,
第二列信息即為地址參數的4個組成部分的的內容,即這4個組成部分的的名稱,第三列信息即為地址參數的4個組成部分的相關要求,
即每一個部分的說明,第四列信息即為地址參數的4個組成部分的具體內容的舉例。在本發(fā)明實施例中,地址參數可以是由表1中的4個子部分組成。
每個子部分之間可以使用“,”進行分割,例如,第二部分示例為:
r=01,20000000000000000001,05000352110030330352,16359570871176711845。
依據上述分割方式,可以將電子發(fā)票的相關信息封裝成二維碼數據,例如,封裝成的二維碼數據可以是:
https://www.test.com/fp/showqr?r=01,20000000000000000001,05000352110030330352,16359570871176711845。
不同的電子發(fā)票有其對應的二維碼數據,為了便于后續(xù)查找,在本發(fā)明實施例中,可以將生成的二維碼數據寫入二維碼數據存儲模塊中,也即由該二維碼數據存儲模塊存儲生成的二維碼數據,其中二維碼數據可以以結構化數據方式進行存儲。
s102:二維碼讀取模塊根據二維碼展示模塊的讀取需求,從所述二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊。
在本發(fā)明實施例中,二維碼展示模塊與二維碼讀取模塊具有連接關系,當二維碼展示模塊需要展示二維碼時,可以向該二維碼讀取模塊發(fā)送讀取需求,其中,在該讀取需求中可以包含有電子發(fā)票的流水號、發(fā)票號碼、發(fā)票代碼等數據信息。
二維碼讀取模塊可以從二維碼數據存儲模塊中查找是否存在對應的二維碼數據,即查找是否存在與所述流水號、發(fā)票號碼、發(fā)票代碼一致的二維碼數據;若存在,則從所述二維碼數據存儲模塊中讀取所述對應的二維碼數據。
s103:二維碼展示模塊根據接收到的所述對應的二維碼數據,按照二維碼格式要求生成對應的二維碼,并展示所述二維碼。
在本發(fā)明實施例中,通過生成二維碼的方式,使得用戶可以通過主動掃描二維碼,來獲取相關的電子發(fā)票版式文件。其中,對于生成的二維碼,可以以紙質小票的方式打印出來,或者是展示在商戶的電子屏幕上,以便于消費者可以通過掃碼收票模塊掃描該二維碼。
s104:掃碼收票模塊掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息。
其中,電子發(fā)票的相關信息可以包括有電子發(fā)票信息和電子發(fā)票鏈接地址。
掃碼收票模塊可以是智能終端上的掃碼收票應用程序軟件。其中,該掃碼收票模塊可以與電子發(fā)票平臺具有通信關聯。以智能手機為例,可以利用手機上相關的應用軟件實現掃碼功能,例如,消費者可以利用支付寶、微信或者發(fā)票通等app軟件,對商戶展示的二維碼進行掃描。
以微信app為例,消費者打開微信app的掃碼界面對二維碼進行掃描,微信app對掃描的二維碼進行識別,解析出該二維碼所對應的電子發(fā)票的相關信息。
s105:掃碼收票模塊依據于電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求。
掃碼收票模塊掃描二維碼的目的在于獲取該二維碼對應的電子發(fā)票版式文件,故此,在掃描解析二維碼之后,所述掃碼收票模塊可以向所述掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;其中,該請求中攜帶有所述電子發(fā)票信息。
由上述介紹可知,二維碼數據中可以包含有電子發(fā)票鏈接地址,故此,對二維碼進行掃描、解析后獲取的相關信息中應該包含有相應的電子發(fā)票鏈接地址。
以微信app為例,微信app根據解析出的相關信息中包含的電子發(fā)票鏈接地址,可以向掃碼收票處理模塊發(fā)起相應的http訪問請求,用于請求獲取電子發(fā)票版式文件。在該請求中可以攜帶有解析出的電子發(fā)票信息。
s106:所述掃碼收票處理模塊,依據所述請求中攜帶的電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件。
s107:若存在,所述掃碼收票處理模塊則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
在本發(fā)明實施例中,可以設置專門的存儲模塊,來存儲電子發(fā)票版式文件,具體的,可以由電子發(fā)票版式文件存儲模塊,來存儲電子發(fā)票版式文件。
掃碼收票處理模塊可以是應用于電子發(fā)票平臺上的模塊,其作用主要是根據掃碼收票模塊發(fā)送的請求,查找對應的電子發(fā)票版式文件,并將該電子發(fā)票版式文件發(fā)送給掃碼收票模塊。
針對掃碼收票處理模塊的具體操作流程,在本發(fā)明實施例中,可以將所述掃碼收票處理模塊具體劃分為兩部分,分別為請求處理子模塊和獲取子模塊;
其中,請求處理子模塊可以用于接收或發(fā)送相關請求或信息;獲取子模塊可以用于查找電子發(fā)票版式文件。
在本發(fā)明實施例中,該請求處理子模塊可以看做是掃碼收票處理模塊的接口端,掃碼收票模塊向掃碼收票處理模塊發(fā)送的請求會被該請求處理子模塊接收。
在具體實現中,所述掃碼收票處理模塊中的請求處理子模塊在接收到所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,可以將所述請求發(fā)送至所述掃碼收票處理模塊中的獲取子模塊;
所述獲取子模塊依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件。其中,電子發(fā)票信息中可以攜帶有發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等電子發(fā)票的相關信息。
正確形式的二維碼應該是由電子發(fā)票的相關信息進行封裝、按照二維碼格式要求生成的二維碼,也即可以從電子發(fā)票版式文件存儲模塊中找到與該二維碼解析出的電子發(fā)票信息對應的電子發(fā)票版式文件,而根據偽造出的二維碼解析出的電子發(fā)票信息,無法從電子發(fā)票版式文件存儲模塊中找到對應的電子發(fā)票版式文件。
故此,在具體實現中,所述獲取子模塊可以依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
若存在,則所述獲取子模塊將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;所述請求處理子模塊將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
在掃碼收票模塊向掃碼收票處理模塊發(fā)送請求時,便建立了與掃碼收票處理模塊的通信連接,掃碼收票處理模塊中的請求處理子模塊便可依據該通信連接,將電子發(fā)票版式文件發(fā)送給該掃碼收票模塊。
以手機的微信app為例,在獲取到電子發(fā)票版式文件后,便可以對將該電子發(fā)票版式文件自動保存到微信app的卡包中。之后用戶可以從卡包打開電子發(fā)票版式文件,并可以選擇性的將電子發(fā)票版式文件保存到手機本地存儲空間或者將該電子發(fā)票版式文件發(fā)送到指定郵箱等操作。
由上述技術方案可以看出,通過二維碼生成寫入模塊,將電子發(fā)票的相關信息封裝成二維碼數據,二維碼讀取模塊根據二維碼展示模塊的讀取需求,從二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊;二維碼展示模塊,可以將該二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼;掃碼收票模塊可以掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息;所述電子發(fā)票的相關信息包括:電子發(fā)票信息和電子發(fā)票鏈接地址,并依據于所述電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息;所述掃碼收票處理模塊,在接收到所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。可見,通過將電子發(fā)票的相關信息轉換成二維碼的形式,用戶可以利用掃碼收票模塊主動掃描二維碼的方式來獲取對應的電子發(fā)票,使得用戶收取電子發(fā)票的方式變得靈活化、主動化。
考慮到二維碼數據中可以包含有發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等重要數據,而這些數據需要在互聯網上傳輸,為了確保數據傳輸的安全性,可以對二維碼數據中包含的這些重要數據進行加密處理后再傳輸。
在本發(fā)明實施例中,可以由二維碼生成寫入模塊對封裝后的二維碼數據采用加密算法對所述二維碼數據進行加密處理,得到加密后的二維碼數據。
相應的,在二維碼數據存儲模塊中存儲的即為加密處理后的二維碼數據,并且二維碼展示模塊展示的二維碼也是根據加密后的二維碼數據按照二維碼格式要求,所生成的二維碼。
由上述實施例的介紹可知,二維碼數據可以包括電子發(fā)票鏈接地址和地址參數,本發(fā)明實施例中,對于二維碼數據的加密可以只對地址參數中包含的信息進行加密處理,無需對電子發(fā)票鏈接地址進行加密。
其中,加密算法可以采用數據對稱加密算法(dataencryptionalgorithm,des)。
例如,采用des加密密鑰“12345678”,應用des對稱加密算法,對表1所示的地址參數:
“01,20000000000000000001,05000352110030330352,16359570871176711845”進行加密,并對加密后的內容進行urlencoder編碼得到內容為:
“s3df4xwitsdfan1sjjlpotwrsmnvczgflycb5ghnwymvvckyd4ndue%2f%2bjcptxybneugqkmvpbvnf%2bf%2fvhq49priz7aws2cjp”
結合上述表1舉例的二維碼數據內容,通過上述加密過程可以得到加密后的二維碼數據:
https://www.test.com/fp/showqr?r=s3df4xwitsdfan1sjjlpotwrsmnvczgflycb5ghnwymvvckyd4ndue%2f%2bjcptxybneugqkmvpbvnf%2bf%2fvhq49priz7aws2cjp。
以支付寶app為例,用戶打開支付寶app,進入發(fā)票管家模式,對二維碼進行掃描,支付寶app便可以對于掃描的二維碼進行識別,解析出該二維碼所對應的數據,該數據即為加密后的電子發(fā)票信息。
由于并未對電子發(fā)票鏈接地址進行加密,故此,掃碼收票模塊在對二維碼解析后,可以依據該電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送http訪問請求,在該請求中可以攜帶有解析出的電子發(fā)票信息。
當用戶利用掃碼收票模塊掃描的是正確的二維碼時,此時解析出的二維碼數據中的電子發(fā)票信息應該是經過加密后的電子發(fā)票信息,也即在向掃碼收票處理模塊發(fā)送的請求中攜帶的是加密后的電子發(fā)票信息,為了便于后續(xù)對該電子發(fā)票信息的驗證,需要先對該電子發(fā)票信息進行解密處理。
在具體實現中,當所述掃碼收票處理模塊在接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,可以根據預先存儲的密鑰,對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到解密后的電子發(fā)票信息。
上述對電子發(fā)票信息進行解密的過程具體可以由掃碼收票處理模塊中的請求處理子模塊執(zhí)行。
舉例說明,請求處理子模塊對所述請求中攜帶的電子發(fā)票信息進行解密處理后,可以獲取到所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼;由此可以向所述獲取子模塊發(fā)送用于獲取電子發(fā)票版式文件的第二請求;所述第二請求中攜帶有解密后的電子發(fā)票信息。其中,解密后的電子發(fā)票信息可以包括發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等信息。
例如,上述介紹中可以采用des加密密鑰“12345678”,應用des對稱加密算法對二維碼數據進行加密處理,相應的,可以采用解密密鑰“12345678”,應用des對稱解密算法對電子發(fā)票信息進行解密處理。
相應的,
所述獲取子模塊在接收到請求處理子模塊發(fā)送的用于獲取電子發(fā)票版式文件的第二請求后,可以依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
若在電子發(fā)票版式文件存儲模塊中存在與電子發(fā)票信息中攜帶的發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼一致的電子發(fā)票版式文件,則所述獲取子模塊可以從該電子發(fā)票版式文件存儲模塊中獲取到該電子發(fā)票版式文件,將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;通過該請求處理子模塊將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊。
以手機的支付寶app為例,在獲取到電子發(fā)票版式文件后,便可將其保存到支付寶發(fā)票管家。之后用戶可以從“發(fā)票管家”的“我的發(fā)票”欄目內打開電子發(fā)票版式文件,并可以選擇性的將電子發(fā)票版式文件保存到手機本地存儲空間或者將該電子發(fā)票版式文件發(fā)送到指定郵箱等操作。
通過上述增加對二維碼數據的加密處理,使得二維碼數據的安全性得到了保證,從而提升數據傳輸時的安全性。
圖2為本發(fā)明實施例提供的一種掃碼收取電子發(fā)票的系統的結構示意圖,該系統包括:二維碼生成寫入模塊21、二維碼數據存儲模塊22、二維碼讀取模塊23、二維碼展示模塊24、掃碼收票模塊25、掃碼收票處理模塊26和電子發(fā)票版式文件存儲模塊27;
所述二維碼生成寫入模塊21,用于將電子發(fā)票的相關信息封裝成二維碼數據,不同的電子發(fā)票有其對應的二維碼數據,為了便于后續(xù)查找,在本發(fā)明實施例中,可以將生成的二維碼數據寫入二維碼數據存儲模塊22中,也即由該二維碼數據存儲模塊22存儲生成的二維碼數據,其中二維碼數據可以以結構化數據方式進行存儲。
所述二維碼讀取模塊23,用于根據二維碼展示模塊24的讀取需求,從所述二維碼數據存儲模塊22讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊24。
在具體實現中,二維碼讀取模塊23可以根據讀取需求中包含的數據信息,從所述二維碼數據存儲模塊22中查找是否存在對應的二維碼數據;所述數據信息包括:流水號、發(fā)票號碼、發(fā)票代碼;若存在,則從所述二維碼數據存儲模塊22中讀取所述對應的二維碼數據。
二維碼展示模塊24,可以將接收的所述二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼。
在本發(fā)明實施例中,通過生成二維碼的方式,使得用戶可以通過主動掃描二維碼,來獲取相關的電子發(fā)票版式文件。其中,對于生成的二維碼,可以以紙質小票的方式打印出來,或者是展示在商戶的電子屏幕上,以便于消費者可以通過掃碼收票模塊25掃描該二維碼。
掃碼收票模塊25,通過掃描并解析所述二維碼,可以獲取到所述二維碼對應的電子發(fā)票的相關信息。其中,電子發(fā)票的相關信息可以包括:電子發(fā)票信息和電子發(fā)票鏈接地址。
掃碼收票模塊25掃描二維碼的目的在于獲取該二維碼對應的電子發(fā)票版式文件,故此,在掃描解析二維碼之后,所述掃碼收票模塊25還用于依據于所述電子發(fā)票鏈接地址,向所述掃碼收票處理模塊26發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息。
由上述介紹可知,二維碼數據中可以包含有電子發(fā)票鏈接地址,故此,對二維碼進行掃描、解析后獲取的電子發(fā)票的相關信息中應該包含有相應的電子發(fā)票鏈接地址。
以微信app為例,微信app根據解析出的相關信息中包含的電子發(fā)票鏈接地址,可以向掃碼收票處理模塊26發(fā)起相應的http訪問請求,用于請求獲取電子發(fā)票版式文件。在該請求中可以攜帶有解析出的電子發(fā)票信息。
在本發(fā)明實施例中,可以設置專門的存儲模塊,來存儲電子發(fā)票版式文件,具體的,可以由電子發(fā)票版式文件存儲模塊27,來存儲電子發(fā)票版式文件。
所述掃碼收票處理模塊26,在接收到所述掃碼收票模塊25發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,可以依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊27中查找是否存在對應的電子發(fā)票版式文件;若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊25。
以手機的微信app為例,在獲取到電子發(fā)票版式文件后,便可以對將該電子發(fā)票版式文件自動保存到微信app的卡包中。之后用戶可以從卡包打開電子發(fā)票版式文件,并可以選擇性的將電子發(fā)票版式文件保存到手機本地存儲空間或者將該電子發(fā)票版式文件發(fā)送到指定郵箱等操作。
針對掃碼收票處理模塊26的具體操作流程,在本發(fā)明實施例中,可以將所述掃碼收票處理模塊26劃分為兩個子模塊,分別為請求處理子模塊和獲取子模塊;
在本發(fā)明實施例中,該請求處理子模塊可以看做是掃碼收票處理模塊26的接口端,掃碼收票模塊25向掃碼收票處理模塊26發(fā)送的請求會被該請求處理子模塊接收。
在具體實現中,所述請求處理子模塊,用于接收所述掃碼收票模塊25發(fā)送的所述用于獲取電子發(fā)票版式文件的請求,并將所述請求發(fā)送至所述獲取子模塊。
所述獲取子模塊,用于依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件。
正確形式的二維碼應該是由電子發(fā)票的相關信息進行封裝、按照二維碼格式要求生成的二維碼,也即可以從電子發(fā)票版式文件存儲模塊27中找到與該二維碼解析出的電子發(fā)票信息對應的電子發(fā)票版式文件,而根據偽造出的二維碼解析出的電子發(fā)票信息,無法從電子發(fā)票版式文件存儲模塊27中找到對應的電子發(fā)票版式文件。其中,電子發(fā)票信息中可以攜帶有發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等電子發(fā)票的相關信息。
故此,在具體實現中,所述獲取子模塊可以依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊27中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
若存在,則所述獲取子模塊將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;通過該請求處理子模塊將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊25。
在掃碼收票模塊25向掃碼收票處理模塊26發(fā)送請求時,便建立了與掃碼收票處理模塊26的通信連接,掃碼收票處理模塊26中的請求處理子模塊便可依據該通信連接,將電子發(fā)票版式文件發(fā)送給該掃碼收票模塊25。
由上述技術方案可以看出,通過二維碼生成寫入模塊,將電子發(fā)票的相關信息封裝成二維碼數據,二維碼讀取模塊根據二維碼展示模塊的讀取需求,從二維碼數據存儲模塊讀取對應的二維碼數據,并發(fā)送給二維碼展示模塊;二維碼展示模塊,可以將該二維碼數據按照二維碼格式要求生成對應的二維碼,并展示所述二維碼;掃碼收票模塊可以掃描并解析所述二維碼,獲取到所述二維碼對應的電子發(fā)票的相關信息;并依據于所述電子發(fā)票的相關信息中攜帶的電子發(fā)票鏈接地址,向掃碼收票處理模塊發(fā)送用于獲取電子發(fā)票版式文件的請求;所述請求中攜帶有所述電子發(fā)票信息;所述掃碼收票處理模塊,在接收到所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,依據所述請求中攜帶的所述電子發(fā)票信息,從所述電子發(fā)票版式文件存儲模塊中查找是否存在對應的電子發(fā)票版式文件;若存在,則將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊??梢?,通過將電子發(fā)票的相關信息轉換成二維碼的形式,用戶可以利用掃碼收票模塊主動掃描二維碼的方式來獲取對應的電子發(fā)票,使得用戶收取電子發(fā)票的方式變得靈活化、主動化。
考慮到二維碼數據中可以包含有發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等重要數據,而這些數據需要在互聯網上傳輸,為了確保數據傳輸的安全性,可以對二維碼數據中包含的這些重要數據進行加密處理后再傳輸。
在本發(fā)明實施例中,可以由二維碼生成寫入模塊21中的二維碼生成寫入模塊對封裝后的二維碼數據采用加密算法對所述二維碼數據進行加密處理,得到加密后的二維碼數據。
當二維碼生成寫入模塊對二維碼數據進行加密處理后,相應的,在二維碼數據存儲模塊中存儲的即為加密處理后的二維碼數據,并且二維碼展示模塊展示的二維碼也是根據加密后的二維碼數據,按照二維碼格式要求,所生成的二維碼。
由上述實施例的介紹可知,二維碼數據可以包括電子發(fā)票鏈接地址和地址參數,本發(fā)明實施例中,對于二維碼數據的加密可以只對地址參數中包含的信息進行加密處理,無需對電子發(fā)票鏈接地址進行加密。
由于并未對電子發(fā)票鏈接地址進行加密,故此,掃碼收票模塊25在對二維碼解析后,可以依據該電子發(fā)票鏈接地址,向掃碼收票處理模塊26發(fā)送http訪問請求,在該請求中可以攜帶有解析出的電子發(fā)票信息。當用戶利用掃碼收票模塊掃描的是正確的二維碼時,此時解析出的二維碼數據中的電子發(fā)票信息應該是經過加密后的電子發(fā)票信息,也即在向掃碼收票處理模塊26發(fā)送的請求中攜帶的是加密后的電子發(fā)票信息,為了便于后續(xù)對該電子發(fā)票信息的驗證,需要先對該電子發(fā)票信息進行解密處理。
在具體實現中,當所述掃碼收票處理模塊26中的請求處理子模塊接收到的所述掃碼收票模塊發(fā)送的所述用于獲取電子發(fā)票版式文件的請求后,可以根據預先存儲的密鑰,對所述請求中攜帶的電子發(fā)票信息進行解密處理,獲取到所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼;并向所述獲取子模塊發(fā)送用于獲取電子發(fā)票版式文件的第二請求;所述第二請求中攜帶有解密后的電子發(fā)票信息。其中,解密后的電子發(fā)票信息可以包括發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼等信息。
相應的,
所述獲取子模塊在接收到請求處理子模塊發(fā)送的用于獲取電子發(fā)票版式文件的第二請求后,可以依據所述電子發(fā)票信息中攜帶的所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼,從所述電子發(fā)票版式文件存儲模塊27中查找是否存在與所述發(fā)票代碼、所述發(fā)票號碼和所述發(fā)票校驗碼一致的電子發(fā)票版式文件。
若在電子發(fā)票版式文件存儲模塊中存在與電子發(fā)票信息中攜帶的發(fā)票代碼、發(fā)票號碼和發(fā)票校驗碼一致的電子發(fā)票版式文件,則所述獲取子模塊可以從該電子發(fā)票版式文件存儲模塊27中獲取到該電子發(fā)票版式文件,將所述電子發(fā)票版式文件發(fā)送給所述請求處理子模塊;通過該請求處理子模塊將所述電子發(fā)票版式文件發(fā)送給所述掃碼收票模塊25。
通過上述增加對二維碼數據的加密處理,使得二維碼數據的安全性得到了保證,從而提升數據傳輸時的安全性。
圖2所對應實施例中特征的說明可以參見圖1所對應實施例的相關說明,這里不再一一贅述。
以上對本發(fā)明所提供的一種掃碼收取電子發(fā)票的方法與系統進行了詳細介紹。說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權利要求的保護范圍內。
專業(yè)人員還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結合來實現,為了清楚地說明硬件和軟件的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術方案的特定應用和設計約束條件。專業(yè)技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發(fā)明的范圍。
結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結合來實施。軟件模塊可以置于隨機存儲器(ram)、內存、只讀存儲器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動磁盤、cd-rom、或技術領域內所公知的任意其它形式的存儲介質中。