java實現支付寶電腦支付(servlet版本)


 

前期准備:

螞蟻金融開放平台 進行登錄操作

進入我的開放平台

在上方找到沙箱,進入沙箱(網絡編程虛擬執行環境)。

 

 這里的RSA2密鑰設置下,我已經設置好了,所以便有了支付寶公鑰(公鑰是對外公開的,私鑰是自己保留的具體的不多做解釋)

 至於RSA2密鑰的生成,可參考如下操作:

生成后在工具文件夾如下路徑可以查看自己生成的公鑰和私鑰一對

私鑰保留,公鑰設置到開發者平台RSA2上便可以了。

官方DEMO 因為我們需要一些jar包和可參考類,所以拿個DEMO方便很多

所需要的jar包路徑如下

 

實例編寫:

工具我這里用的是eclipse,這個影響不大~

新建web項目

 項目所需要的類如下

 

AlipayConfig.java

package cn.taosir.demo;

public class AlipayConfig {
    // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數
    public static String return_url = "http://localhost:8080/success.jsp";
    // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String notify_url = "http://localhost:8080/notify";
    // 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
    public static String app_id = "";
    // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
    public static String alipay_public_key = "";
    // 商戶私鑰,您的PKCS8格式RSA2私鑰
    public static String merchant_private_key = "";
    // 簽名方式
    public static String sign_type = "RSA2";
    // 字符編碼格式
    public static String charset = "utf-8";
    // 支付寶網關
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}

 

APPID(在查看支付寶公鑰位置上方)、支付寶公鑰、自己的私鑰,記得配上

NoitfyServlet.java

package cn.taosir.demo;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/notify")
public class NotifyServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("接收到支付寶的異步通知請求——");
        Map<String,String[]> parameterMap=request.getParameterMap();
        System.out.println(parameterMap);
        //成功處理后返回success
        response.getWriter().write("success");
    }
}

 

OrderServlet.java

package cn.taosir.demo;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;

@WebServlet("/order/confirm")
public class OrderServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("開始處理OrderServlet的服務");
        String title = "濤先森";
        String total = "666666";
        String message = "如有什么建議歡迎留言評論";
        //生成訂單號
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String orderSn = simpleDateFormat.format(Calendar.getInstance().getTime());
        //向支付寶發送請求
        //獲得初始化的AlipayClient
        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 = orderSn;
        //付款金額,必填
        String total_amount = total;
        //訂單名稱,必填
        String subject = title;
        //商品描述,可空
        String body = message;
        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-請求參數】章節
        AlipayTradePagePayResponse alipayResponse = null;
        try {
            alipayResponse=alipayClient.pageExecute(alipayRequest);
            System.out.println(alipayResponse.getBody());
             System.out.println(alipayResponse.getMsg());
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write(alipayResponse.getBody());
    }
}

 

至此,大功告成

下面開始測試

將項目部署到tomcat上run起來

http://localhost:8080/alipay-demo/order/confirm 可以看到頁面通過該請求跳轉到了支付寶的接口

 

 下載沙箱環境的支付寶APP可以掃碼測試喔

這里我們點擊右邊登錄賬戶付款

賬號和密碼可在沙箱平台查看個人賬號

之后登錄就支付了,正常就跳轉到了支付成功頁面。

如有錯誤的地方或建議歡迎留言,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM