天天看點

25-javaweb接入支付寶支付接口

想熟悉支付寶接口支付,後面可能會用,不如在課設中試試手。好吧聽說支付寶不微信支付要簡單些,就拿支付寶的先練下手吧。

基本學習流程,百度一下,找篇部落格看下。

推薦下面這個篇部落格,講的挺好的,複制過來。

當然在最後我會把我遇到的問題寫出來,避免後人在走彎路,并将支付寶的demo整合到我的ssm項目中,同時,會詳細講下如何将demo中的jsp跟據需求改為contral層。

比較可以的操作流程:别人寫的很好了,我就不想寫了:https://github.com/ouyangsihai/sihai-maven-ssm-alipay

下載下傳位址:https://docs.open.alipay.com/270/106291/

25-javaweb接入支付寶支付接口
25-javaweb接入支付寶支付接口

readme.txt請好好看一下。

隻有一個java配置類,其餘都是jsp。

(1).注冊螞蟻金服開發者賬号(免費,不像蘋果會收取費用)

注冊位址:https://open.alipay.com ,用你的支付寶賬号掃碼登入,完善個人資訊,選擇服務類型(我選的是自研)。

25-javaweb接入支付寶支付接口

(2).設定app_id和gatewayurl

25-javaweb接入支付寶支付接口
25-javaweb接入支付寶支付接口

其中密鑰需要自己生成,appid和支付寶網關是已經給好的,網關有dev字樣,表明是用于開發測試。

(3).設定密鑰

25-javaweb接入支付寶支付接口

點選“生成方法”,打開界面如下:

25-javaweb接入支付寶支付接口

下周密鑰生成工具,解壓打開後,選擇2048位生成密鑰:

25-javaweb接入支付寶支付接口

如果沒有設定過,此時顯示文本是“設定應用公鑰”,我這裡是已經設定過得。

25-javaweb接入支付寶支付接口

設定方法,“打開密鑰檔案路徑”:

25-javaweb接入支付寶支付接口
25-javaweb接入支付寶支付接口

複制應用公鑰2048.txt中的内容到點選“設定應用公鑰”的彈出框中,儲存:

25-javaweb接入支付寶支付接口

商戶私鑰(merchant_private_key)

複制 應用私鑰2048.txt 中的内容到merchant_private_key中。

支付寶公鑰(alipay_public_key)

25-javaweb接入支付寶支付接口

點選如上圖連結,複制彈出框裡面的内容到alipay_public_key。

如果這個設定不對,結果是:支付成功,但是驗簽失敗。

如果是正式環境,需要上傳到對應的應用中:

25-javaweb接入支付寶支付接口

(4).伺服器異步通知頁面路徑(notify_url)

如果沒有改名,修改ip和端口号就可以了,我自己的如下:

(5).頁面跳轉同步通知頁面路徑(return_url)

25-javaweb接入支付寶支付接口
25-javaweb接入支付寶支付接口

測試用的支付寶買家賬戶可以在“沙箱賬号”這個頁面可以找到:

25-javaweb接入支付寶支付接口

支付成功後,驗簽結果:

25-javaweb接入支付寶支付接口

好吧,要是你成功跑起來的那麼你很幸運,沒有到什麼坑,我遇到了如下坑點。記錄一下,以供參考:

1.代碼中:

25-javaweb接入支付寶支付接口

要填寫公鑰,注意這個不是生成器中的公鑰,是以不能從那個裡面或者從txt中粘貼,而要重網站上那個檢視公鑰處粘貼:

25-javaweb接入支付寶支付接口

2. 支付寶網關要改,注意測試環境中是alipaydev:

25-javaweb接入支付寶支付接口

3. 從官網下載下傳的沙箱版支付寶怎麼登入:

登入的賬号去沙箱賬号中看,注意不是你的支付寶賬号,也不需要重新注冊!!!!

25-javaweb接入支付寶支付接口

注意打支付寶很人性話的給了我們許多錢,可以肆意的花費了,最後會從你的買家餘額到買家餘額中。

