天天看點

SpringBoot支付寶支付功能

基于SpringBoot支付寶支付功能極簡

1、導入依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.7.4.ALL</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!-- servlet 依賴包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
           

2、支付寶配置類

參數需要去支付寶開發憑條申請,這裡我使用的是沙箱環境。模拟交易金額收支沙箱環境也是可以看到的,收取一定費率手續費。

package springboot1.config;
//todo 支付寶配置類
public class AlipayConfig {
    //todo APP應用ID
    public static String app_id = "2021000127830828";
    //todo 商戶私鑰
    public static String merchant_private_key = "";
    //todo 支付寶公鑰
    public static String alipay_public_key = "" ;
    public static String notify_url = "";
    //todo 同步通知
    public static String return_url = "";
    //todo 簽名方式
    public static String sign_type = "RSA2";
    //todo 字元編碼格式
    public static String charset = "utf-8";
    //todo 支付寶網關
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";     
}
           

3、IDUtil 使用雪花算法生成18位訂單号

package springboot1.until;
import org.springframework.stereotype.Component;
@Component
public class IDUtil {
    //todo 使用雪花算法 随機生成 18位 ID
    public static String getId(){
        try {
            Thread.sleep(1);
        }catch (Exception e){
            e.printStackTrace();
        }
        SnowflakeIdWorker sf =new SnowflakeIdWorker(2,3);
        long l =sf.nextId();
       return String.valueOf(l);
    }
}
           

4、AlipayServer 支付接口

package springboot1.server;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface AlipayServer {
      void pay(HttpServletResponse response,HttpServletRequest request) throws IOException;
}
           

5、AlipayServerImpl 支付接口實作類

package springboot1.server.impl;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import springboot1.config.AlipayConfig;
import springboot1.server.AlipayServer;
import springboot1.until.IDUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Service
@Slf4j
public class AlipayServerImpl implements AlipayServer {

    @Override
    public void pay(HttpServletResponse response,HttpServletRequest request) throws IOException {
        response.setContentType("text/html;charset=utf-8"); //todo 内容類型
        PrintWriter writer = response.getWriter();
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //todo 設定請求參數
        AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
        //todo 随機生成一個 18位訂單号
        String order_number = IDUtil.getId();
        //todo 設定付款金額
        String total_amount = new String("159");
        //todo 訂單名稱
        String subject = ("小米智能手環6");
        aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        String result = null;
        try {
            result = alipayClient.pageExecute(aliPayRequest).getBody();
        }catch (Exception e){
            e.printStackTrace();
        }
        writer.println(result);
        log.info("傳回結果={}",result);
    }
}
           

6、AlipayController 支付控制器類

package springboot1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springboot1.server.AlipayServer;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/alipayController")
public class AlipayController {

    @Resource
    private AlipayServer alipayServer;

    @RequestMapping("/payMent")
    public void payMent(HttpServletResponse response,HttpServletRequest request){
        try {
            alipayServer.pay(response,request);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @RequestMapping("/")
    public String toTest(){
        return "index";
    }
}
           

7、結果

SpringBoot支付寶支付功能

繼續閱讀