javaweb實現線上支付功能
1、線上支付概述
什麼是線上支付呢?沒錯,就是在網上花錢!大家一定有過這樣的經歷。但是你可能不太瞭解線上支付的“內情”,下面我們來了解一下!
如果你現在開始經營一個電子商務網站,使用者買了東西一定要支付,你的網站一定要可以連線各大銀行了,然後在各大銀行支付完成後,再返回到你的網站上顯示“支付成功”!
這就是今天我們要做的事情,連線銀行的網銀系統完成支付。說專業一點,我們稱之為“開發線上支付的閘道器”
2、兩種線上支付的方式
線上支付一共有兩種方式:
*電商直接與銀行對接
*電商通過第三方支付平臺與銀行對接
電商直接與銀行對接,這也要銀行同意才行,但可惜的是,銀行很“牛”,不是誰想與它對接都可以的。如果你的電商每日的資金流量夠大,那麼銀行會和你對接,因為客戶支付給電商的錢都存到了銀行的帳戶中!但是如果資金流量小,銀行不會理你的!
當小網站資金量不足時,不能與銀行對接,那麼它們會選擇與第三方支付公司合作。大家也都明白這是些什麼公司,例如:支付寶、易寶、財富通、快錢等公司是國內比較有名的。它們這些公司可以與銀行對接(因為資金夠多),然後小電商與它們對接!但是第三方是要求收費的!第三方一般會收取電商1%的費用,不過不會收客戶的錢。
通過上圖大家可以瞭解到,在銀行的頁面上會顯示出商城名稱、RMB訂單號、訂單時間。。。,這些東西銀行是怎麼知道的,當然是電商傳遞給銀行的。當電商與銀行對接後,電商要給銀行的頁面傳遞銀行頁面需要的引數,所以銀行的頁面才能顯示這些資料!
但是,我們的商城不能只可以對接一家銀行吧!怎麼也要對接BOC、CCB、ABC、ICBC四家吧!不同的銀行需要的對接引數是不相同的,這說明我們在開發時要為不同的銀行寫不同的對接程式碼。這也是直接與銀行對接的缺點!當然與銀行直接對接也有好處,就是安全,沒有手續費!
為不同的銀行開發不同的程式碼(缺點);
安全(優點);
沒有手續費(優點);
小電商銀行不讓對接(缺點)。
上圖中已經說明,客戶在電商的網站上點選確認支付後,會定向到第三方的網站,然後再由第三方與銀行對接。這說明電商要傳遞給第三方引數!再由第三方把引數傳遞給銀行。這種方式的好處是:只需要針對第三方開發即可,而不用再為每家銀行提供引數。為每家銀行提供引數的工作是第三方的任務了。但是,第三方不老可靠的,如果第三方倒閉了,人跑了,那你的錢就沒了。因為客戶支付的錢沒有到你的銀行帳戶中,而是支付到了第三方的銀行帳戶中,而你是在第三方有一個帳戶。而且第三方還要收手續費,一般是1%,這可不是小數字啊(真黑)。
3、通過第三方線上支付規則
電商想在第三方註冊商戶,需要向第三方提供ICP認證。ICP經營許可證是根據國家《網際網路管理辦法規定》,經營性網站必須辦理的網站經營許可證,沒有就屬於非法經營。
我們不可能因為練習就去辦理ICP!所以我們無法在第三方註冊商戶。不過我們已經有現成的在易寶註冊的商戶,所以這一步就可以忽略了。
當你在易寶註冊成功後,易寶會給你如下幾樣東西:
在易寶的開戶賬號(即商戶編碼):10001126856
易寶接入規範:一個chm檔案
對稱加密演算法類:PaymentUtil.java
金鑰:69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl
在易寶接入規範中,我們可以查詢到易寶的支付閘道器,其實就是一個URL,用來與易寶對接的一個網址:https://www.yeepay.com/app-merchant-proxy/node
在易寶接入規範中,還可以查詢到易寶要求的引數,在電商與易寶對接時需要給支付閘道器傳遞這些引數:
這些引數需要追加到URL後面。
但是要注意,這些引數的值需要加密。加密的金鑰和加密演算法易寶都會提供!
其中p8_Url表示當支付成功後,返回到電商的哪個頁面。這說明我們需要寫一個顯示結果的頁面。第三方在支付成功後,會重定向到我們指定的返回頁面,而且還會帶給我們一些引數,我們的頁面需要獲取這些引數,顯示在頁面中。下面是第三方返回的引數:
4、開發第三方線上支付系統
步驟:
index.jsp頁面:一個表單,提交到BuyServlet,表單項有:訂單編號、付款金額、選擇銀行
BuyServlet:獲取表單資料,準備連線第三方閘道器。因為在index.jsp頁面中只給出3個引數,而第三方需要的引數有N多,頁面沒有給出的引數由BuyServlet補充。而且引數還需要加密,這也需要在BuyServlet中完成
BackServlet:當用戶支付成功後,第三方會重定向到我們指定的返回頁面,我們使用BackServlet作為返回頁面,它用來接收第三方傳遞的引數,顯示在頁面中
因為已經有了在易寶的註冊商號,所以我們就不用自己去註冊商號了。所以這裡使用易寶做為第三方支付平臺來測試。因為我本人沒有電商(必須通過ICP認證的電商),所以也不能在第三方註冊商號。
我們現在使用的易寶商號是由傳智播客提供的,巴巴運動網在易寶註冊的商號。所以在測試時支付的錢都給了巴巴運動網在易寶註冊的商號了。
第一步:index.jsp
?12345678910111213141516 | < form action = "" method = "post" > 訂單號:< input type = "text" name = "p2_Order" />< br /> 金 額:< input type = "text" name = "p3_Amt" />< br /> 選擇銀行:< br /> < input type = "radio" name = "pd_FrpId" value = "ICBC-NET-B2C" />工商銀行 < img src = "bank_img/icbc.bmp" align = "middle" /> < input type = "radio" name = "pd_FrpId" value = "BOC-NET-B2C" />中國銀行 < img src = "bank_img/bc.bmp" align = "middle" />< br />< br /> < input type = "radio" name = "pd_FrpId" value = "ABC-NET-B2C" />農業銀行 < img src = "bank_img/abc.bmp" align
|