現在, 網上大多數的支付方式無非就是支付寶, 微信, 所以, 學會用支付寶和微信提供的支付介面已成為必然.
先進入官網 這裡
登入之後, 進入進入我的開放平臺
使用沙箱工具進行除錯
如果沒有專案請建立
在這裡, 我們需要用到的引數就幾個
- 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祕鑰.
命令執行完成之後, 你將會在目錄下看到以下3個檔案:
app_private_key.pem
, app_private_key_pkcs8.pem
, app_public_key.pem
如果你開發的是JAVA應用程式, 那麼你只需要app_public_key.pem
和app_private_key_pkcs8.pem
如果你是PHP, .NET .., 或者其它開發者的話, 你只需要app_public_key.pem
和app_public_key.pem
祕鑰我們已經生成好了, 緊接著, 來將剛生成的祕鑰上傳到沙箱工具中, 將app_public_key.pem
去掉頭部和尾部, 並將中間的換行符去掉之後, 直接提交上傳
在下面下載支付寶沙箱環境app
下載官方demo示例: 這裡
選擇Java版本
下載完成之後, 解壓, 開啟eclipse, 將解壓後的專案工程引入
TradePayDemo
和TradePaySDK
, 這裡我們只看TradePayDemo
在src目錄下開啟zfbinfo.properties
配置檔案, 我們需要對裡面的配置做修改:
- open_api_domain: 支付寶閘道器, 在沙箱應用中可以找到
- pid: 商戶UID
- appid: APPID
- private_key:
app_private_key_pkcs8.pem
將其去頭去尾, 然後刪除中間的換行符 - public_key: 應用公鑰
- alipay_public_key: 支付寶公鑰
- sign_type: 加密型別, 可選RSA和RSA2
進入Main.java, 執行main方法
出現Success代表成功, 注意, 因為沙箱環境會在星期天到星期一進行維護, 所以有可能訪問失敗, 最好換個時間點測試.這裡的TradePayDemo
是個web專案, 你預設匯入的是一個java工程, 所以你需要將它轉換成Dynamic Web project工程, 在專案上右鍵 -> properties -> 輸入project facets
但是, 又會發現一個新問題, TradePayDemo
專案在部署到tomcat的時候, 會報404錯誤, 原因是釋出到tomcat上的專案沒有jsp頁面
在專案上 右鍵 -> 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屬性中, 就可以在頁面上展示這個二維碼了!
以上測試皆是在沙盒測試環境中進行測試, 如果需要實現真正的商戶收付款功能, 請參見官網上的教程