支付寶接口調用 -- JAVA版

如今, 網上大多數的支付方式無非就是支付寶, 微信, 因此, 學會用支付寶和微信提供的支付接口已成爲必然.java

先進入官網 這裏linux

登陸以後, 進入進入個人開放平臺
使用沙箱工具進行調試
若是沒有項目請建立
web

在這裏, 咱們須要用到的參數就幾個api

  • APPID
  • 支付寶網關
  • RSA或者RSA2, 這兩個加密方式任選其一, 我這裏使用的是RSA
  • 商戶UID

    一開始, RSA祕鑰這裏是空的, 你須要去設置
    鼠標懸浮在藍色小感嘆號上, 會出現一行文字, 這裏會教你怎麼設置祕鑰
    點擊生成方法

    這裏, 你能夠根據本身的系統選擇不一樣的版本進行下載, 不過這裏並無提供linux版本的圖形界面工具. 若是你是linux用戶, 那麼你只能經過OpenSSl命令的方式生成. 滑動鼠標滾輪, 移動到頁面底部,
    會有一個教程 按鈕, 點進去, 它會教你怎麼經過OpenSSl命令生成RSA祕鑰.
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祕鑰.tomcat

命令執行完成以後, 你將會在目錄下看到如下3個文件:

app_private_key.pem, app_private_key_pkcs8.pem, app_public_key.pembash

若是你開發的是JAVA應用程序, 那麼你只須要app_public_key.pemapp_private_key_pkcs8.pem
若是你是PHP, .NET .., 或者其它開發者的話, 你只須要app_public_key.pemapp_public_key.pem服務器

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

服務器就會幫咱們自動生成支付寶的公鑰

左邊使咱們的應用公鑰, 右邊使咱們的支付寶公鑰, 注意個人是RSA加密方式, 若是你是RSA2加密方式, 請在RSA的上面上傳.微信

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

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

下載完成以後, 解壓, 打開eclipse, 將解壓後的項目工程引入

TradePayDemoTradePaySDK, 這裏咱們只看TradePayDemo

在src目錄下打開zfbinfo.properties配置文件, 咱們須要對裏面的配置作修改:

這裏面, 咱們須要修改的有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方法

出現Success表明成功, 注意, 由於沙箱環境會在星期天到星期一進行維護, 因此有可能訪問失敗, 最好換個時間點測試.

這裏的TradePayDemo是個web項目, 你默認導入的是一個java工程, 因此你須要將它轉換成Dynamic Web project工程, 在項目上右鍵 -> properties -> 輸入project facets

按照上面的方法將它轉換成web工程

可是, 又會發現一個新問題, TradePayDemo項目在部署到tomcat的時候, 會報404錯誤, 緣由是發佈到tomcat上的項目沒有jsp頁面

WebContent文件夾是咱們把java工程強行轉換成web工程時出現的, 而WebRoot文件夾纔是咱們jsp頁面存放的文件夾, tomcat默認導入的是WebContent這個文件夾, 因此咱們須要指定一下, 該導入的是WebRoot文件夾而不是WebContent.

在項目上 右鍵 -> properties -> 輸入dep

這裏是部署到tomcat時, 要部署全部的文件夾, 咱們將原來的WebContent修改成WebRoot, 從新部署一下, 問題解決.

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

點擊第二個, 當面付2.0, 二維碼支付

隨意輸入, 點擊確認按鈕後, 跳轉到二維碼支付頁面, 打開手機上下載好的支付寶沙盒app

成功支付0.01元~, 已經被支付過的二維碼不可重複支付, 這個二維碼就已經失效了

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

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

在這一行, 有一個被註釋的方法, 這個方法能夠將二維碼保存到本地

ZxingUtils.getQRCodeImge(response.getQrCode(), 256, filePath);
// 咱們只須要修改第3個參數, 也就是二維碼在本地的保存路徑

在實際開發中, 咱們只須要將這個項目下的全部java文件和jar包複製到你的項目中去, 經過Main對象調用這個test_trade_precreate方法就能夠了.

  • test_trade_precreate()方法默認是不接受參數的, 因此你須要手動加一個String類型的參數, 表明的是圖片的路徑, 而後修改

    這一行代碼, 將參數imagePath放入String.format()中, 返回圖片的絕對路徑, 將圖片保存到本地路徑以後, 並將圖片名稱做爲返回值返回.
  • 修改了test_trade_precreate()方法以後, main函數會報錯, 由於在main函數中調用了test_trade_precreate()方法, 咱們只須要將那一行代碼註釋便可
  • 在Servlet中, 將images文件夾的絕對路徑傳入

    咱們只管調用方法, 並接受返回的圖片名稱, 名稱放入request域中, 轉發到咱們要展現二維碼的頁面
  • jsp頁面代碼

    咱們只須要將圖片名稱放入img標籤的src屬性中, 就能夠在頁面上展現這個二維碼了!

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

相關文章
相關標籤/搜索