自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Boot 3.4 實(shí)現(xiàn)支付寶支付集成,輕松搞定支付功能

開發(fā) 開發(fā)工具
在本地開發(fā)時(shí),我們通常會(huì)遇到接口請(qǐng)求的問題:如果外部系統(tǒng)需要調(diào)用我們的接口(比如支付寶返回支付結(jié)果),那么我們需要一個(gè)公網(wǎng)地址來接收這些回調(diào)請(qǐng)求。

支付寶支付集成是電商應(yīng)用中常見的功能之一,今天我們將通過 Spring Boot 3.4 來實(shí)現(xiàn)這一功能,包括支付寶沙箱環(huán)境配置、內(nèi)網(wǎng)穿透配置、支付請(qǐng)求參數(shù)的設(shè)置等步驟,確保你能快速上手并完成支付功能的集成。

支付寶沙箱環(huán)境配置

為了進(jìn)行支付功能的測(cè)試,我們需要使用支付寶提供的沙箱環(huán)境。這是一個(gè)虛擬的支付環(huán)境,專門用于測(cè)試和調(diào)試。訪問沙箱環(huán)境:支付寶沙箱 https://openhome.alipay.com/platform/appDaily.htm。使用沙箱時(shí),可以采用默認(rèn)的密鑰進(jìn)行測(cè)試,我們只需要獲取以下幾個(gè)關(guān)鍵數(shù)據(jù):

  • 支付寶的公鑰和私鑰
  • 支付的網(wǎng)關(guān)地址
  • 支付的APP ID

內(nèi)網(wǎng)穿透配置

在本地開發(fā)時(shí),我們通常會(huì)遇到接口請(qǐng)求的問題:如果外部系統(tǒng)需要調(diào)用我們的接口(比如支付寶返回支付結(jié)果),那么我們需要一個(gè)公網(wǎng)地址來接收這些回調(diào)請(qǐng)求。此時(shí),內(nèi)網(wǎng)穿透技術(shù)便派上了用場(chǎng),它可以幫助我們將本地服務(wù)器暴露到公網(wǎng)。

通過使用如 Ngrok https://ngrok.com/ 或 Natapp https://natapp.cn 等工具,你可以為本地服務(wù)配置一個(gè)公網(wǎng)地址。免費(fèi)版通常會(huì)提供一個(gè)隨機(jī)生成的地址,這樣你就能在外網(wǎng)測(cè)試接口了。

配置支付寶支付 SDK

在集成支付寶支付前,我們需要引入支付寶的 SDK。以下是添加依賴的 Maven 配置:

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.9.28.ALL</version>
</dependency>

接下來,我們?cè)?nbsp;application.yml 文件中配置支付寶相關(guān)信息:

server:
  port: 9090

alipay:
  appId: 9021000135634074
  appPrivateKey: <your-app-private-key>
  alipayPublicKey: <your-alipay-public-key>
  notifyUrl: http://v6tqyw.natappfree.cc/alipay/notify

支付請(qǐng)求參數(shù)對(duì)象

為了創(chuàng)建支付請(qǐng)求,我們需要準(zhǔn)備支付訂單的基本信息,如訂單號(hào)、金額、商品描述等。這些信息會(huì)通過支付寶的 API 發(fā)起請(qǐng)求。

定義一個(gè)支付請(qǐng)求對(duì)象 PayVO

package com.icoderoad.dto;


import java.math.BigDecimal;


@Data
public class PayVO {
    private String outTradeNo; // 商戶訂單號(hào)
    private String subject;    // 訂單名稱
    private BigDecimal totalAmount; // 付款金額
    private String body;      // 商品描述
}

支付接口實(shí)現(xiàn)

接下來,我們需要通過支付寶 SDK 創(chuàng)建支付客戶端并發(fā)送支付請(qǐng)求。以下是實(shí)現(xiàn)的關(guān)鍵步驟:

package com.icoderoad.controller;


import com.icoderoad.config.AliPayConfig;
import com.icoderoad.dto.PayVO;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradePagePayResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;


import javax.servlet.http.HttpServletResponse;
import java.util.UUID;


@RestController
@RequestMapping("/alipay")
public class AliPayController {


    @Autowired
    private AliPayConfig aliPayConfig;


    private static final String GATEWAY_URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
    private static final String CHARSET = "utf-8";
    private static final String SIGN_TYPE = "RSA2";


