支付寶pc網頁支付

本文講解如何在pc網頁上完成支付寶的支付功能, 詳細講解了支付寶的配置信息,項目如何使用配置信息等, 本項目中代碼能夠直接運行, 也能夠將代碼遷移至你本身的項目中直接使用。 注意: 下面講解的功能只能用在pc網頁上進行支付, 不能用於其它場景支付。html

實例下載java

1.本項目中使用的工具能夠在百度雲下載:  算法

    Eclipse:  https://pan.baidu.com/s/1ci4Nimexpress

    Tomcat:   https://pan.baidu.com/s/1eS6JlrOjson

    Maven:    https://pan.baidu.com/s/1i4Ud35Fapi

    JDK1.7:   http://pan.baidu.com/s/1pLBMCHH服務器

   2.項目配置準備:app

      配置參數:APPID, 應用私鑰,支付寶公鑰,將生成的參數在代碼中進行替換, 配置參數生成步驟見下面dom

 2.1 訪問支付寶開放平臺官網:  https://open.alipay.com/platform/home.htm, 使用支付寶app掃碼登陸jsp

      2.2 訪問開放平臺的【開發者中心】->【研發服務】功能,進入沙箱環境

 2.3 沙箱環境中, 查看【研發服務】->【沙箱應用】,頁面以下

          沙箱環境下默認爲用戶分配了APPID, 支付寶網關(注意這個地址中帶dev字樣,正式環境下沒有dev), 用戶須要手動配置

          RSA2密鑰,也能夠配置RSA密鑰(推薦RSA2)

 

 點擊上圖的【設置應用公鑰】後,彈出以下圖A所示, 點擊下圖A中的【設置應用公鑰】,彈出編輯框(圖B),在編輯框中          填寫應用公鑰,此公鑰可使用工具生成, 工具的下載可參見圖B中【查看密鑰生成】, 圖C爲密鑰工具截圖

 2.4  密鑰工具生成了 應用的公鑰和私鑰,請上傳公鑰,本身保留 私鑰(後面會用到), 公鑰上傳成功後,支付寶生成相               應的公鑰(見圖D)  注意: 這裏分【應用公鑰】和【支付寶公鑰】, 代碼使用中請注意使用的是哪一種密鑰

3 項目運行效果圖   

       項目本地運行後,訪問地址: http://localhost:8080/Alipay/index.jsp

       3.1 支付頁面

           付款時,商戶訂單號(out_trade_no)必須惟一,訂單號由應用程序根據算法生成, 點擊【下圖】(圖E)付款後,彈出圖F        對應的付款頁面,掃碼付款成功後,返回商戶提早設定的頁面(圖G), 圖G地址欄url中 return_url.jsp爲提早設置的付款成        功調用頁面,此頁面開發者可根據業務自行定製,本例中顯示支付成功後返回的支付信息,支付寶對應的訂單號 trade_no

3.2 交易查詢

            交易查詢功能爲用戶提供了歷史訂單查詢功能,查詢條件爲: 商戶訂單號(out_trade_no),支付寶交易號(trade_no), 

         二個條件至少要選填一個, 調用此接口後,返回交易結果信息(見圖I), code=10000, msg="Success" 代表交易成功

3.3 退款

          退款操做將A付給B的錢退給B, 退給B的錢能夠進行一次或者屢次,但數次累加總和不能超過以前A給B的錢,具體見代碼

4 代碼詳解:

       4.1 支付頁面jsp代碼, 代碼中包含了 支付寶開發網關 gatewayUrl, appid, 應用私鑰:merchant_private_key

           支付寶公鑰:  alipay_public_key

           注意: 支付寶付款成功後,支付寶服務器調用應用程序的接口告之付款是否真正成功,也就是說付款成功以後的邏輯應            該放在此接口中進行處理,一筆交易成功後,會回調屢次(注意邏輯控制),

           回調接口設置代碼:  alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

           支付成功後跳轉頁面設置: AlipayConfig.return_url

複製代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>付款</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%-- <%@ page import="com.alipay.sdk.app.EnvUtils"%> --%>
<%
    //得到初始化的AlipayClient
    //com.alipay.sdk.app.EnvUtils
    /* EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX); */
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, 
              AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, 
              AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
     
    //設置請求參數
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(AlipayConfig.return_url);
    alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
     
    //商戶訂單號,商戶網站訂單系統中惟一訂單號,必填
    String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //付款金額,必填
    String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");
    //訂單名稱,必填
    String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
    //商品描述,可空
    String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");
     
    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," 
            + "\"total_amount\":\""+ total_amount +"\"," 
            + "\"subject\":\""+ subject +"\"," 
            + "\"body\":\""+ body +"\"," 
            + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
     
    //若想給BizContent增長其餘可選請求參數,以增長自定義超時時間參數timeout_express來舉例說明
    //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," 
    //      + "\"total_amount\":\""+ total_amount +"\"," 
    //      + "\"subject\":\""+ subject +"\"," 
    //      + "\"body\":\""+ body +"\"," 
    //      + "\"timeout_express\":\"10m\"," 
    //      + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    //請求參數可查閱【電腦網站支付的API文檔-alipay.trade.page.pay-請求參數】章節
     
    //請求
    String result = alipayClient.pageExecute(alipayRequest).getBody();
    System.out.println("result:" + result);
     
    //輸出
    out.println(result);
%>
<body>
</body>
</html>

複製代碼

 4.2 交易查詢

複製代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>交易查詢</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%
    //得到初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, 
               AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, 
               AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
     
    //設置請求參數
    AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
     
    //商戶訂單號,商戶網站訂單系統中惟一訂單號
    String out_trade_no = new String(request.getParameter("WIDTQout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //支付寶交易號
    String trade_no = new String(request.getParameter("WIDTQtrade_no").getBytes("ISO-8859-1"),"UTF-8");
    //請二選一設置
     
    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+"\"trade_no\":\""+ trade_no +"\"}");
     
    //請求
    String result = alipayClient.execute(alipayRequest).getBody();
     
    //輸出
    out.println(result);
%>
<body>
</body>
</html>

複製代碼

4.3 交易退款

複製代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>退款</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%
    //得到初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, 
                   AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, 
                   AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
     
    //設置請求參數
    AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
     
    //商戶訂單號,商戶網站訂單系統中惟一訂單號
    String out_trade_no = new String(request.getParameter("WIDTRout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //支付寶交易號
    String trade_no = new String(request.getParameter("WIDTRtrade_no").getBytes("ISO-8859-1"),"UTF-8");
    //請二選一設置
    //須要退款的金額,該金額不能大於訂單金額,必填
    String refund_amount = new String(request.getParameter("WIDTRrefund_amount").getBytes("ISO-8859-1"),"UTF-8");
    //退款的緣由說明
    String refund_reason = new String(request.getParameter("WIDTRrefund_reason").getBytes("ISO-8859-1"),"UTF-8");
    //標識一次退款請求,同一筆交易屢次退款須要保證惟一,如需部分退款,則此參數必傳
    String out_request_no = new String(request.getParameter("WIDTRout_request_no").getBytes("ISO-8859-1"),"UTF-8");
     
    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," 
            + "\"trade_no\":\""+ trade_no +"\"," 
            + "\"refund_amount\":\""+ refund_amount +"\"," 
            + "\"refund_reason\":\""+ refund_reason +"\"," 
            + "\"out_request_no\":\""+ out_request_no +"\"}");
     
    //請求
    String result = alipayClient.execute(alipayRequest).getBody();
     
    //輸出
    out.println(result);
%>
<body>
</body>
</html>

複製代碼

相關文章
相關標籤/搜索