項目中要使用到在線支付功能 目前常用的在線支付手段主要是 支付寶 和微信。
這里我使用的是支付寶支付,支付寶有個好處就是他有一個沙箱模式 即使沒有申請渠道的資格也可以體驗一把在線支付。
第一步:完善沙箱信息
進入支付寶的開發者中心 就可以看到有個沙箱環境
使用支付寶提供的秘鑰生成工具 生成對應的秘鑰 一定要保存好。支付寶推薦使用RSA2(SHA256)秘鑰
把自己的公鑰填上去就可以了。
第二步 閱讀在線支付開發文檔
里面需要的配置信息 對應的使用沙箱環境的信息
第三步 環境搭建
下載服務端SDK 并添加到項目中
這里我使用的maven項目 導入本地jar包采用了下列方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
< dependency > < groupId >com.alipay</ groupId > < artifactId >alipay</ artifactId > < version >1.1.1</ version > < scope >system</ scope > <!--本地jar的路徑,相對或者絕對都可以--> < systemPath >${project.basedir}/lib/alipay-sdk-java20170307171631.jar</ systemPath > </ dependency > < dependency > < groupId >com.alipay1</ groupId > < artifactId >commons</ artifactId > < version >1.1.1</ version > < scope >system</ scope > <!--本地jar的路徑,相對或者絕對都可以--> < systemPath >${project.basedir}/lib/commons-logging-1.1.1.jar</ systemPath > </ dependency > |
1、調用接口 啟動支付頁面 具體參數說明 請查看文檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//轉到支付頁面 //初始化客戶端 只需要實例化一次(線程安全) AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipaydev.com/gateway.do" , "2016080300153333" , GlobalConstant.APP_PRIVATE_KEY, "json" , "UTF-8" , GlobalConstant.ALIPAY_PUBLIC_KEY, "RSA2" ); AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); //創建API對應的request //在公共參數中設置回跳和通知地址 alipayRequest.setReturnUrl( "回跳地址" ); //異步回調一定是要在外網 不然支付寶服務器無法訪問 alipayRequest.setNotifyUrl( "異步回調地址" ); alipayRequest.setBizContent( "{" + " \"out_trade_no\":\"" + orderId + "\"," + " \"total_amount\":\"" + fetchParcel.getMoney() + "\"," + " \"subject\":\"代領快遞\"," + " \"seller_id\":\"2088102169684935\"," + " \"product_code\":\"QUICK_WAP_PAY\"" + " }" ); //填充業務參數 String form = alipayClient.pageExecute(alipayRequest).getBody(); //調用SDK生成表單 httpResponse.setContentType( "text/html;charset=utf-8" ); httpResponse.getWriter().write(form); //直接將完整的表單html輸出到頁面 httpResponse.getWriter().flush(); |
1、接收同步回調展示 結果 此結果只是展示,具體狀態必須依賴支付寶的異步通知
2、接收異步回調更改訂單狀態 支付寶的異步回調 是服務器之間的通訊并不會產生頁面 并且 設置的回調地址
一定是要在外網上的 不然支付寶的服務器是無法訪問該地址的
對回調得到的信息要使用支付寶的api進行校驗
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//將異步通知中收到的所有參數都存放到map中 Map<String, String> paramsMap = new HashMap<>(); paramsMap.put( "tarde_no" ,trade_no); paramsMap.put( "trade_status" ,trade_status); paramsMap.put( "total_amount" ,total_amount); paramsMap.put( "out_trade_no" ,out_trade_no); boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, GlobalConstant.ALIPAY_PUBLIC_KEY, "UTF-8" , "RSA2" ); //調用SDK驗證簽名 if (signVerified) { //驗簽成功后,按照支付結果異步通知中的描述,對支付結果中的業務內容進行二次校驗,校驗成功后在response中返回success并繼續商戶自身業務處理,校驗失敗返回failure String out_trade_no1 = paramsMap.get( "out_trade_no" ); String trade_status1 = paramsMap.get( "trade_status" ); logger.info(out_trade_no1+ ":" +trade_status1); return "success" ; } else { //驗簽失敗則記錄異常日志,并在response中返回failure. return "failure" ; } |
第4步 進行支付體驗
這里選擇支付寶賬號登錄 賬號 密碼 在沙箱環境中可以找到 (買家賬號)建議下載支付寶沙箱錢包 可以模擬在線支付調用錢包客戶端的效果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/mixi9760/article/details/66473368