    @GetMapping("/pay")
    public void pay(PayVO payVO, HttpServletResponse response) throws Exception {
        // 創(chuàng)建支付客戶端
        AlipayClient alipayClient = new DefaultAlipayClient(
            GATEWAY_URL,
            aliPayConfig.getAppId(),
            aliPayConfig.getAppPrivateKey(),
            "JSON",
            CHARSET,
            aliPayConfig.getAlipayPublicKey(),
            SIGN_TYPE
        );


        // 創(chuàng)建支付請(qǐng)求對(duì)象
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setNotifyUrl(aliPayConfig.getNotifyUrl());


        // 設(shè)置請(qǐng)求參數(shù)
        payVO.setOutTradeNo(UUID.randomUUID().toString());
        request.setBizContent("{\"out_trade_no\":\"" + payVO.getOutTradeNo() + "\","
                             + "\"total_amount\":\"" + payVO.getTotalAmount() + "\","
                             + "\"subject\":\"" + payVO.getSubject() + "\","
                             + "\"body\":\"" + payVO.getBody() + "\","
                             + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");


        // 設(shè)置回調(diào)接口
        request.setReturnUrl("http://localhost:9090/hello/pay");


        // 執(zhí)行支付請(qǐng)求
        try {
            String form = alipayClient.pageExecute(request).getBody();
            response.setContentType("text/html;charset=" + CHARSET);
            response.getWriter().write(form);
            response.getWriter().flush();
            response.getWriter().close();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
    }
}

支付回調(diào)接口

支付寶支付成功后,會(huì)調(diào)用我們?cè)?nbsp;notifyUrl 中配置的回調(diào)接口。這時(shí),我們需要在回調(diào)接口中處理支付結(jié)果,確認(rèn)支付狀態(tài)。

package com.icoderoad.controller;


import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/alipay")
public class AliPayCallbackController {


    @PostMapping("/notify")
    public void handleNotify(@RequestBody String notifyData) {
        // 處理支付結(jié)果通知
        // 例如:驗(yàn)證簽名、更新訂單狀態(tài)等
    }
}

測(cè)試支付

在集成完成后,你可以通過訪問以下 URL 來測(cè)試支付流程:

http://localhost:9090/alipay/pay?subject=測(cè)試商品&total_amount=1000

在支付寶沙箱環(huán)境中,輸入測(cè)試賬號(hào)和支付密碼完成支付。支付成功后,支付寶將會(huì)回調(diào)我們的 notifyUrl,我們可以通過此接口接收支付結(jié)果并更新訂單狀態(tài)。

總結(jié)

通過上述步驟,我們成功地將支付寶支付集成到 Spring Boot 3.4 項(xiàng)目中,完成了支付功能的實(shí)現(xiàn)。這些操作不僅可以應(yīng)用于本地開發(fā)環(huán)境,還可以通過內(nèi)網(wǎng)穿透技術(shù)進(jìn)行公網(wǎng)測(cè)試,確保支付寶支付功能在實(shí)際環(huán)境中的順利運(yùn)行。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2025-02-18 16:00:00

SpringBoot支付Java

2021-09-09 15:30:28

鴻蒙HarmonyOS應(yīng)用

2011-04-21 11:27:42

Firefox支付寶

2013-10-11 09:41:01

Windows 8.1支付寶

2021-01-25 14:13:26

iOS支付寶支付

2009-11-23 10:02:22

PHP支付寶接口

2024-02-28 08:59:47

2014-11-17 10:52:56

支付寶去阿里化

2011-10-15 23:24:48

Java

2009-08-26 16:07:09

支付寶網(wǎng)上購物安全邁克菲

2023-11-28 08:53:15

2009-09-17 12:15:28

互聯(lián)網(wǎng)

2018-02-25 11:22:14

SDK代碼接口

2021-12-29 21:36:12

微信支付寶移動(dòng)支付

2016-12-27 09:49:59

支付寶紅包破解

2011-12-28 21:43:40

蘋果

2013-11-28 11:15:43

微信支付寶支付戰(zhàn)爭(zhēng)

2018-03-27 12:02:31

央行支付寶紅包

2021-03-18 19:08:49

Java支付數(shù)據(jù)庫

2017-12-18 18:23:09

支付寶掃碼賺錢支付寶套路
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)