支付寶第三方接口支付實現


注冊沙箱賬號

  到螞蟻金服注冊開發者賬號,注冊地址:https://open.alipay.com,用你的 支付寶 賬號掃碼登錄,完善個人信息,選擇服務類型。

  

  根據情況選擇接入方式,我們這里選擇自研開發者,如果已經注冊過的省略。

   

   選擇 開發者中心 --> 研發服務 --> 沙箱,進入沙箱管理界面。

  

   進入沙箱,第一次需要填寫信息,記下appId,公鑰設置處需要把下面步驟生成的公鑰設置到這里。

 

生成公私秘鑰

  登錄官方地址: https://docs.open.alipay.com/291/105971,進入秘鑰生成頁面。

  

  打開下載的工具,運行程序,選擇 JAVA 2048 方式,點擊生成秘鑰。

  

  把此處生成的公鑰復制設置到沙箱環境,就是上面的設置公鑰配置,然后把公私秘鑰保存起來,以備后用。

創建SpringBoot項目

  1.在pom.xml中導入支付相關依賴。

  

  2.配置config文件

  

package com.etc.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *類名:AlipayConfig
 *功能:基礎配置類
 *詳細:設置帳戶有關信息及返回路徑
 *修改日期:2017-04-05
 *說明:
 *以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
 *該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。
 */

public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓請在這里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
    public static String app_id = "";

    // 商戶私鑰,您的PKCS8格式RSA2私鑰
    public static String merchant_private_key = "";

    // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
    public static String alipay_public_key = "";

    // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String notify_url = "http://127.0.0.1:7777/Home";

    // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
    public static String return_url = "http://127.0.0.1:7777/Home";

    // 簽名方式
    public static String sign_type = "RSA2";

    // 字符編碼格式
    public static String charset = "utf-8";

    // 支付寶網關
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

    // 支付寶網關
    public static String log_path = "C:\\";



}

 3.編寫Controller

package com.etc.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.etc.config.AlipayConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@CrossOrigin
@Api(tags = "支付寶第三方接口支付")
@RestController
@RequestMapping("/PayController")
public class PayController {

    @RequestMapping("/pay")
    @ApiOperation("阿里支付")
    public void payController(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //設置請求編碼
        response.setContentType("text/html;charset=utf-8");
        //獲得初始化的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 = new String(request.getParameter("WIDout_trade_no").getBytes("UTF-8"),"UTF-8");
        //付款金額,必填
        String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("UTF-8"),"UTF-8");
        //訂單名稱,必填
        String subject = new String(request.getParameter("WIDsubject").getBytes("UTF-8"),"UTF-8");
        //商品描述,可空
        String body = new String(request.getParameter("WIDbody").getBytes("UTF-8"),"UTF-8");
        System.out.println(out_trade_no);

        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 form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody(); //調用SDK生成表單
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=" + AlipayConfig.charset);
        response.getWriter().write(form);//直接將完整的表單html輸出到頁面
        response.getWriter().flush();
        response.getWriter().close();
    }
}

 4.在resources路徑下創建static資源,測試支付。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="PayController/pay" method="post">
        訂單號:<input type="text" name="WIDout_trade_no" required><br/>
        訂單名稱:<input type="text" name="WIDsubject"><br/>
        付款金額:<input type="text" name="WIDtotal_amount" required><br/>
        商品描述:<input type="text" name="WIDbody"><br/>
        <input type="submit" value="下單"> <input type="reset" value="重置">
    </form>
</body>
</html>

 5. 在瀏覽器端訪問 index.html頁面,填寫表單信息之后,點擊提交,此時會跳轉到掃碼支付頁碼。

  可以選擇支付的方式:

  (1)下載沙箱版本的支付寶掃碼支付

    

  (2)輸入賬號和密碼支付

     輸入的是買家的賬號和密碼

 

  


免責聲明!

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



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