好的,基本注意這些,demo是可以跑起來的了。

下面講下如何加入到ssm架構中,随意控制呢:

你得先對支付寶的流程有一個大緻的了解,整體上了有把握,能使你思路清晰,請看圖:

25-javaweb接入支付寶支付接口

這是支付寶提供的圖檔,大緻過程都表達出來了。

其實到這裡不禁要問,那個同步和異步是幹嘛的呀,我也不知道,百度啊!!!

我找到了,比較新的解釋:

      支付寶同步回調和異步回調

當一個支付請求被發送到支付管道方,支付管道會很快傳回一個結果。但是這個結果,隻是告訴你調用成功了,不是扣款成功,這叫同步調用。

很多新手會拿這個結果 當作支付成功了,那就會被坑死,結果就是支付成功率特别高,伴随着一堆無法解釋的壞賬率,測試人員尤其要注意測試資料的篡改:金額,同步傳回結果,訂單号等。

同步請求參數裡面會有一個回調位址,這個位址是支付管道在扣款成功後調用的,這叫異步調用。

一般同步接口僅檢查參數是否正确,簽名是否無誤等。異步接口才告訴你扣款結果。

一般異步接口有5秒以内的延遲。調用不成功會重試。有時候是這邊成功了,但支付管道側沒收到傳回,于是會繼續調。

當天的支付到第二天還在 被異步調用也都是正常的。這也是開發人員需要特别注意的地方,不要當做重複支付。

測試人員也要對重複回調進行測試,應隻有一次有效。這還不是最坑的,一般 支付管道側,隻有支付成功了才通知你。

要是支付失敗了,壓根兒都不告訴你。

另一方面,如何老收不到異步結果呢?那就得查查了。同步結果不可靠,異步調用不可靠,那怎麼确定支付結果?最終的殺招就是查單了,

反查,一般支付管道側都 會提供反查接口,定時擷取db中待支付的訂單調用支付管道側的反查接口,最終把支付管道側扣款成功的訂單完成掉。

當然,這個沒有将過多細節,更多内容可以參考其他的文檔,大緻就是說,同步通知可以作為支付成功參考,但是準确得出結論還得靠異步的回複

好吧,由于異步必須在伺服器上才能測試,是以這裡我暫時是以同步的作為判斷依據:

開始整合:

思路大緻是這樣子:

在一個支付頁面   --》》》  點選支付  ----》》》 跳轉到處理函數   -----》  在這個函數裡面設定你真正要想支付寶請求的一些參數,以及同步異步回調位址!!! ----》  然後他在封裝好資訊後發送給支付寶

------》》》 頁面會彈出一個支付寶二維碼,你掃碼付錢完  -------》》》 支付寶會向你給的同步異步回調位址發送請求(也就是你要寫個接收請求的函數咯,在裡面可以寫一些你要的邏輯了) ------》》》 

根據回調結果,挑戰頁面給出回調結果  ------ 》》》 finish ! ! !!!!

具體的:

1. 支付請求給個post的位址:也就是你處理支付的函數:

25-javaweb接入支付寶支付接口

2.在contral裡面寫對應 的處理函數裡咯:

函數裡面其實就是把支付寶demo的jsp處理粘過來了:

  

2.處理回調位址:

25-javaweb接入支付寶支付接口

就是一個請求的處理函數,不清楚他們為什麼要在請求後面加一個.action, 反正我沒加。。。

3.寫處理函數咯:也是把支付寶的jsp中對應的一個粘過來,

4.

5.可以了給測試的jsp,和從成功的jsp吧:

alipay.jsp:

 alipaysuccess.jsp

 

當然你可以你要寫一個跳轉,到達支付頁面:

25-javaweb接入支付寶支付接口

好了可以吧:看下框圖吧:

25-javaweb接入支付寶支付接口
25-javaweb接入支付寶支付接口

好,感覺已經将清楚了,注意複制jsp頁面時看清楚導入的包,不出意外,可以成功的。