支付寶介面呼叫 -- JAVA版

會Coding的猴子發表於2018-06-25

現在, 網上大多數的支付方式無非就是支付寶, 微信, 所以, 學會用支付寶和微信提供的支付介面已成為必然.

先進入官網 這裡

支付寶介面呼叫 -- JAVA版

登入之後, 進入進入我的開放平臺
使用沙箱工具進行除錯
如果沒有專案請建立

支付寶介面呼叫 -- JAVA版

在這裡, 我們需要用到的引數就幾個

  • APPID
  • 支付寶閘道器
  • RSA或者RSA2, 這兩個加密方式任選其一, 我這裡使用的是RSA
  • 商戶UID
    支付寶介面呼叫 -- JAVA版
    一開始, RSA祕鑰這裡是空的, 你需要去設定
    滑鼠懸浮在藍色小感嘆號上, 會出現一行文字, 這裡會教你怎麼設定祕鑰
    點選生成方法
    支付寶介面呼叫 -- JAVA版
    這裡, 你可以根據自己的系統選擇不同的版本進行下載, 不過這裡並沒有提供linux版本的圖形介面工具. 如果你是linux使用者, 那麼你只能通過OpenSSl命令的方式生成. 滑動滑鼠滾輪, 移動到頁面底部, 會有一個教程 按鈕, 點進去, 它會教你怎麼通過OpenSSl命令生成RSA祕鑰.
    支付寶介面呼叫 -- JAVA版
genrsa -out app_private_key.pem   1024  #生成私鑰
pkcs8 -topk8 -inform PEM -in app_private_key.pem -outform PEM -nocrypt -out app_private_key_pkcs8.pem #Java開發者需要將私鑰轉換成PKCS8格式
rsa -in app_private_key.pem -pubout -out app_public_key.pem #生成公鑰
exit #退出OpenSSL程式
複製程式碼

這裡1024代表生成的是RSA祕鑰, 如果你是2048的話, 那麼生成的將是RSA2祕鑰.

命令執行完成之後, 你將會在目錄下看到以下3個檔案:

支付寶介面呼叫 -- JAVA版
app_private_key.pem, app_private_key_pkcs8.pem, app_public_key.pem

如果你開發的是JAVA應用程式, 那麼你只需要app_public_key.pemapp_private_key_pkcs8.pem
如果你是PHP, .NET .., 或者其它開發者的話, 你只需要app_public_key.pemapp_public_key.pem

祕鑰我們已經生成好了, 緊接著, 來將剛生成的祕鑰上傳到沙箱工具中, 將app_public_key.pem去掉頭部和尾部, 並將中間的換行符去掉之後, 直接提交上傳

支付寶介面呼叫 -- JAVA版
伺服器就會幫我們自動生成支付寶的公鑰
支付寶介面呼叫 -- JAVA版
左邊使我們的應用公鑰, 右邊使我們的支付寶公鑰, 注意我的是RSA加密方式, 如果你是RSA2加密方式, 請在RSA的上面上傳.

在下面下載支付寶沙箱環境app

支付寶介面呼叫 -- JAVA版

下載官方demo示例: 這裡
選擇Java版本

下載完成之後, 解壓, 開啟eclipse, 將解壓後的專案工程引入

支付寶介面呼叫 -- JAVA版
TradePayDemoTradePaySDK, 這裡我們只看TradePayDemo

在src目錄下開啟zfbinfo.properties配置檔案, 我們需要對裡面的配置做修改:

支付寶介面呼叫 -- JAVA版
這裡面, 我們需要修改的有7個引數

  • open_api_domain: 支付寶閘道器, 在沙箱應用中可以找到
  • pid: 商戶UID
  • appid: APPID
  • private_key: app_private_key_pkcs8.pem將其去頭去尾, 然後刪除中間的換行符
  • public_key: 應用公鑰
  • alipay_public_key: 支付寶公鑰
  • sign_type: 加密型別, 可選RSARSA2

進入Main.java, 執行main方法

支付寶介面呼叫 -- JAVA版
出現Success代表成功, 注意, 因為沙箱環境會在星期天到星期一進行維護, 所以有可能訪問失敗, 最好換個時間點測試.

這裡的TradePayDemo是個web專案, 你預設匯入的是一個java工程, 所以你需要將它轉換成Dynamic Web project工程, 在專案上右鍵 -> properties -> 輸入project facets

支付寶介面呼叫 -- JAVA版
按照上面的方法將它轉換成web工程

但是, 又會發現一個新問題, TradePayDemo專案在部署到tomcat的時候, 會報404錯誤, 原因是釋出到tomcat上的專案沒有jsp頁面

支付寶介面呼叫 -- JAVA版
WebContent資料夾是我們把java工程強行轉換成web工程時出現的, 而WebRoot資料夾才是我們jsp頁面存放的資料夾, tomcat預設匯入的是WebContent這個資料夾, 所以我們需要指定一下, 該匯入的是WebRoot資料夾而不是WebContent.

在專案上 右鍵 -> properties -> 輸入dep

支付寶介面呼叫 -- JAVA版
這裡是部署到tomcat時, 要部署所有的資料夾, 我們將原來的WebContent修改為WebRoot, 重新部署一下, 問題解決.

訪問 http://localhost:8080/TradePayDemo/

支付寶介面呼叫 -- JAVA版
點選第二個, 當面付2.0, 二維碼支付
支付寶介面呼叫 -- JAVA版
隨意輸入, 點選確認按鈕後, 跳轉到二維碼支付頁面, 開啟手機上下載好的支付寶沙盒app
支付寶介面呼叫 -- JAVA版
成功支付0.01元~, 已經被支付過的二維碼不可重複支付, 這個二維碼就已經失效了

這個test_trade_precreate方法就是我們二維碼當面付的執行方法

支付寶介面呼叫 -- JAVA版

  • outTradeNo: 使隨機生成的訂單號, 保證唯一
  • subject: 標題
  • totalAmount: 就是我們規定的支付金額
  • ...

在這一行, 有一個被註釋的方法, 這個方法可以將二維碼儲存到本地

支付寶介面呼叫 -- JAVA版

ZxingUtils.getQRCodeImge(response.getQrCode(), 256, filePath);
// 我們只需要修改第3個引數, 也就是二維碼在本地的儲存路徑
複製程式碼

在實際開發中, 我們只需要將這個專案下的所有java檔案和jar包複製到你的專案中去, 通過Main物件呼叫這個test_trade_precreate方法就可以了.

  • test_trade_precreate()方法預設是不接受引數的, 所以你需要手動加一個String型別的引數, 代表的是圖片的路徑, 然後修改
    支付寶介面呼叫 -- JAVA版
    這一行程式碼, 將引數imagePath放入String.format()中, 返回圖片的絕對路徑, 將圖片儲存到本地路徑之後, 並將圖片名稱作為返回值返回.
    支付寶介面呼叫 -- JAVA版
  • 修改了test_trade_precreate()方法之後, main函式會報錯, 因為在main函式中呼叫了test_trade_precreate()方法, 我們只需要將那一行程式碼註釋即可
  • 在Servlet中, 將images資料夾的絕對路徑傳入
    支付寶介面呼叫 -- JAVA版
    我們只管呼叫方法, 並接受返回的圖片名稱, 名稱放入request域中, 轉發到我們要展示二維碼的頁面
  • jsp頁面程式碼
    支付寶介面呼叫 -- JAVA版
    我們只需要將圖片名稱放入img標籤的src屬性中, 就可以在頁面上展示這個二維碼了!

以上測試皆是在沙盒測試環境中進行測試, 如果需要實現真正的商戶收付款功能, 請參見官網上的教程

相關文章